diff --git a/changelog/snippets/balance.6535.md b/changelog/snippets/balance.6535.md new file mode 100644 index 0000000000..e0f312f816 --- /dev/null +++ b/changelog/snippets/balance.6535.md @@ -0,0 +1,14 @@ +- (#6535) Improve the maneuverability and reliability of Strategic Bombers to promote proactive use of them and as a competing option to T3 gunships + - Maneuverability: + - Increase turn speed: 0.8 -> 1.5 + This lets it effectively micro against flak damage, and leaves less time/opportunities for ASF/SAMs to deal damage. + - Increase Lift Factor: 7 -> 17 + This improves the speed of the bomber lifting off, complementing the new turn speed. + - Reliability: + - Bomb drop threshold: 3.5 -> 10 + This greatly improves the ability of the bomber to fire on uneven terrain or during turns, where it may get a less than ideal path. It is necessary because every bomb of a strategic bomber matters, and it can be devastating if one of them doesn't fire because the engine decided the small drop zone was unfortunately in the wrong place. A similar massive increase for the threshold was done for the Ahwassa (4 -> 20) (#2465)[https://github.com/FAForever/fa/pull/2465]. + - Smaller loops on auto attack to maximize DPS: + This only increases DPS when bombing a single target with multiple passes, so I wouldn't put it exactly under the HP/DPS buff restriction. Previously bombs would drop only every ~13 seconds, and with the turn speed and breakoff distance reduction they drop every ~8 seconds. + It can also be argued that this is just simplifying the micro of multiple bombers when you want to maximize DPS. There will of course still be micro against AA or to have good bombing paths that make use of the reload, both of which are far more engaging than figuring out when to turn multiple bombers just to bomb a single target on reload with multiple passes. + - `BreakOffDistance`: 60 -> 40 + - `RandomBreakOffDistanceMult`: 1.5 -> 1 diff --git a/engine/Core/Blueprints/UnitBlueprint.lua b/engine/Core/Blueprints/UnitBlueprint.lua index 8a60a413ca..82557b2c0c 100644 --- a/engine/Core/Blueprints/UnitBlueprint.lua +++ b/engine/Core/Blueprints/UnitBlueprint.lua @@ -147,13 +147,13 @@ --- unit should unpack before firing weapon --- Engine sets tracking radius to 1x, calls OnLostTarget when given a move order, and OnGotTarget only when not moving ---@field NeedUnpack boolean ---- this muliplier is applied when a staging platform is refueling an air unit +--- this muliplier is applied to an air unit's refuel rate when the staging platform is refueling it ---@field RefuelingMultiplier number ---- shis amount of repair per second offered to refueling air units +--- this amount of repair per **second** is offered to refueling air units ---@field RefuelingRepairAmount number ---- this amount of energy per second is required to repair the air unit +--- this amount of energy per **tick** is required to repair the air unit ---@field RepairConsumeEnergy? number ---- this amount of mass per second is required to repair the air unit +--- this amount of mass per **tick** is required to repair the air unit ---@field RepairConsumeMass? number --- if the assist range for the unit is shown if it's selected ---@field ShowAssistRangeOnSelect? boolean @@ -170,8 +170,6 @@ ---@field BankFactor? number --- true if aircraft banks forward/back as well as sideways ---@field BankForward? boolean ---- distance from the target unit will start firing bombs ----@field BombDropThreshold? number --- distance to break off before turning around for another attack run ---@field BreakOffDistance? number --- if the air unit's new target is close-by, it will break off first to increase @@ -229,14 +227,16 @@ ---@field MinAirspeed? number --- time to predict ahead for moving targets ---@field PredictAheadForBombDrop? number ---- random multiplier applied to break off distance for winged aircrafts +--- random multiplier applied to break off distance for winged aircrafts. Defaults to 1.5 ---@field RandomBreakOffDistanceMult? number ---- random max time to switch combat state in seconds for winged aircrafts +--- random max time to switch combat state in seconds for winged aircrafts. Defaults to 6 ---@field RandomMaxChangeCombatStateTime? number ---- random min time to switch combat state in seconds for winged aircrafts +--- random min time to switch combat state in seconds for winged aircrafts. Defaults to 3 ---@field RandomMinChangeCombatStateTime? number --- distance from target at which to start turning to align with it ---@field StartTurnDistance number +--- Length of time in seconds allowed for sustained turn before we re-try a different approach. Defaults to 10 +---@field SustainedTurnThreshold number --- additional turning multiplier ability during a tight turn maneuver ---@field TightTurnMultiplier? number --- how heigh the transport will stay when picking up and dropping off units @@ -1099,9 +1099,9 @@ --- if true, terrain under building's skirt will be flattened ---@field FlattenSkirt boolean ---@field Footprint FootprintBlueprint ---- unit fuels up at this rate per second +--- unit fuels up at this rate per second. Required for air staging to undock automatically. ---@field FuelRechargeRate number ---- unit has fuel for this number of seconds +--- unit has fuel for this number of seconds. Required for air staging to undock automatically. ---@field FuelUseTime number --- How much the collision model is offset from the ground. Used to make aircraft land properly. ---@field GroundCollisionOffset? number @@ -1212,7 +1212,7 @@ ---@field ClassGenericUpTo? integer --- how many external docking slots available for air staging platforms ---@field DockingSlots? number ---- repairs units attached to me at this % of max health per second +--- Doesn't seem to work. "repairs units attached to me at this % of max health per second" ---@field RepairRate number --- Maximum number of large units this transport can carry. If larger than the number of large slots --- calculated from the number hooks, that smaller number is used instead. diff --git a/engine/Sim/Unit.lua b/engine/Sim/Unit.lua index ea46780f7e..074bfe4b73 100644 --- a/engine/Sim/Unit.lua +++ b/engine/Sim/Unit.lua @@ -297,6 +297,7 @@ end function Unit:GetUnitId() end +--- Returns unit velocity in ogrids/tick ---@return number x ---@return number y ---@return number z diff --git a/units/UAA0304/UAA0304_unit.bp b/units/UAA0304/UAA0304_unit.bp index 0d2bf05d1e..ea1bbe323a 100644 --- a/units/UAA0304/UAA0304_unit.bp +++ b/units/UAA0304/UAA0304_unit.bp @@ -3,13 +3,14 @@ UnitBlueprint{ AI = { GuardReturnRadius = 125 }, Air = { AutoLandTime = 1, - BankFactor = 2.5, + BankFactor = 3, BankForward = false, - BreakOffDistance = 60, + BreakOffDistance = 40, BreakOffIfNearNewTarget = true, BreakOffTrigger = 30, + RandomBreakOffDistanceMult = 1, CanFly = true, - CombatTurnSpeed = 0.8, + CombatTurnSpeed = 1.5, EngageDistance = 50, KLift = 3, KLiftDamping = 2.5, @@ -19,13 +20,13 @@ UnitBlueprint{ KRollDamping = 2, KTurn = 0.8, KTurnDamping = 1, - LiftFactor = 7, + LiftFactor = 17, MaxAirspeed = 17, MinAirspeed = 15, PredictAheadForBombDrop = 3, StartTurnDistance = 5, TightTurnMultiplier = 0, - TurnSpeed = 0.8, + TurnSpeed = 1.5, Winged = true, }, Audio = { @@ -192,7 +193,7 @@ UnitBlueprint{ }, AutoInitiateAttackCommand = true, BallisticArc = "RULEUBA_None", - BombDropThreshold = 3.5, + BombDropThreshold = 10, Buffs = { { Add = { OnImpact = true }, diff --git a/units/UEA0304/UEA0304_unit.bp b/units/UEA0304/UEA0304_unit.bp index 6b14344d8a..edda7d38d4 100644 --- a/units/UEA0304/UEA0304_unit.bp +++ b/units/UEA0304/UEA0304_unit.bp @@ -3,13 +3,14 @@ UnitBlueprint{ AI = { GuardReturnRadius = 125 }, Air = { AutoLandTime = 1, - BankFactor = 2.5, + BankFactor = 3, BankForward = false, - BreakOffDistance = 60, + BreakOffDistance = 40, BreakOffIfNearNewTarget = true, BreakOffTrigger = 30, + RandomBreakOffDistanceMult = 1, CanFly = true, - CombatTurnSpeed = 0.8, + CombatTurnSpeed = 1.5, EngageDistance = 50, KLift = 3, KLiftDamping = 2.5, @@ -19,13 +20,13 @@ UnitBlueprint{ KRollDamping = 2, KTurn = 0.8, KTurnDamping = 1, - LiftFactor = 7, + LiftFactor = 17, MaxAirspeed = 17, MinAirspeed = 15, PredictAheadForBombDrop = 3, StartTurnDistance = 5, TightTurnMultiplier = 0, - TurnSpeed = 0.8, + TurnSpeed = 1.5, Winged = true, }, Audio = { @@ -230,7 +231,7 @@ UnitBlueprint{ }, AutoInitiateAttackCommand = true, BallisticArc = "RULEUBA_None", - BombDropThreshold = 3.5, + BombDropThreshold = 10, CollideFriendly = false, Damage = 3100, DamageFriendly = true, diff --git a/units/URA0304/URA0304_unit.bp b/units/URA0304/URA0304_unit.bp index 8b9f14e8c3..579f44ca0b 100644 --- a/units/URA0304/URA0304_unit.bp +++ b/units/URA0304/URA0304_unit.bp @@ -3,13 +3,14 @@ UnitBlueprint{ AI = { GuardReturnRadius = 125 }, Air = { AutoLandTime = 1, - BankFactor = 2.5, + BankFactor = 3, BankForward = false, - BreakOffDistance = 60, + BreakOffDistance = 40, BreakOffIfNearNewTarget = true, BreakOffTrigger = 30, + RandomBreakOffDistanceMult = 1, CanFly = true, - CombatTurnSpeed = 0.8, + CombatTurnSpeed = 1.5, EngageDistance = 50, KLift = 3, KLiftDamping = 2.5, @@ -19,13 +20,13 @@ UnitBlueprint{ KRollDamping = 2, KTurn = 0.8, KTurnDamping = 1, - LiftFactor = 7, + LiftFactor = 17, MaxAirspeed = 17, MinAirspeed = 15, PredictAheadForBombDrop = 3, StartTurnDistance = 5, TightTurnMultiplier = 0, - TurnSpeed = 0.8, + TurnSpeed = 1.5, Winged = true, }, Audio = { @@ -222,7 +223,7 @@ UnitBlueprint{ }, AutoInitiateAttackCommand = true, BallisticArc = "RULEUBA_None", - BombDropThreshold = 3.5, + BombDropThreshold = 10, CollideFriendly = false, Damage = 2750, DamageFriendly = true, diff --git a/units/XSA0304/XSA0304_unit.bp b/units/XSA0304/XSA0304_unit.bp index f01db67978..513697fb34 100644 --- a/units/XSA0304/XSA0304_unit.bp +++ b/units/XSA0304/XSA0304_unit.bp @@ -3,13 +3,14 @@ UnitBlueprint{ AI = { GuardReturnRadius = 125 }, Air = { AutoLandTime = 1, - BankFactor = 2.5, + BankFactor = 3, BankForward = false, - BreakOffDistance = 60, + BreakOffDistance = 40, BreakOffIfNearNewTarget = true, BreakOffTrigger = 30, + RandomBreakOffDistanceMult = 1, CanFly = true, - CombatTurnSpeed = 0.8, + CombatTurnSpeed = 1.5, EngageDistance = 50, KLift = 3, KLiftDamping = 2.5, @@ -19,13 +20,13 @@ UnitBlueprint{ KRollDamping = 2, KTurn = 0.8, KTurnDamping = 1, - LiftFactor = 7, + LiftFactor = 17, MaxAirspeed = 17, MinAirspeed = 15, PredictAheadForBombDrop = 3, StartTurnDistance = 5, TightTurnMultiplier = 0, - TurnSpeed = 0.8, + TurnSpeed = 1.5, Winged = true, }, Audio = { @@ -212,7 +213,7 @@ UnitBlueprint{ }, AutoInitiateAttackCommand = true, BallisticArc = "RULEUBA_None", - BombDropThreshold = 3.5, + BombDropThreshold = 10, CollideFriendly = false, Damage = 3000, DamageFriendly = true,