diff --git a/engine/Sim.lua b/engine/Sim.lua index db1d07e6ae4..19debc65b57 100644 --- a/engine/Sim.lua +++ b/engine/Sim.lua @@ -1045,6 +1045,11 @@ end function MetaImpact(instigator, location, maxRadius, amount, affectsCategory, damageFriendly) end +--- Handles command structure when a unit upgrades to another: +--- - Adds the new unit to the old unit's queued commands. +--- - Retargets assisters onto the new unit. +--- - Sets repeat queue. +--- - Sets missing health proportion of the new unit. ---@param from Unit ---@param to Unit function NotifyUpgrade(from, to) diff --git a/lua/sim/Unit.lua b/lua/sim/Unit.lua index 82ac42a4ebe..c8743015f25 100644 --- a/lua/sim/Unit.lua +++ b/lua/sim/Unit.lua @@ -2844,20 +2844,6 @@ Unit = ClassUnit(moho.unit_methods, IntelComponent, VeterancyComponent, DebugUni return false -- Report failure of OnStartBuild end - -- If desired, prevent engineer stations from building their upgrades as a separate unit - -- We need a separate table for this just in case a unit is intended to be able to build its own upgrade as a separate unit too - -- Its type is `UnparsedCategory[]` to make it behave identically to `Blueprint.Economy.BuildableCategory` - local upgradeOnlyCategory = self.Blueprint.Economy.UpgradeOnlyCategory - if upgradeOnlyCategory and order == "MobileBuild" then - for _, unparsedCat in upgradeOnlyCategory do - if EntityCategoryContains(ParseEntityCategory(unparsedCat), built) then - -- Destroying the built unit will clear the command too, so we don't need to clear the entire queue (in case this exploit was done on accident). - built:Destroy() - return false - end - end - end - -- We just started a construction (and haven't just been tasked to work on a half-done -- project.) if built:GetHealth() == 1 then @@ -4101,11 +4087,25 @@ Unit = ClassUnit(moho.unit_methods, IntelComponent, VeterancyComponent, DebugUni return false end, + --- Called by the engine on `FactoryBuild` and `MobileBuild` orders to determine if a unit is allowed to be built. ---@param self Unit ---@param target_bp UnitBlueprint ---@return boolean CheckBuildRestriction = function(self, target_bp) if self:CanBuild(target_bp.BlueprintId) then + + -- If desired, prevent engineer stations and factories from building their upgrades as a separate unit + -- We need a separate table for this just in case a unit is intended to be able to build its own upgrade as a separate unit too + -- Its type is `UnparsedCategory[]` to make it behave identically to `Blueprint.Economy.BuildableCategory` + local upgradeOnlyCategory = self.Blueprint.Economy.UpgradeOnlyCategory + if upgradeOnlyCategory then + for _, unparsedCat in upgradeOnlyCategory do + if EntityCategoryContains(ParseEntityCategory(unparsedCat), target_bp.BlueprintId) then + return false + end + end + end + return true else return false diff --git a/lua/sim/units/FactoryUnit.lua b/lua/sim/units/FactoryUnit.lua index 074c118afb0..1f73de61fe2 100644 --- a/lua/sim/units/FactoryUnit.lua +++ b/lua/sim/units/FactoryUnit.lua @@ -107,8 +107,9 @@ FactoryUnit = ClassUnit(StructureUnit) { ---@param self FactoryUnit ---@param unitBeingBuilt Unit ---@param order string + ---@return boolean OnStartBuild = function(self, unitBeingBuilt, order) - StructureUnitOnStartBuild(self, unitBeingBuilt, order) + if not StructureUnitOnStartBuild(self, unitBeingBuilt, order) then return false end self.FactoryBuildFailed = nil self.BuildingUnit = true @@ -120,6 +121,8 @@ FactoryUnit = ClassUnit(StructureUnit) { self:RemoveCommandCap('RULEUCC_Guard') self.DisabledAssist = true end + + return true end, --- Introduce a rolloff delay, where defined. @@ -288,20 +291,6 @@ FactoryUnit = ClassUnit(StructureUnit) { end end, - ---@param self FactoryUnit - ---@param target_bp any - ---@return boolean - CheckBuildRestriction = function(self, target_bp) - -- Check basic build restrictions first (Unit.CheckBuildRestriction but we only go up one inheritance level) - if not StructureUnitCheckBuildRestriction(self, target_bp) then - return false - end - -- Factories never build factories (this does not break Upgrades since CheckBuildRestriction is never called for Upgrades) - -- Note: We check for the primary category, since e.g. AircraftCarriers have the FACTORY category. - -- TODO: This is a hotfix for --1043, remove when engymod design is properly fixed - return target_bp.General.Category ~= 'Factory' - end, - ---@param self FactoryUnit CalculateRollOffPoint = function(self) local px, py, pz = self:GetPositionXYZ() diff --git a/lua/sim/units/StructureUnit.lua b/lua/sim/units/StructureUnit.lua index 974d7f88cb8..9fea001b70b 100644 --- a/lua/sim/units/StructureUnit.lua +++ b/lua/sim/units/StructureUnit.lua @@ -590,10 +590,11 @@ StructureUnit = ClassUnit(Unit, BlinkingLightsUnitComponent) { ---@param self StructureUnit ---@param unitBeingBuilt Unit ---@param order string + ---@return boolean OnStartBuild = function(self, unitBeingBuilt, order) -- Check for death loop if not UnitOnStartBuild(self, unitBeingBuilt, order) then - return + return false end self.UnitBeingBuilt = unitBeingBuilt @@ -635,6 +636,8 @@ StructureUnit = ClassUnit(Unit, BlinkingLightsUnitComponent) { end end end + + return true end, ---@param self StructureUnit diff --git a/units/UAB0101/UAB0101_unit.bp b/units/UAB0101/UAB0101_unit.bp index 91c4d7206be..6eb74ac519f 100644 --- a/units/UAB0101/UAB0101_unit.bp +++ b/units/UAB0101/UAB0101_unit.bp @@ -105,6 +105,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY AEON STRUCTURE LAND", "BUILTBYTIER1FACTORY AEON MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY AEON STRUCTURE LAND", + }, RebuildBonusIds = { "uab0101" }, StorageEnergy = 0, StorageMass = 80, diff --git a/units/UAB0102/UAB0102_unit.bp b/units/UAB0102/UAB0102_unit.bp index f85c775a9ff..8f60a70fd72 100644 --- a/units/UAB0102/UAB0102_unit.bp +++ b/units/UAB0102/UAB0102_unit.bp @@ -101,6 +101,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY AEON MOBILE AIR", "TRANSPORTBUILTBYTIER1FACTORY AEON MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY AEON STRUCTURE AIR", + }, RebuildBonusIds = { "uab0102" }, StorageEnergy = 0, StorageMass = 80, diff --git a/units/UAB0103/UAB0103_unit.bp b/units/UAB0103/UAB0103_unit.bp index 824c5dedf52..3aa47f1ff25 100644 --- a/units/UAB0103/UAB0103_unit.bp +++ b/units/UAB0103/UAB0103_unit.bp @@ -91,6 +91,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY AEON STRUCTURE NAVAL", "BUILTBYTIER1FACTORY AEON MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY AEON STRUCTURE NAVAL", + }, InitialRallyX = 0, InitialRallyZ = 10, RebuildBonusIds = { "uab0103" }, diff --git a/units/UAB0201/UAB0201_unit.bp b/units/UAB0201/UAB0201_unit.bp index 102af84cd46..81bc20b11d9 100644 --- a/units/UAB0201/UAB0201_unit.bp +++ b/units/UAB0201/UAB0201_unit.bp @@ -101,6 +101,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY AEON STRUCTURE LAND", "BUILTBYTIER2FACTORY AEON MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY AEON STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "uab0201" }, StorageEnergy = 0, diff --git a/units/UAB0202/UAB0202_unit.bp b/units/UAB0202/UAB0202_unit.bp index 98772685419..02b599791cb 100644 --- a/units/UAB0202/UAB0202_unit.bp +++ b/units/UAB0202/UAB0202_unit.bp @@ -94,6 +94,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY AEON MOBILE AIR", "TRANSPORTBUILTBYTIER2FACTORY AEON MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY AEON STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "uab0202" }, StorageEnergy = 0, diff --git a/units/UAB0203/UAB0203_unit.bp b/units/UAB0203/UAB0203_unit.bp index 0896e742af6..80d554ff965 100644 --- a/units/UAB0203/UAB0203_unit.bp +++ b/units/UAB0203/UAB0203_unit.bp @@ -91,6 +91,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY AEON STRUCTURE NAVAL", "BUILTBYTIER2FACTORY AEON MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY AEON STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/UAB0301/UAB0301_unit.bp b/units/UAB0301/UAB0301_unit.bp index c1d65f9a6e8..c5caf75ba41 100644 --- a/units/UAB0301/UAB0301_unit.bp +++ b/units/UAB0301/UAB0301_unit.bp @@ -100,6 +100,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY AEON STRUCTURE LAND", "BUILTBYTIER3FACTORY AEON MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY AEON STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "uab0301" }, StorageEnergy = 0, diff --git a/units/UAB0302/UAB0302_unit.bp b/units/UAB0302/UAB0302_unit.bp index a22221be05d..f8c3b81d8e9 100644 --- a/units/UAB0302/UAB0302_unit.bp +++ b/units/UAB0302/UAB0302_unit.bp @@ -93,6 +93,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY AEON MOBILE AIR", "TRANSPORTBUILTBYTIER3FACTORY AEON MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY AEON STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "uab0302" }, StorageEnergy = 0, diff --git a/units/UAB0303/UAB0303_unit.bp b/units/UAB0303/UAB0303_unit.bp index a73b9e236e7..62c1369576b 100644 --- a/units/UAB0303/UAB0303_unit.bp +++ b/units/UAB0303/UAB0303_unit.bp @@ -90,6 +90,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY AEON STRUCTURE NAVAL", "BUILTBYTIER3FACTORY AEON MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY AEON STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/UEB0101/UEB0101_unit.bp b/units/UEB0101/UEB0101_unit.bp index bc68ad4d74c..9a03f45c2d8 100644 --- a/units/UEB0101/UEB0101_unit.bp +++ b/units/UEB0101/UEB0101_unit.bp @@ -96,6 +96,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY UEF STRUCTURE LAND", "BUILTBYTIER1FACTORY UEF MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY UEF STRUCTURE LAND", + }, RebuildBonusIds = { "ueb0101" }, StorageEnergy = 0, StorageMass = 80, diff --git a/units/UEB0102/UEB0102_unit.bp b/units/UEB0102/UEB0102_unit.bp index eac549525da..ec58620506f 100644 --- a/units/UEB0102/UEB0102_unit.bp +++ b/units/UEB0102/UEB0102_unit.bp @@ -97,6 +97,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY UEF MOBILE AIR", "TRANSPORTBUILTBYTIER1FACTORY UEF MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY UEF STRUCTURE AIR", + }, RebuildBonusIds = { "ueb0102" }, StorageEnergy = 0, StorageMass = 80, diff --git a/units/UEB0103/UEB0103_unit.bp b/units/UEB0103/UEB0103_unit.bp index 27586c4ab22..fb6c5141cdb 100644 --- a/units/UEB0103/UEB0103_unit.bp +++ b/units/UEB0103/UEB0103_unit.bp @@ -96,6 +96,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY UEF STRUCTURE NAVAL", "BUILTBYTIER1FACTORY UEF MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY UEF STRUCTURE NAVAL", + }, InitialRallyX = 0, InitialRallyZ = 10, RebuildBonusIds = { "ueb0103" }, diff --git a/units/UEB0201/UEB0201_unit.bp b/units/UEB0201/UEB0201_unit.bp index 653dc79b80c..e9b6ed63446 100644 --- a/units/UEB0201/UEB0201_unit.bp +++ b/units/UEB0201/UEB0201_unit.bp @@ -97,6 +97,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY UEF MOBILE LAND", "BUILTBYLANDTIER2FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY UEF STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "ueb0201" }, StorageEnergy = 0, diff --git a/units/UEB0202/UEB0202_unit.bp b/units/UEB0202/UEB0202_unit.bp index 02a7570fbb9..d7b67241047 100644 --- a/units/UEB0202/UEB0202_unit.bp +++ b/units/UEB0202/UEB0202_unit.bp @@ -97,6 +97,9 @@ UnitBlueprint{ "TRANSPORTBUILTBYTIER2FACTORY UEF MOBILE AIR", "BUILTBYAIRTIER2FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY UEF STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "ueb0202" }, StorageEnergy = 0, diff --git a/units/UEB0203/UEB0203_unit.bp b/units/UEB0203/UEB0203_unit.bp index 381d89a4f32..914e03fee9b 100644 --- a/units/UEB0203/UEB0203_unit.bp +++ b/units/UEB0203/UEB0203_unit.bp @@ -96,6 +96,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY UEF MOBILE NAVAL", "BUILTBYNAVALTIER2FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY UEF STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/UEB0301/UEB0301_unit.bp b/units/UEB0301/UEB0301_unit.bp index b92b52517a7..1e62f59c72b 100644 --- a/units/UEB0301/UEB0301_unit.bp +++ b/units/UEB0301/UEB0301_unit.bp @@ -95,6 +95,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY UEF MOBILE LAND", "BUILTBYLANDTIER3FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY UEF STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "ueb0301" }, StorageEnergy = 0, diff --git a/units/UEB0302/UEB0302_unit.bp b/units/UEB0302/UEB0302_unit.bp index 7b207fa2d51..f04b62e44c1 100644 --- a/units/UEB0302/UEB0302_unit.bp +++ b/units/UEB0302/UEB0302_unit.bp @@ -95,6 +95,9 @@ UnitBlueprint{ "TRANSPORTBUILTBYTIER3FACTORY UEF MOBILE AIR", "BUILTBYAIRTIER3FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY UEF STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "ueb0302" }, StorageEnergy = 0, diff --git a/units/UEB0303/UEB0303_unit.bp b/units/UEB0303/UEB0303_unit.bp index d795c62074b..1bc60c1e4cf 100644 --- a/units/UEB0303/UEB0303_unit.bp +++ b/units/UEB0303/UEB0303_unit.bp @@ -96,6 +96,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY UEF MOBILE NAVAL", "BUILTBYNAVALTIER3FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY UEF STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/URB0101/URB0101_unit.bp b/units/URB0101/URB0101_unit.bp index 137d5f12a14..b07ff264e2e 100644 --- a/units/URB0101/URB0101_unit.bp +++ b/units/URB0101/URB0101_unit.bp @@ -96,6 +96,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY CYBRAN STRUCTURE LAND", "BUILTBYTIER1FACTORY CYBRAN MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY CYBRAN STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "urb0101" }, StorageEnergy = 0, diff --git a/units/URB0102/URB0102_unit.bp b/units/URB0102/URB0102_unit.bp index 7aa6d4960db..2faffe145a5 100644 --- a/units/URB0102/URB0102_unit.bp +++ b/units/URB0102/URB0102_unit.bp @@ -103,6 +103,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY CYBRAN MOBILE AIR", "TRANSPORTBUILTBYTIER1FACTORY CYBRAN MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY CYBRAN STRUCTURE AIR", + }, RebuildBonusIds = { "urb0102" }, StorageEnergy = 0, StorageMass = 80, diff --git a/units/URB0103/URB0103_unit.bp b/units/URB0103/URB0103_unit.bp index 7966db7209f..a1bf2bd8403 100644 --- a/units/URB0103/URB0103_unit.bp +++ b/units/URB0103/URB0103_unit.bp @@ -101,6 +101,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY CYBRAN STRUCTURE NAVAL", "BUILTBYTIER1FACTORY CYBRAN MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY CYBRAN STRUCTURE NAVAL", + }, InitialRallyX = 0, InitialRallyZ = 10, RebuildBonusIds = { "urb0103" }, diff --git a/units/URB0201/URB0201_unit.bp b/units/URB0201/URB0201_unit.bp index 3a2be9900c3..64df0ee7a4a 100644 --- a/units/URB0201/URB0201_unit.bp +++ b/units/URB0201/URB0201_unit.bp @@ -95,6 +95,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY CYBRAN STRUCTURE LAND", "BUILTBYTIER2FACTORY CYBRAN MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY CYBRAN STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "urb0201" }, StorageEnergy = 0, diff --git a/units/URB0202/URB0202_unit.bp b/units/URB0202/URB0202_unit.bp index ac6067306bf..221fca45682 100644 --- a/units/URB0202/URB0202_unit.bp +++ b/units/URB0202/URB0202_unit.bp @@ -104,6 +104,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY CYBRAN MOBILE AIR", "TRANSPORTBUILTBYTIER2FACTORY CYBRAN MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY CYBRAN STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "urb0202" }, StorageEnergy = 0, diff --git a/units/URB0203/URB0203_unit.bp b/units/URB0203/URB0203_unit.bp index cb2d6fc4030..b33c1cb904f 100644 --- a/units/URB0203/URB0203_unit.bp +++ b/units/URB0203/URB0203_unit.bp @@ -101,6 +101,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY CYBRAN STRUCTURE NAVAL", "BUILTBYTIER2FACTORY CYBRAN MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY CYBRAN STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/URB0301/URB0301_unit.bp b/units/URB0301/URB0301_unit.bp index 65c837ee73a..164ae3b81a8 100644 --- a/units/URB0301/URB0301_unit.bp +++ b/units/URB0301/URB0301_unit.bp @@ -93,6 +93,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY CYBRAN STRUCTURE LAND", "BUILTBYTIER3FACTORY CYBRAN MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY CYBRAN STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "urb0301" }, StorageEnergy = 0, diff --git a/units/URB0302/URB0302_unit.bp b/units/URB0302/URB0302_unit.bp index 1a582d7db39..ea833a80a5e 100644 --- a/units/URB0302/URB0302_unit.bp +++ b/units/URB0302/URB0302_unit.bp @@ -103,6 +103,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY CYBRAN MOBILE AIR", "TRANSPORTBUILTBYTIER3FACTORY CYBRAN MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY CYBRAN STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "urb0302" }, StorageEnergy = 0, diff --git a/units/URB0303/URB0303_unit.bp b/units/URB0303/URB0303_unit.bp index 840ef5d42f0..902bdd237af 100644 --- a/units/URB0303/URB0303_unit.bp +++ b/units/URB0303/URB0303_unit.bp @@ -100,6 +100,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY CYBRAN STRUCTURE NAVAL", "BUILTBYTIER3FACTORY CYBRAN MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY CYBRAN STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/XSB0101/XSB0101_unit.bp b/units/XSB0101/XSB0101_unit.bp index 56f3b23a1b0..3d302af762f 100644 --- a/units/XSB0101/XSB0101_unit.bp +++ b/units/XSB0101/XSB0101_unit.bp @@ -112,6 +112,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY SERAPHIM STRUCTURE LAND", "BUILTBYTIER1FACTORY SERAPHIM MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY SERAPHIM STRUCTURE LAND", + }, RebuildBonusIds = { "xsb0101" }, StorageEnergy = 0, StorageMass = 80, diff --git a/units/XSB0102/XSB0102_unit.bp b/units/XSB0102/XSB0102_unit.bp index c5fc9b07330..d833d1c7d65 100644 --- a/units/XSB0102/XSB0102_unit.bp +++ b/units/XSB0102/XSB0102_unit.bp @@ -112,6 +112,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY SERAPHIM MOBILE AIR", "TRANSPORTBUILTBYTIER1FACTORY SERAPHIM MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY SERAPHIM STRUCTURE AIR", + }, RebuildBonusIds = { "xsb0102" }, StorageEnergy = 0, StorageMass = 80, diff --git a/units/XSB0103/XSB0103_unit.bp b/units/XSB0103/XSB0103_unit.bp index 4ef9999eab0..b79a66d241f 100644 --- a/units/XSB0103/XSB0103_unit.bp +++ b/units/XSB0103/XSB0103_unit.bp @@ -103,6 +103,9 @@ UnitBlueprint{ "BUILTBYTIER1FACTORY SERAPHIM STRUCTURE NAVAL", "BUILTBYTIER1FACTORY SERAPHIM MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER1FACTORY SERAPHIM STRUCTURE NAVAL", + }, InitialRallyX = 0, InitialRallyZ = 10, RebuildBonusIds = { "xsb0103" }, diff --git a/units/XSB0201/XSB0201_unit.bp b/units/XSB0201/XSB0201_unit.bp index f6762893db9..1f33dc629fb 100644 --- a/units/XSB0201/XSB0201_unit.bp +++ b/units/XSB0201/XSB0201_unit.bp @@ -101,6 +101,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY SERAPHIM STRUCTURE LAND", "BUILTBYTIER2FACTORY SERAPHIM MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY SERAPHIM STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "xsb0201" }, StorageEnergy = 0, diff --git a/units/XSB0202/XSB0202_unit.bp b/units/XSB0202/XSB0202_unit.bp index a0e36fe6746..9433e95c33d 100644 --- a/units/XSB0202/XSB0202_unit.bp +++ b/units/XSB0202/XSB0202_unit.bp @@ -105,6 +105,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY SERAPHIM MOBILE AIR", "TRANSPORTBUILTBYTIER2FACTORY SERAPHIM MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY SERAPHIM STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "xsb0202" }, StorageEnergy = 0, diff --git a/units/XSB0203/XSB0203_unit.bp b/units/XSB0203/XSB0203_unit.bp index 3658b20a902..2f3f9d8c9d1 100644 --- a/units/XSB0203/XSB0203_unit.bp +++ b/units/XSB0203/XSB0203_unit.bp @@ -105,6 +105,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY SERAPHIM STRUCTURE NAVAL", "BUILTBYTIER2FACTORY SERAPHIM MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2FACTORY SERAPHIM STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/XSB0301/XSB0301_unit.bp b/units/XSB0301/XSB0301_unit.bp index 69573152a79..84a6e907ee0 100644 --- a/units/XSB0301/XSB0301_unit.bp +++ b/units/XSB0301/XSB0301_unit.bp @@ -99,6 +99,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE LAND", "BUILTBYTIER3FACTORY SERAPHIM MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "xsb0301" }, StorageEnergy = 0, diff --git a/units/XSB0302/XSB0302_unit.bp b/units/XSB0302/XSB0302_unit.bp index cc79daf4aa0..c625170e922 100644 --- a/units/XSB0302/XSB0302_unit.bp +++ b/units/XSB0302/XSB0302_unit.bp @@ -110,6 +110,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY SERAPHIM MOBILE AIR", "TRANSPORTBUILTBYTIER3FACTORY SERAPHIM MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "xsb0302" }, StorageEnergy = 0, diff --git a/units/XSB0303/XSB0303_unit.bp b/units/XSB0303/XSB0303_unit.bp index 264d773b75a..4e6cb5458b1 100644 --- a/units/XSB0303/XSB0303_unit.bp +++ b/units/XSB0303/XSB0303_unit.bp @@ -104,6 +104,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE NAVAL", "BUILTBYTIER3FACTORY SERAPHIM MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/ZAB9501/ZAB9501_unit.bp b/units/ZAB9501/ZAB9501_unit.bp index c7d5dbc8d8f..4cb78060f81 100644 --- a/units/ZAB9501/ZAB9501_unit.bp +++ b/units/ZAB9501/ZAB9501_unit.bp @@ -103,6 +103,9 @@ UnitBlueprint{ "BUILTBYTIER2SUPPORTFACTORY AEON STRUCTURE LAND", "BUILTBYTIER2FACTORY AEON MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY AEON STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zab9501" }, StorageEnergy = 0, diff --git a/units/ZAB9502/ZAB9502_unit.bp b/units/ZAB9502/ZAB9502_unit.bp index 06a05708e52..20918a1f362 100644 --- a/units/ZAB9502/ZAB9502_unit.bp +++ b/units/ZAB9502/ZAB9502_unit.bp @@ -97,6 +97,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY AEON MOBILE AIR", "TRANSPORTBUILTBYTIER2FACTORY AEON MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY AEON STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zab9502" }, StorageEnergy = 0, diff --git a/units/ZAB9503/ZAB9503_unit.bp b/units/ZAB9503/ZAB9503_unit.bp index a4990e5ec64..462d8c71ff8 100644 --- a/units/ZAB9503/ZAB9503_unit.bp +++ b/units/ZAB9503/ZAB9503_unit.bp @@ -94,6 +94,9 @@ UnitBlueprint{ "BUILTBYTIER2SUPPORTFACTORY AEON STRUCTURE NAVAL", "BUILTBYTIER2FACTORY AEON MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY AEON STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/ZAB9601/ZAB9601_unit.bp b/units/ZAB9601/ZAB9601_unit.bp index b23ab76838f..1da8053306c 100644 --- a/units/ZAB9601/ZAB9601_unit.bp +++ b/units/ZAB9601/ZAB9601_unit.bp @@ -99,6 +99,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY AEON STRUCTURE LAND", "BUILTBYTIER3FACTORY AEON MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY AEON STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zab9601" }, StorageEnergy = 0, diff --git a/units/ZAB9602/ZAB9602_unit.bp b/units/ZAB9602/ZAB9602_unit.bp index 3cf0e0499b3..d8206701fdd 100644 --- a/units/ZAB9602/ZAB9602_unit.bp +++ b/units/ZAB9602/ZAB9602_unit.bp @@ -94,6 +94,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY AEON MOBILE AIR", "TRANSPORTBUILTBYTIER3FACTORY AEON MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY AEON STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zab9602" }, StorageEnergy = 0, diff --git a/units/ZAB9603/ZAB9603_unit.bp b/units/ZAB9603/ZAB9603_unit.bp index 0f87da49567..1c37d71edca 100644 --- a/units/ZAB9603/ZAB9603_unit.bp +++ b/units/ZAB9603/ZAB9603_unit.bp @@ -91,6 +91,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY AEON STRUCTURE NAVAL", "BUILTBYTIER3FACTORY AEON MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY AEON STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/ZEB9501/ZEB9501_unit.bp b/units/ZEB9501/ZEB9501_unit.bp index 30bfb0ac668..3f11eef0191 100644 --- a/units/ZEB9501/ZEB9501_unit.bp +++ b/units/ZEB9501/ZEB9501_unit.bp @@ -100,6 +100,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY UEF MOBILE LAND", "BUILTBYLANDTIER2FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY UEF STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zeb9501" }, StorageEnergy = 0, diff --git a/units/ZEB9502/ZEB9502_unit.bp b/units/ZEB9502/ZEB9502_unit.bp index f6d38fcae68..686d7115eba 100644 --- a/units/ZEB9502/ZEB9502_unit.bp +++ b/units/ZEB9502/ZEB9502_unit.bp @@ -101,6 +101,9 @@ UnitBlueprint{ "TRANSPORTBUILTBYTIER2FACTORY UEF MOBILE AIR", "BUILTBYAIRTIER2FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY UEF STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zeb9502" }, StorageEnergy = 0, diff --git a/units/ZEB9503/ZEB9503_unit.bp b/units/ZEB9503/ZEB9503_unit.bp index b198fc3421c..10d960b0f3b 100644 --- a/units/ZEB9503/ZEB9503_unit.bp +++ b/units/ZEB9503/ZEB9503_unit.bp @@ -99,6 +99,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY UEF MOBILE NAVAL", "BUILTBYNAVALTIER2FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY UEF STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/ZEB9601/ZEB9601_unit.bp b/units/ZEB9601/ZEB9601_unit.bp index 21a8cb57150..81c54706352 100644 --- a/units/ZEB9601/ZEB9601_unit.bp +++ b/units/ZEB9601/ZEB9601_unit.bp @@ -97,6 +97,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY UEF MOBILE LAND", "BUILTBYLANDTIER3FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY UEF STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zeb9601" }, StorageEnergy = 0, diff --git a/units/ZEB9602/ZEB9602_unit.bp b/units/ZEB9602/ZEB9602_unit.bp index 4b06e91f809..c1fa7d2a867 100644 --- a/units/ZEB9602/ZEB9602_unit.bp +++ b/units/ZEB9602/ZEB9602_unit.bp @@ -97,6 +97,9 @@ UnitBlueprint{ "TRANSPORTBUILTBYTIER3FACTORY UEF MOBILE AIR", "BUILTBYAIRTIER3FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY UEF STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zeb9602" }, StorageEnergy = 0, diff --git a/units/ZEB9603/ZEB9603_unit.bp b/units/ZEB9603/ZEB9603_unit.bp index 6d853ed7c84..d8c0def6f4b 100644 --- a/units/ZEB9603/ZEB9603_unit.bp +++ b/units/ZEB9603/ZEB9603_unit.bp @@ -97,6 +97,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY UEF MOBILE NAVAL", "BUILTBYNAVALTIER3FACTORY UEF MOBILE CONSTRUCTION", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY UEF STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/ZRB9501/ZRB9501_unit.bp b/units/ZRB9501/ZRB9501_unit.bp index f3c91120ac1..db98cad2fbc 100644 --- a/units/ZRB9501/ZRB9501_unit.bp +++ b/units/ZRB9501/ZRB9501_unit.bp @@ -98,6 +98,9 @@ UnitBlueprint{ "BUILTBYTIER2SUPPORTFACTORY CYBRAN STRUCTURE LAND", "BUILTBYTIER2FACTORY CYBRAN MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY CYBRAN STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zrb9501" }, StorageEnergy = 0, diff --git a/units/ZRB9502/ZRB9502_unit.bp b/units/ZRB9502/ZRB9502_unit.bp index 34ca4dc41da..fe68f9e1418 100644 --- a/units/ZRB9502/ZRB9502_unit.bp +++ b/units/ZRB9502/ZRB9502_unit.bp @@ -105,6 +105,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY CYBRAN MOBILE AIR", "TRANSPORTBUILTBYTIER2FACTORY CYBRAN MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY CYBRAN STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zrb9502" }, StorageEnergy = 0, diff --git a/units/ZRB9503/ZRB9503_unit.bp b/units/ZRB9503/ZRB9503_unit.bp index 40fdd89e381..7053434099d 100644 --- a/units/ZRB9503/ZRB9503_unit.bp +++ b/units/ZRB9503/ZRB9503_unit.bp @@ -104,6 +104,9 @@ UnitBlueprint{ "BUILTBYTIER2SUPPORTFACTORY CYBRAN STRUCTURE NAVAL", "BUILTBYTIER2FACTORY CYBRAN MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY CYBRAN STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/ZRB9601/ZRB9601_unit.bp b/units/ZRB9601/ZRB9601_unit.bp index 88094369d4b..f7adf4ff684 100644 --- a/units/ZRB9601/ZRB9601_unit.bp +++ b/units/ZRB9601/ZRB9601_unit.bp @@ -94,6 +94,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY CYBRAN STRUCTURE LAND", "BUILTBYTIER3FACTORY CYBRAN MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY CYBRAN STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zrb9601" }, StorageEnergy = 0, diff --git a/units/ZRB9602/ZRB9602_unit.bp b/units/ZRB9602/ZRB9602_unit.bp index 62acbaaf1f6..5a8609b53c7 100644 --- a/units/ZRB9602/ZRB9602_unit.bp +++ b/units/ZRB9602/ZRB9602_unit.bp @@ -101,6 +101,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY CYBRAN MOBILE AIR", "TRANSPORTBUILTBYTIER3FACTORY CYBRAN MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY CYBRAN STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zrb9602" }, StorageEnergy = 0, diff --git a/units/ZRB9603/ZRB9603_unit.bp b/units/ZRB9603/ZRB9603_unit.bp index f28182210d7..581fe569c40 100644 --- a/units/ZRB9603/ZRB9603_unit.bp +++ b/units/ZRB9603/ZRB9603_unit.bp @@ -101,6 +101,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY CYBRAN STRUCTURE NAVAL", "BUILTBYTIER3FACTORY CYBRAN MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY CYBRAN STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/ZSB9501/ZSB9501_unit.bp b/units/ZSB9501/ZSB9501_unit.bp index 4a86d027344..765a5688dc3 100644 --- a/units/ZSB9501/ZSB9501_unit.bp +++ b/units/ZSB9501/ZSB9501_unit.bp @@ -111,6 +111,9 @@ UnitBlueprint{ "BUILTBYTIER2SUPPORTFACTORY SERAPHIM STRUCTURE LAND", "BUILTBYTIER2FACTORY SERAPHIM MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY SERAPHIM STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zsb9501" }, StorageEnergy = 0, diff --git a/units/ZSB9502/ZSB9502_unit.bp b/units/ZSB9502/ZSB9502_unit.bp index 4495efdb2e4..1f2c0510fe3 100644 --- a/units/ZSB9502/ZSB9502_unit.bp +++ b/units/ZSB9502/ZSB9502_unit.bp @@ -108,6 +108,9 @@ UnitBlueprint{ "BUILTBYTIER2FACTORY SERAPHIM MOBILE AIR", "TRANSPORTBUILTBYTIER2FACTORY SERAPHIM MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY SERAPHIM STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zsb9502" }, StorageEnergy = 0, diff --git a/units/ZSB9503/ZSB9503_unit.bp b/units/ZSB9503/ZSB9503_unit.bp index 843fd66a36d..6d01934d874 100644 --- a/units/ZSB9503/ZSB9503_unit.bp +++ b/units/ZSB9503/ZSB9503_unit.bp @@ -108,6 +108,9 @@ UnitBlueprint{ "BUILTBYTIER2SUPPORTFACTORY SERAPHIM STRUCTURE NAVAL", "BUILTBYTIER2FACTORY SERAPHIM MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER2SUPPORTFACTORY SERAPHIM STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10, diff --git a/units/ZSB9601/ZSB9601_unit.bp b/units/ZSB9601/ZSB9601_unit.bp index 22c7d396972..e6b064cdd7f 100644 --- a/units/ZSB9601/ZSB9601_unit.bp +++ b/units/ZSB9601/ZSB9601_unit.bp @@ -107,6 +107,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE LAND", "BUILTBYTIER3FACTORY SERAPHIM MOBILE LAND", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE LAND", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zsb9601" }, StorageEnergy = 0, diff --git a/units/ZSB9602/ZSB9602_unit.bp b/units/ZSB9602/ZSB9602_unit.bp index 437bc28bf3b..66e2ef7eaeb 100644 --- a/units/ZSB9602/ZSB9602_unit.bp +++ b/units/ZSB9602/ZSB9602_unit.bp @@ -105,6 +105,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY SERAPHIM MOBILE AIR", "TRANSPORTBUILTBYTIER3FACTORY SERAPHIM MOBILE AIR", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE AIR", + }, DifferentialUpgradeCostCalculation = true, RebuildBonusIds = { "zsb9602" }, StorageEnergy = 0, diff --git a/units/ZSB9603/ZSB9603_unit.bp b/units/ZSB9603/ZSB9603_unit.bp index f6967d4d661..28dc03f502f 100644 --- a/units/ZSB9603/ZSB9603_unit.bp +++ b/units/ZSB9603/ZSB9603_unit.bp @@ -105,6 +105,9 @@ UnitBlueprint{ "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE NAVAL", "BUILTBYTIER3FACTORY SERAPHIM MOBILE NAVAL", }, + UpgradeOnlyCategory = { + "BUILTBYTIER3FACTORY SERAPHIM STRUCTURE NAVAL", + }, DifferentialUpgradeCostCalculation = true, InitialRallyX = 0, InitialRallyZ = 10,