diff --git a/changelog/snippets/balance.6356.md b/changelog/snippets/balance.6356.md deleted file mode 100644 index ba52975c42..0000000000 --- a/changelog/snippets/balance.6356.md +++ /dev/null @@ -1,3 +0,0 @@ -- (#6356) Reduce the speed of hover flak on water to be the same as on land. This makes it less oppressive supporting hover raids and more exposed when supporting naval fleets. - - Aeon T2 mobile flak: water speed multiplier 1.35 -> 1 (water speed 3.65 -> 2.7) - - Seraphim T2 mobile flak: water speed multiplier 1.4 -> 1 (water speed 3.64 -> 2.6) diff --git a/changelog/snippets/balance.6365.md b/changelog/snippets/balance.6365.md deleted file mode 100644 index c7c511b28e..0000000000 --- a/changelog/snippets/balance.6365.md +++ /dev/null @@ -1,5 +0,0 @@ -- (#6410) Buff the cost of the Mercy to suit its new role of killing large numbers of low HP targets such as armies, T1 pgens, and engineers. The buildtime is reduced an extra amount compared to other costs since it is a kamikaze unit. - - - Mass Cost: 300 -> 230 - - Energy Cost: 6000 -> 4600 - - Build Time: 2000 -> 1200 diff --git a/changelog/snippets/balance.6375.md b/changelog/snippets/balance.6375.md deleted file mode 100644 index afb11f6370..0000000000 --- a/changelog/snippets/balance.6375.md +++ /dev/null @@ -1 +0,0 @@ -- (#6375) Reduce blaze speed from 4.3 to 4.0 to make it easier to catch and reduce its powerful raiding capabilities. diff --git a/changelog/snippets/balance.6383.md b/changelog/snippets/balance.6383.md deleted file mode 100644 index ba3d8a1092..0000000000 --- a/changelog/snippets/balance.6383.md +++ /dev/null @@ -1,7 +0,0 @@ -- (#6383) The Soul Ripper's Iridium Rocket Packs gain the same area of effect radius as its primary weapons. Visually, these weapons appeared like they dealt damage in an area of effect, however, this was never the case. Due to being very inaccurate, this caused them to underperform against smaller units. - - - Soul Ripper: Experimental Gunship (URA0401): - - Iridium Rocket Pack (x2): - - DamageRadius: 0 --> 3 - - Damage: 190 --> 150 - - DPS: 285 --> 225 diff --git a/changelog/snippets/balance.6417.md b/changelog/snippets/balance.6417.md deleted file mode 100644 index 7c60563782..0000000000 --- a/changelog/snippets/balance.6417.md +++ /dev/null @@ -1,4 +0,0 @@ -- (#6417) Reduce T2 Amphibious Tank vision by 2 to give them a weapon range disadvantage of 2 when behind enemy lines and lacking intel, similar to T2 land tanks. Riptide is an exception, as it already has a short 18 vision/weapon range. - - Blaze: Vision radius 24 -> 22 - - Yenzyne: Vision radius 20 -> 18 - - Wagner: Vision radius 22 -> 20 diff --git a/changelog/snippets/balance.6423.md b/changelog/snippets/balance.6423.md deleted file mode 100644 index e3b7bfd476..0000000000 --- a/changelog/snippets/balance.6423.md +++ /dev/null @@ -1,11 +0,0 @@ -- (#6423) The Pulsar receives various tweaks in anticipation of its future introduction into the game. Additionally, the Pulsar's files have been updated to remove the last remnants of its former name. Initially, the unit was called Othismash. - - - Pulsar: T3 Mobile EMP Missile Launcher (SRL0310): - - Categories added: - - `PRODUCTDL` - - `SNIPEMODE` - - Pulsar EMP Missile Barrage: - - DamageRadius: 0 --> 1 (same as its EMP weapon) - - TurretPitchRange: 15 --> 40 (required against nearby units and units on top of mountains) - - TurretPitchSpeed: 20 --> 50 (improves the responsiveness of the turret) - - Introduce a taller firing arc to allow the Pulsar to shoot over obstacles more easily diff --git a/changelog/snippets/balance.6427.md b/changelog/snippets/balance.6427.md deleted file mode 100644 index 2d3a3276ab..0000000000 --- a/changelog/snippets/balance.6427.md +++ /dev/null @@ -1,2 +0,0 @@ -- (#6427) Add strong tracking capabilities (like the Seraphim SAM) to the AA of the Cybran and Seraphim carriers so that they do not miss their shots. - - Cybran carrier had an especially poor hit rate at the edge of its range because its weak tracking disabled its ability to lead targets. diff --git a/changelog/snippets/balance.6440.md b/changelog/snippets/balance.6440.md deleted file mode 100644 index cb52267e45..0000000000 --- a/changelog/snippets/balance.6440.md +++ /dev/null @@ -1,7 +0,0 @@ -- (#6440) The Infinity Class Cruiser is equipped with two copies of Zealot AA Missile launchers. These two weapons function identically except for the `MuzzleVelocity` stat, where one weapon has a higher value than the other. This is misleading because the models look the same, and the unit databases imply that both AA batteries have a `MuzzleVelocity` of `40`. This PR equalizes the stats of both launchers to resolve this issue. In terms of gameplay, there is virtually no difference. - - - Infinity Class: T2 Cruiser (UAS0202): - - Zealot AA Missile (right battery): - - MuzzleVelocity: 40 --> 35 - - Zealot AA Missile (left battery): - - MuzzleVelocity: 30 --> 35 diff --git a/changelog/snippets/balance.6466.md b/changelog/snippets/balance.6466.md deleted file mode 100644 index cc267ef7ca..0000000000 --- a/changelog/snippets/balance.6466.md +++ /dev/null @@ -1,2 +0,0 @@ -- (#6466) Fix Ythotha being able to walk backwards. - - `MaxSpeedReverse`: 2.5 -> 0 diff --git a/changelog/snippets/balance.6469.md b/changelog/snippets/balance.6469.md deleted file mode 100644 index 4929c92c54..0000000000 --- a/changelog/snippets/balance.6469.md +++ /dev/null @@ -1,4 +0,0 @@ -- (#6469) Unlike other Tech 2 units, the Fire Beetle only takes up one clamp on transports. This makes it possible to load the same quantities of Fire Beetles and Tech 1 units into transports. To ensure that the Fire Beetle does not slow transports down excessively, its `TransportSpeedReduction` stat is reduced to match that of Tech 1 units. - - - Fire Beetle: T2 Mobile Bomb (XRL0302): - - TransportSpeedReduction: 0.3 --> 0.15 diff --git a/changelog/snippets/balance.6476.md b/changelog/snippets/balance.6476.md deleted file mode 100644 index a39142a9ba..0000000000 --- a/changelog/snippets/balance.6476.md +++ /dev/null @@ -1,7 +0,0 @@ -- (#6476) When the Nano-Repair upgrade was introduced to the Cybran ACU, the `MuzzleSalvoSize` of its torpedo upgrade was nerfed to prevent the combination from being too oppressive. Unfortunately, this change resulted in the torpedo upgrade being weak even against lower quantities of torpedo defenses, since a single anti-torpedo projectile can negate 500 damage. To alleviate this issue, the torpedo upgrade now launches `3` instead of `2` torpedoes, but at a slightly lower DPS. Additionally, as with most other Cybran torpedoes, their damage is now dealt in multiple pulses. - - - Cybran Armored Command Unit (URL0001): - - Nanite Torpedo Launcher - - Damage: 500 --> 60 (DoTPulses: 5) - - MuzzleSalvoSize: 2 --> 3 - - DPS: 250 --> 225 diff --git a/changelog/snippets/balance.6530.md b/changelog/snippets/balance.6530.md deleted file mode 100644 index 4a31dbf2a7..0000000000 --- a/changelog/snippets/balance.6530.md +++ /dev/null @@ -1,2 +0,0 @@ -- (#6530) Remove ASF's armor against Ahwassa bomb, as it is no longer necessary with the new delayed explosion. - - Air superiority fighters: Damage taken from Ahwassa bomb 10% -> 100% diff --git a/changelog/snippets/balance.6568.md b/changelog/snippets/balance.6568.md new file mode 100644 index 0000000000..ee192345e2 --- /dev/null +++ b/changelog/snippets/balance.6568.md @@ -0,0 +1,3 @@ +- (#6568) Vulthoo have been underperforming after their rework. Their biggest weak point was the excessive amount of build time required which made it impractical to make them in the earlier stages of tech 2 especially. + - Vulthoo: + - BuildTime: 3300 --> 2700 \ No newline at end of file diff --git a/changelog/snippets/feature.6557.md b/changelog/snippets/feature.6557.md deleted file mode 100644 index 26859a6561..0000000000 --- a/changelog/snippets/feature.6557.md +++ /dev/null @@ -1 +0,0 @@ -- (#6557) Siloes without engineering suites will not cancel missile construction when issued a hard-stop order (siloes will pause construction instead). \ No newline at end of file diff --git a/changelog/snippets/features.6341.md b/changelog/snippets/features.6341.md deleted file mode 100644 index 609538962b..0000000000 --- a/changelog/snippets/features.6341.md +++ /dev/null @@ -1,16 +0,0 @@ -- (#6341) Improve the formatting of the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled in the settings. - - - For example, the Harbinger is now correctly displayed as having a speed of `2.95` instead of `3.0`. - - - Additionally, trailing zeroes are removed where possible. - -- (#6341) Include more information about unit abilities in the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled in the settings. - - - Display the 'Scry' ability of the Eye of Rhianne and the 'Vision' ability of the Soothsayer. - - - The radius, activation cost and upkeep of the Eye of Rhianne's 'Scry' ability are now shown. - - The maximum vision radius of the Soothsayer's 'Vision' ability is now shown. - - - Display the `ShieldRechargeTime` of personal shields and shield domes. This stat defines the time it takes for shields to recharge after being fully depleted. - - - Display whether a unit can prioritize ACUs via the 'Snipemode' feature. diff --git a/changelog/snippets/features.6424.md b/changelog/snippets/features.6424.md deleted file mode 100644 index 7501714f36..0000000000 --- a/changelog/snippets/features.6424.md +++ /dev/null @@ -1,7 +0,0 @@ -- (#6424) Calculate DPS totals in the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled in the settings. This is useful for summarizing or comparing the stats of units with multiple instances of the same weapon, or multiple weapons of a similar type. If the unit only possesses one valid weapon, the total is not calculated. - - - For example, the Ythotha (Seraphim Experimental Assault Bot), which has multiple weapons, is now displayed as possessing a combined total of `3794` direct fire DPS. This is displayed in an additional field in the UI, the stats of the individual weapons of the unit remain accessible in the same locations as before. - -- (#6424) Do not display the Mole's Target Tracker in the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled. - -- (#6523) Remove unnecessary UI elements from the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled and the selected unit does not have a special `armorType`. diff --git a/changelog/snippets/features.6428.md b/changelog/snippets/features.6428.md deleted file mode 100644 index b55eeb2893..0000000000 --- a/changelog/snippets/features.6428.md +++ /dev/null @@ -1,4 +0,0 @@ -- (#6428) Implement a Dual Yaw turret controller so that Loyalist can fully aim its secondary. - - Previously, the Loyalist was unable to aim its secondary weapon in all directions because the secondary weapon could not rotate the torso independently. - With this change, a weapon can have a secondary yaw bone to aim with by defining `TurretBoneDualYaw` in its blueprint. The secondary yaw's angle, range, and speed can be set with `TurretDualYaw`, `TurretDualYawRange`, and `TurretDualYawSpeed`, but they also default to the primary yaw's angle, range, and speed if not specified. diff --git a/changelog/snippets/features.6465.md b/changelog/snippets/features.6465.md deleted file mode 100644 index d4e482c3fb..0000000000 --- a/changelog/snippets/features.6465.md +++ /dev/null @@ -1,4 +0,0 @@ -- (#6465) Improve the visual representation of multiple projectiles by increasing their `StrategicIconSize`. - - Usha-Ah: Seraphim T3 Sniper Bot: Increase the `StrategicIconSize` of its secondary firing mode's projectile from `1` to `4`. - - Othuum: T3 Siege Tank and Yenzyne: T2 Hover Tank: Increase the `StrategicIconSize` of their Thau Cannon's projectile from `1` to `2`. - - Percival: T3 Armored Assault Bot: Increase the `StrategicIconSize` of its cannon's projectile from `2` to `3`. diff --git a/changelog/snippets/features.6479.md b/changelog/snippets/features.6479.md deleted file mode 100644 index f6cdba5517..0000000000 --- a/changelog/snippets/features.6479.md +++ /dev/null @@ -1,9 +0,0 @@ -- (#6479) Rework the in-game matchmaker lobby from the ground up - -From a user perspective there should be essentially no changes. A new connection matrix is introduced that can help players to understand what source (a player) is connected to what source (another player). The diagonal represents what sources (other players) the local client is connected to. When you receive a message from a peer then it blinks the corresponding box in the matrix. - -There are further features ready such as a map preview that can help you prepare for the match ahead. That is not shown however until we have better tooling in place to gauge its impact. - -From a developers perspective the matchmaker lobby is now maintainable. You can now start the matchmaker lobby locally through your development environment. This allows you to run the matchmaker lobby as if you would find a match in the client. The matchmaker lobby is build from the ground up with maintainability in mind. It now supports a hot reload-like functionality for the interface. This allows you to change the interface on the go, without having to relaunch the game. - -All taken together this is still very much a work in progress and we would love to hear the feedback of the community. We welcome you on Discord in the dev-talk channel. diff --git a/changelog/snippets/features.6499.md b/changelog/snippets/features.6499.md deleted file mode 100644 index 0aae6dbb01..0000000000 --- a/changelog/snippets/features.6499.md +++ /dev/null @@ -1,5 +0,0 @@ -- (#6499) Allow Footprint locking for (modded) units - -With thanks to an assembly patch the footprint changes that were previously unique to the Cybran Tech 2 Destroyer can now be applied to any unit. For more details, see the pull request on GitHub. - -Interested in how assembly patches work? Reach out to the game team. You can find us easiest via the official Discord server. \ No newline at end of file diff --git a/changelog/snippets/features.6533.md b/changelog/snippets/features.6533.md deleted file mode 100644 index dd6ba54653..0000000000 --- a/changelog/snippets/features.6533.md +++ /dev/null @@ -1,5 +0,0 @@ -- (#6533) Add support to assign hotkeys to secondary mouse buttons - -Their technical names are 'X Button 1' and 'X Button 2'. These are the buttons that are commonly found on the left or right side of a mouse. - -With thanks to RTD for the assembly patch. diff --git a/changelog/snippets/features.6534.md b/changelog/snippets/features.6534.md deleted file mode 100644 index 3dbed32689..0000000000 --- a/changelog/snippets/features.6534.md +++ /dev/null @@ -1 +0,0 @@ -- (#6534) Select/go to commander hotkeys will now search for commanders in transports if it doesn't find any on the ground \ No newline at end of file diff --git a/changelog/snippets/fix.6281.md b/changelog/snippets/fix.6281.md deleted file mode 100644 index 94d5576b84..0000000000 --- a/changelog/snippets/fix.6281.md +++ /dev/null @@ -1,3 +0,0 @@ -- (#6281) Fix two errors during blueprint loading when a unit has no Categories table in its blueprint. - - `ExtractCloakMeshBlueprint`-related error. - - Automatic category assignment for the "Weak" weapon categories. diff --git a/changelog/snippets/fix.6343.md b/changelog/snippets/fix.6343.md deleted file mode 100644 index acccb06268..0000000000 --- a/changelog/snippets/fix.6343.md +++ /dev/null @@ -1 +0,0 @@ -- (#6343) Remove the `INSIGNIFICANTUNIT` category from the HARMS, to enable them to be transferred to other players again. This also fixes the bug which caused HARMS to get destroyed when their original owner died in a full share game. Additionally, removing the category also allows HARMS to benefit from veterancy again. They will now gain increased hit points and regen from veterancy, just like other units. diff --git a/changelog/snippets/fix.6369.md b/changelog/snippets/fix.6369.md deleted file mode 100644 index 44afd469ec..0000000000 --- a/changelog/snippets/fix.6369.md +++ /dev/null @@ -1 +0,0 @@ -- (#6369) AI player teammates should now be able to complete campaign objectives such as the opening Supcom mission's objective to build 3 mexes. diff --git a/changelog/snippets/fix.6389.md b/changelog/snippets/fix.6389.md deleted file mode 100644 index efd3772b55..0000000000 --- a/changelog/snippets/fix.6389.md +++ /dev/null @@ -1 +0,0 @@ -- (#6389) Improve tech 2 static artillery's ability to shoot up cliffs. diff --git a/changelog/snippets/fix.6395.md b/changelog/snippets/fix.6395.md deleted file mode 100644 index d9449f0173..0000000000 --- a/changelog/snippets/fix.6395.md +++ /dev/null @@ -1 +0,0 @@ -- (#6395) Hitbox improvements for a wide range of amphibious and naval units to ensure that torpedoes and beam weapons can hit them reliably. diff --git a/changelog/snippets/fix.6396.md b/changelog/snippets/fix.6396.md deleted file mode 100644 index e09da003a4..0000000000 --- a/changelog/snippets/fix.6396.md +++ /dev/null @@ -1 +0,0 @@ -- (#6396, #6538) Fix recall failing on 1 "no" vote less than needed, dead players having their previous recall votes still in effect, and multiple bugs with the voting UI (mainly previous votes showing up again for new recalls). diff --git a/changelog/snippets/fix.6416.md b/changelog/snippets/fix.6416.md deleted file mode 100644 index 57b3bf50bc..0000000000 --- a/changelog/snippets/fix.6416.md +++ /dev/null @@ -1 +0,0 @@ -- (#6416) Fix Salvation's reload time not increasing from 2.5 to 2.6 when missing T1 power generator adjacency and only having T3 power generators. diff --git a/changelog/snippets/fix.6418.md b/changelog/snippets/fix.6418.md deleted file mode 100644 index 9d41879558..0000000000 --- a/changelog/snippets/fix.6418.md +++ /dev/null @@ -1 +0,0 @@ -- (#6418) Fix ACU explosions being able to kill TMD structures. diff --git a/changelog/snippets/fix.6419.md b/changelog/snippets/fix.6419.md deleted file mode 100644 index b020d3097e..0000000000 --- a/changelog/snippets/fix.6419.md +++ /dev/null @@ -1 +0,0 @@ -- (#6419) Fix engineer stations without a `GuardScanRadius` defaulting to 300 radius for their build range overlay. They now display their full build range in the radius for better compatibility with the reclaim tower mods, even though `GuardScanRadius` defaults to 25. diff --git a/changelog/snippets/fix.6426.md b/changelog/snippets/fix.6426.md deleted file mode 100644 index 10222f6d50..0000000000 --- a/changelog/snippets/fix.6426.md +++ /dev/null @@ -1 +0,0 @@ -- (#6426) Fix the "Active game mods for blueprint loading" log message. diff --git a/changelog/snippets/fix.6429.md b/changelog/snippets/fix.6429.md deleted file mode 100644 index 3e55af1e23..0000000000 --- a/changelog/snippets/fix.6429.md +++ /dev/null @@ -1 +0,0 @@ -- (#6429) Fix the aim of the GC's claws being disrupted by the walking animation. diff --git a/changelog/snippets/fix.6430.md b/changelog/snippets/fix.6430.md deleted file mode 100644 index ddeb218e59..0000000000 --- a/changelog/snippets/fix.6430.md +++ /dev/null @@ -1 +0,0 @@ -- (#6430) Fix an `OnImpact` error caused by CZAR's depth charges. diff --git a/changelog/snippets/fix.6432.md b/changelog/snippets/fix.6432.md deleted file mode 100644 index 187ea4398c..0000000000 --- a/changelog/snippets/fix.6432.md +++ /dev/null @@ -1 +0,0 @@ -- (#6432) Fix units failing to transfer after defeat if the player that is being transferred to is defeated during the transfer process. diff --git a/changelog/snippets/fix.6433.md b/changelog/snippets/fix.6433.md deleted file mode 100644 index 6c84d072db..0000000000 --- a/changelog/snippets/fix.6433.md +++ /dev/null @@ -1 +0,0 @@ -- (#6433) Fix Aeon destroyer's depth charge's indirect fire range ring not appearing. diff --git a/changelog/snippets/fix.6436.md b/changelog/snippets/fix.6436.md deleted file mode 100644 index a0bf7e437a..0000000000 --- a/changelog/snippets/fix.6436.md +++ /dev/null @@ -1 +0,0 @@ -- (#6436, #6480, #6552) Prevent the logging of an unecessary warning when certain units make landfall. diff --git a/changelog/snippets/fix.6438.md b/changelog/snippets/fix.6438.md deleted file mode 100644 index fcf04ee0ee..0000000000 --- a/changelog/snippets/fix.6438.md +++ /dev/null @@ -1 +0,0 @@ -- (#6438) Fix `TerrainUtils.GetTerrainSlopeAngles` returning roll on the -Z axis instead of the +Z axis. Previously, this required the roll to be negated when used to orient objects such as units with the terrain. Now roll no longer needs to be negated. diff --git a/changelog/snippets/fix.6439.md b/changelog/snippets/fix.6439.md deleted file mode 100644 index 4cb6922ae7..0000000000 --- a/changelog/snippets/fix.6439.md +++ /dev/null @@ -1 +0,0 @@ -- (#6439) Fix `table.empty` and `table.getsize` not using their asm implementation due to reimports. diff --git a/changelog/snippets/fix.6445.md b/changelog/snippets/fix.6445.md deleted file mode 100644 index 50eccb253d..0000000000 --- a/changelog/snippets/fix.6445.md +++ /dev/null @@ -1,5 +0,0 @@ -- (#6445) Fix overcharge dealing half damage to static and ACU shields. - -- (#6445) Shields now block damage from knocking down/setting fire to trees. - -- (#6445) Fix normal damage being applied before anti-shield damage, which didn't let the normal damage overkill under a shield. diff --git a/changelog/snippets/fix.6446.md b/changelog/snippets/fix.6446.md deleted file mode 100644 index 7a6ff32a0b..0000000000 --- a/changelog/snippets/fix.6446.md +++ /dev/null @@ -1 +0,0 @@ -- (#6446) Fix the "assist to upgrade" and "assist to unpause" game options conflicting and causing upgrading units to unpause during lag spikes. diff --git a/changelog/snippets/fix.6447.md b/changelog/snippets/fix.6447.md deleted file mode 100644 index 8d6fa879df..0000000000 --- a/changelog/snippets/fix.6447.md +++ /dev/null @@ -1 +0,0 @@ -- (#6447) Fix `repr` causing an "attempt to call upval 'match' (a nil value)" error when used in the blueprint loading scripts. diff --git a/changelog/snippets/fix.6456.md b/changelog/snippets/fix.6456.md deleted file mode 100644 index 2d0cfe2350..0000000000 --- a/changelog/snippets/fix.6456.md +++ /dev/null @@ -1 +0,0 @@ -- (#6456) Fix engineers not rotating towards the optimal rolloff point in factories with "build finished" animations such as the UEF and Cybran air factories. diff --git a/changelog/snippets/fix.6457.md b/changelog/snippets/fix.6457.md deleted file mode 100644 index 012410946c..0000000000 --- a/changelog/snippets/fix.6457.md +++ /dev/null @@ -1,3 +0,0 @@ -- (#6457) Fix weapon projectiles dealing damage over time over a shorter duration than given by the `DoTTime` stat. - - `DoTTime` for FAF units is adjusted to the old actual DoT duration, so balance is not changed. - - Unit databases will now show the actual damage over time duration. diff --git a/changelog/snippets/fix.6467.md b/changelog/snippets/fix.6467.md deleted file mode 100644 index 9a174e5f91..0000000000 --- a/changelog/snippets/fix.6467.md +++ /dev/null @@ -1 +0,0 @@ -- (#6467) Fix a crash during blueprint loading if a unit blueprint has an enhancements table but not an intel table. diff --git a/changelog/snippets/fix.6471.md b/changelog/snippets/fix.6471.md deleted file mode 100644 index 1aeea06d6b..0000000000 --- a/changelog/snippets/fix.6471.md +++ /dev/null @@ -1 +0,0 @@ -- (#6471) Fix Seraphim walls not orientating towards the terrain diff --git a/changelog/snippets/fix.6494.md b/changelog/snippets/fix.6494.md deleted file mode 100644 index 89b2cdbff1..0000000000 --- a/changelog/snippets/fix.6494.md +++ /dev/null @@ -1 +0,0 @@ -- (#6494) Fix a crash when the `EnableDiskWatch` command line argument is enabled. diff --git a/changelog/snippets/fix.6499.md b/changelog/snippets/fix.6499.md deleted file mode 100644 index 400aebf8de..0000000000 --- a/changelog/snippets/fix.6499.md +++ /dev/null @@ -1,5 +0,0 @@ -- (#6499) Fix hard crash when exiting the game when a Salem is on land - -The Cybran Tech 2 Destroyer (Salem) has the special ability to move from water onto land. There was a bug in a special, alternative implementation introduced by FAForever. Together with an assembly patch this bug is now fixed. - -Interested in how assembly patches work? Reach out to the game team. You can find us easiest via the official Discord server. \ No newline at end of file diff --git a/changelog/snippets/fix.6504.md b/changelog/snippets/fix.6504.md deleted file mode 100644 index 11ab497c4b..0000000000 --- a/changelog/snippets/fix.6504.md +++ /dev/null @@ -1 +0,0 @@ -- (#6504) Improve the selection boxes of various air units. Alleviate the issue of terrain partially obstructing the selection boxes of most transports when they are grounded. Slightly improve the visuals of the Vulthoo's (Seraphim T2 Gunship's) selection box. diff --git a/changelog/snippets/fix.6507.md b/changelog/snippets/fix.6507.md deleted file mode 100644 index dc5b9a3bb9..0000000000 --- a/changelog/snippets/fix.6507.md +++ /dev/null @@ -1,3 +0,0 @@ -- (#6507) Fix depth charges not applying the ProjectilesToDeflect blueprint field - -As a result, all depth charges would also deflect up to 3 projectiles. Mostly applies to torpedo defenses. diff --git a/changelog/snippets/fix.6514.md b/changelog/snippets/fix.6514.md deleted file mode 100644 index 997f8b9578..0000000000 --- a/changelog/snippets/fix.6514.md +++ /dev/null @@ -1 +0,0 @@ -- (#6514) Fix extremely large amounts of energy storage preventing structures from re-enabling themselves after an energy stall due to requiring 0.1% of storage to be full. Now there is an upper limit of 10k on the energy requirement, which is reached at 100k storage. diff --git a/changelog/snippets/fix.6536.md b/changelog/snippets/fix.6536.md deleted file mode 100644 index 6042c245f0..0000000000 --- a/changelog/snippets/fix.6536.md +++ /dev/null @@ -1,5 +0,0 @@ -- (#6536) Fix the tracking radius for unit weapons being floored to the nearest tenth, which made units not track targets that are near the outside of their range. - - Mobile unit weapons: 1.0x of weapon range -> 1.05x - - Anti-air weapons: 1.10x -> 1.15x - - Bomber weapons: 1.2x -> 1.25x - - Structure weapons: 1x -> 1x diff --git a/changelog/snippets/fix.6546.md b/changelog/snippets/fix.6546.md new file mode 100644 index 0000000000..52c07bf551 --- /dev/null +++ b/changelog/snippets/fix.6546.md @@ -0,0 +1 @@ +- (#6546) Fix an exploit that allows being notified of enemy Billy nuke launches. diff --git a/changelog/snippets/fix.9999.md b/changelog/snippets/fix.9999.md new file mode 100644 index 0000000000..929376c3ce --- /dev/null +++ b/changelog/snippets/fix.9999.md @@ -0,0 +1 @@ +- (#9999) Fix the documentation workflow expecting at least one snippet diff --git a/changelog/snippets/other.6237.md b/changelog/snippets/other.6237.md deleted file mode 100644 index 9f94f81f51..0000000000 --- a/changelog/snippets/other.6237.md +++ /dev/null @@ -1 +0,0 @@ -- (#6237) Convert a markdown-based changelog file into a Lua-based changelog file diff --git a/changelog/snippets/other.6238.md b/changelog/snippets/other.6238.md deleted file mode 100644 index 47195b370b..0000000000 --- a/changelog/snippets/other.6238.md +++ /dev/null @@ -1 +0,0 @@ -- (#6237) Create a Github Workflow to convert markdown changelog files into Lua changelog files diff --git a/changelog/snippets/other.6308.md b/changelog/snippets/other.6308.md deleted file mode 100644 index 298d8802e6..0000000000 --- a/changelog/snippets/other.6308.md +++ /dev/null @@ -1 +0,0 @@ -- (#6308) Falling satellite wrecks do not trigger nuke explosions anymore. This prevents a rarely used, but possible exploit. diff --git a/changelog/snippets/other.6406.md b/changelog/snippets/other.6406.md deleted file mode 100644 index a9045a00e3..0000000000 --- a/changelog/snippets/other.6406.md +++ /dev/null @@ -1,3 +0,0 @@ -- (#6406) Automatically eject people from a lobby when there is a missmatch in the game version - -Players often mention how it is annoying that games desync as a game release happens. This happens even more frequently on the FAF Develop and FAF Beta Balance game types. With this change we introduce a guard to prevent players from joining a lobby when their game version does not match the game version of the host. If there is a missmatch, the host is informed in the chat and is encouraged to re-create the lobby. diff --git a/changelog/snippets/other.6431.md b/changelog/snippets/other.6431.md deleted file mode 100644 index 388a259e72..0000000000 --- a/changelog/snippets/other.6431.md +++ /dev/null @@ -1 +0,0 @@ -- (#6431) Make CZAR depth charges give underwater vision on impact alongside the normal vision they give. diff --git a/changelog/snippets/other.6438.md b/changelog/snippets/other.6438.md deleted file mode 100644 index 15ac7e4dc4..0000000000 --- a/changelog/snippets/other.6438.md +++ /dev/null @@ -1,14 +0,0 @@ -- (#5061, #6438, #6527, #6525, #6528) Add metamethods and utility functions for Vectors and Quaternions to simplify and clean up the code involving operations with them. - - This **removes** the file `/lua/shared/quaternions.lua`, which was added in #4768 (Mar 4, 2023), so mods that use that file will have to be updated. - - The metamethods (defined globally in `/lua/system/utils.lua`) include: - - Vector/Vector2 addition/subtraction/negation - - Vector/Vector2 * Scalar multiplication - - Quaternion/Vector * Vector/Quaternion multiplication - - Vector * Vector multiplication (cross product) - - Since these are metamethods, they work on all instances of Vector/Vector2/Quaternion, without having to import anything. - - The utility functions (have to be imported from `/lua/utilities.lua`) include: - - Faster Lua versions of VDist2, VDist2Sq, VDot - - `QuatFromRotation`: Creates a quaternion from an orientation axis and rotation angle. - - `QuatFromXZDirection`: Returns the orientation quaternion given an XZ direction - - `TranslateInXZDirection`: Translates the XZ coordinates of a position by a length in a given quaternion orientation. - - `RotateVectorByQuat`: Rotates a vector representing a 3D point by a quaternion rotation. diff --git a/changelog/snippets/other.6450.md b/changelog/snippets/other.6450.md deleted file mode 100644 index 5876e94b8d..0000000000 --- a/changelog/snippets/other.6450.md +++ /dev/null @@ -1 +0,0 @@ -- (#6450) Improve beam blueprint annotations with thorough descriptions of beam parameters. diff --git a/changelog/snippets/other.6451.md b/changelog/snippets/other.6451.md deleted file mode 100644 index c0a0272958..0000000000 --- a/changelog/snippets/other.6451.md +++ /dev/null @@ -1 +0,0 @@ -- (#6451) Annotate emitter blueprint parameters with extensive descriptions. diff --git a/changelog/snippets/other.6463.md b/changelog/snippets/other.6463.md deleted file mode 100644 index 44d870eaf7..0000000000 --- a/changelog/snippets/other.6463.md +++ /dev/null @@ -1,3 +0,0 @@ -- (#6463) Remove the 'Kill all your units' hotkey and related functionality - -The existence of the hotkey makes it appear legitimate while it is typically against the rules. diff --git a/changelog/snippets/other.6474.md b/changelog/snippets/other.6474.md deleted file mode 100644 index e0944a855c..0000000000 --- a/changelog/snippets/other.6474.md +++ /dev/null @@ -1,2 +0,0 @@ -- (#6474) Implement command line launch of the auto lobby for LAN games. This allows rapidly testing multiplayer in a local environment. - Further details on the command line switches used and an example script for launching multiple instances are in the linked pull request. diff --git a/changelog/snippets/other.6477.md b/changelog/snippets/other.6477.md deleted file mode 100644 index 32bce33621..0000000000 --- a/changelog/snippets/other.6477.md +++ /dev/null @@ -1 +0,0 @@ -- (#6477) Add the function `DrawBone(entity, bone, length)` to `SimUtils.lua`. diff --git a/changelog/snippets/other.6485.md b/changelog/snippets/other.6485.md deleted file mode 100644 index eeee1a325d..0000000000 --- a/changelog/snippets/other.6485.md +++ /dev/null @@ -1,2 +0,0 @@ -- (#6485) The new, better way of calculating the water absorption is now available for all terrain shaders. The only requirement is that the light multiplier is set to more than 2.1. Decals now use PBR light calculations if the terrain shader uses it, making them more consistent with the ground they are on. -- \ No newline at end of file diff --git a/changelog/snippets/other.6495.md b/changelog/snippets/other.6495.md deleted file mode 100644 index 65d8a95284..0000000000 --- a/changelog/snippets/other.6495.md +++ /dev/null @@ -1,3 +0,0 @@ -- (#6495) Refactor the map utilities module - -Chunks up some larger functions into smaller functions to allow them to be re-used in other modules. diff --git a/changelog/snippets/other.6498.md b/changelog/snippets/other.6498.md deleted file mode 100644 index 9f4e1e31ec..0000000000 --- a/changelog/snippets/other.6498.md +++ /dev/null @@ -1,3 +0,0 @@ -- (#6498, #6502, #6503, #6514, #6516, #6517, #6518, #6506, #6513) Refactor the Enhancements section in the ACU/SACU scripts - -It replaces the long if/else chain with a more modular design that is easier to maintain and hook. Each enhancement has its own dedicated function, named with the format `ProcessEnhancement[EnhancementName]`. The CreateEnhancement function now calls the appropriate enhancement function automatically by that name format. diff --git a/changelog/snippets/other.6526.md b/changelog/snippets/other.6526.md deleted file mode 100644 index 201bd77d44..0000000000 --- a/changelog/snippets/other.6526.md +++ /dev/null @@ -1,3 +0,0 @@ -- (#6526) Default the depth of recursive printing/logging to 3 tables deep - -The new default applies to all the `repr`-like functions. This only changes the developers experience. diff --git a/docs/_posts/2024-08-11-3812.md b/docs/_posts/2024-08-11-3812.md index bbbd26f75a..d3aac9331e 100644 --- a/docs/_posts/2024-08-11-3812.md +++ b/docs/_posts/2024-08-11-3812.md @@ -33,11 +33,11 @@ It was possible to pass invalid numbers (NaN or infinite) as a ballistic acceler With thanks to the following people who contributed through coding: -Garanas (Jip) -Relent0r -Basilisk3 -lL1l1 +- Garanas (Jip) +- Relent0r +- Basilisk3 +- lL1l1 With thanks to the following people who contributed through binary patches: -Hdt80bro +- Hdt80bro diff --git a/docs/_posts/2024-11-29-3813.md b/docs/_posts/2024-11-29-3813.md new file mode 100644 index 0000000000..42c6655ecd --- /dev/null +++ b/docs/_posts/2024-11-29-3813.md @@ -0,0 +1,313 @@ +--- +layout: post +title: Game version 3813 +permalink: changelog/3813 +--- + + +# Game version 3813 (29th of November, 2024) + +The release was delayed by a week because we found a desync issue on the last minute. I want to thank everybody that contributed to the search and fixing of the issue. Pinpointing a desync is especially difficult but through the combined efforts of many people we managed to solve this exceptionally quickly. I am really glad to have such a good team! +The desync issue was on FAF Develop for a few weeks. If you want to contribute you can play on FAF Develop and/or FAF Beta Balance occasionally and report back to the game team. Whether all is good or you encountered issues - all data points are worth their effort. + +With kind regards, + +BlackYps + +## Balance + +- (#6356) Reduce the speed of hover flak on water to be the same as on land. This makes it less oppressive supporting hover raids and more exposed when supporting naval fleets. + - Aeon T2 mobile flak: water speed multiplier 1.35 -> 1 (water speed 3.65 -> 2.7) + - Seraphim T2 mobile flak: water speed multiplier 1.4 -> 1 (water speed 3.64 -> 2.6) + +- (#6410) Buff the cost of the Mercy to suit its new role of killing large numbers of low HP targets such as armies, T1 pgens, and engineers. The buildtime is reduced an extra amount compared to other costs since it is a kamikaze unit. + + - Mass Cost: 300 -> 230 + - Energy Cost: 6000 -> 4600 + - Build Time: 2000 -> 1200 + +- (#6375) Reduce blaze speed from 4.3 to 4.0 to make it easier to catch and reduce its powerful raiding capabilities. + +- (#6383) The Soul Ripper's Iridium Rocket Packs gain the same area of effect radius as its primary weapons. Visually, these weapons appeared like they dealt damage in an area of effect, however, this was never the case. Due to being very inaccurate, this caused them to underperform against smaller units. + + - Soul Ripper: Experimental Gunship (URA0401): + - Iridium Rocket Pack (x2): + - DamageRadius: 0 --> 3 + - Damage: 190 --> 150 + - DPS: 285 --> 225 + +- (#6417) Reduce T2 Amphibious Tank vision by 2 to give them a weapon range disadvantage of 2 when behind enemy lines and lacking intel, similar to T2 land tanks. Riptide is an exception, as it already has a short 18 vision/weapon range. + - Blaze: Vision radius 24 -> 22 + - Yenzyne: Vision radius 20 -> 18 + - Wagner: Vision radius 22 -> 20 + +- (#6423) The Pulsar receives various tweaks in anticipation of its future introduction into the game. Additionally, the Pulsar's files have been updated to remove the last remnants of its former name. Initially, the unit was called Othismash. + + - Pulsar: T3 Mobile EMP Missile Launcher (SRL0310): + - Categories added: + - `PRODUCTDL` + - `SNIPEMODE` + - Pulsar EMP Missile Barrage: + - DamageRadius: 0 --> 1 (same as its EMP weapon) + - TurretPitchRange: 15 --> 40 (required against nearby units and units on top of mountains) + - TurretPitchSpeed: 20 --> 50 (improves the responsiveness of the turret) + - Introduce a taller firing arc to allow the Pulsar to shoot over obstacles more easily + +- (#6427) Add strong tracking capabilities (like the Seraphim SAM) to the AA of the Cybran and Seraphim carriers so that they do not miss their shots. + - Cybran carrier had an especially poor hit rate at the edge of its range because its weak tracking disabled its ability to lead targets. + +- (#6440) Unify the MuzzleVelocity stat of the Aeon Cruiser's missile launchers. The Infinity Class is equipped with two copies of Zealot AA Missile launchers. These two weapons function identically except for their `MuzzleVelocity` stat, where one weapon has a higher value than the other. This is misleading because the models look the same, and the unit databases imply that both have a `MuzzleVelocity` of `40`. In terms of gameplay, there is virtually no difference. + + - Infinity Class: T2 Cruiser (UAS0202): + - Zealot AA Missile (right battery): + - MuzzleVelocity: 40 --> 35 + - Zealot AA Missile (left battery): + - MuzzleVelocity: 30 --> 35 + +- (#6466) Fix Ythotha being able to walk backwards. + - `MaxSpeedReverse`: 2.5 -> 0 + +- (#6469) Unlike other Tech 2 units, the Fire Beetle only takes up one clamp on transports, the same as Tech 1 units. To ensure that it does not slow transports down excessively, the Fire Beetle's `TransportSpeedReduction` stat is reduced to match that of Tech 1 units. + + - Fire Beetle: T2 Mobile Bomb (XRL0302): + - TransportSpeedReduction: 0.3 --> 0.15 + +- (#6476) When the Nano-Repair upgrade was introduced to the Cybran ACU, the `MuzzleSalvoSize` of its torpedo upgrade was nerfed to prevent the combination from being too oppressive. Unfortunately, this change resulted in the torpedo upgrade being weak even against lower quantities of torpedo defenses, since a single anti-torpedo projectile can negate 500 damage. To alleviate this issue, the torpedo upgrade now launches `3` instead of `2` torpedoes, but at a slightly lower DPS. Additionally, as with most other Cybran torpedoes, their damage is now dealt in multiple pulses. + + - Cybran Armored Command Unit (URL0001): + - Nanite Torpedo Launcher + - Damage: 500 --> 60 (DoTPulses: 5) + - MuzzleSalvoSize: 2 --> 3 + - DPS: 250 --> 225 + +- (#6530) Remove ASF's armor against Ahwassa bomb, as it is no longer necessary with the new delayed explosion. + - Air superiority fighters: Damage taken from Ahwassa bomb 10% -> 100% + + +## Features + +- (#6341) Improve the formatting of the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled in the settings. + + - For example, the Harbinger is now correctly displayed as having a speed of `2.95` instead of `3.0`. + + - Additionally, trailing zeroes are removed where possible. + +- (#6341) Include more information about unit abilities in the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled in the settings. + + - Display the 'Scry' ability of the Eye of Rhianne and the 'Vision' ability of the Soothsayer. + + - The radius, activation cost and upkeep of the Eye of Rhianne's 'Scry' ability are now shown. + - The maximum vision radius of the Soothsayer's 'Vision' ability is now shown. + + - Display the `ShieldRechargeTime` of personal shields and shield domes. This stat defines the time it takes for shields to recharge after being fully depleted. + + - Display whether a unit can prioritize ACUs via the 'Snipemode' feature. + +- (#6424) Calculate DPS totals in the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled in the settings. This is useful for summarizing or comparing the stats of units with multiple instances of the same weapon, or multiple weapons of a similar type. If the unit only possesses one valid weapon, the total is not calculated. + + - For example, the Ythotha (Seraphim Experimental Assault Bot), which has multiple weapons, is now displayed as possessing a combined total of `3794` direct fire DPS. This is displayed in an additional field in the UI, the stats of the individual weapons of the unit remain accessible in the same locations as before. + +- (#6424) Do not display the Mole's Target Tracker in the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled. + +- (#6523) Remove unnecessary UI elements from the additional unit details displayed when `Show Armament Detail in Build Menu` is enabled and the selected unit does not have a special `armorType`. + +- (#6428) Implement a Dual Yaw turret controller so that Loyalist can fully aim its secondary. + + Previously, the Loyalist was unable to aim its secondary weapon in all directions because the secondary weapon could not rotate the torso independently. + With this change, a weapon can have a secondary yaw bone to aim with by defining `TurretBoneDualYaw` in its blueprint. The secondary yaw's angle, range, and speed can be set with `TurretDualYaw`, `TurretDualYawRange`, and `TurretDualYawSpeed`, but they also default to the primary yaw's angle, range, and speed if not specified. + +- (#6465) Improve the visual representation of multiple projectiles by increasing their `StrategicIconSize`. + - Usha-Ah: Seraphim T3 Sniper Bot: Increase the `StrategicIconSize` of its secondary firing mode's projectile from `1` to `4`. + - Othuum: T3 Siege Tank and Yenzyne: T2 Hover Tank: Increase the `StrategicIconSize` of their Thau Cannon's projectile from `1` to `2`. + - Percival: T3 Armored Assault Bot: Increase the `StrategicIconSize` of its cannon's projectile from `2` to `3`. + +- (#6479) Rework the in-game matchmaker lobby from the ground up + + From a user perspective there should be essentially no changes. A new connection matrix is introduced that can help players to understand what source (a player) is connected to what source (another player). The diagonal represents what sources (other players) the local client is connected to. When you receive a message from a peer then it blinks the corresponding box in the matrix. + + There are further features ready such as a map preview that can help you prepare for the match ahead. That is not shown however until we have better tooling in place to gauge its impact. + + From a developers perspective the matchmaker lobby is now maintainable. You can now start the matchmaker lobby locally through your development environment. This allows you to run the matchmaker lobby as if you would find a match in the client. The matchmaker lobby is build from the ground up with maintainability in mind. It now supports a hot reload-like functionality for the interface. This allows you to change the interface on the go, without having to relaunch the game. + + All taken together this is still very much a work in progress and we would love to hear the feedback of the community. We welcome you on Discord in the dev-talk channel. + +- (#6499, https://github.com/FAForever/FA-Binary-Patches/pull/94) Intorduce feature to generalize mechanic to switch footprints + + With thanks to an assembly patch the footprint changes that were previously unique to the Cybran Tech 2 Destroyer can now be applied to any unit. For more details, see the pull request on GitHub. + + Interested in how assembly patches work? Reach out to the game team. You can find us easiest via the official Discord server. + +- (#6533, https://github.com/FAForever/FA-Binary-Patches/pull/96) Add support to assign hotkeys to secondary mouse buttons + +Their technical names are 'X Button 1' and 'X Button 2'. These are the buttons that are commonly found on the left or right side of a mouse. + +- (#6534) Select/go to commander hotkeys will now search for commanders in transports if it doesn't find any on the ground + +- (#6557) Silos without engineering suites will not cancel missile construction when issued a hard-stop order. Silos will pause construction instead. + +- (https://github.com/FAForever/FA-Binary-Patches/pull/88) Allow templates with mass extractors to snap to mass spots + + +## Bug fixes + +- (#6281) Fix two errors during blueprint loading when a unit has no Categories table in its blueprint. + - `ExtractCloakMeshBlueprint`-related error. + - Automatic category assignment for the "Weak" weapon categories. + +- (#6343) Remove the `INSIGNIFICANTUNIT` category from the HARMS, to enable them to be transferred to other players again. This also fixes the bug which caused HARMS to get destroyed when their original owner died in a full share game. Additionally, removing the category also allows HARMS to benefit from veterancy again. They will now gain increased hit points and regen from veterancy, just like other units. + +- (#6369) AI player teammates should now be able to complete campaign objectives such as the opening Supcom mission's objective to build 3 mexes. + +- (#6389) Improve tech 2 static artillery's ability to shoot up cliffs. + +- (#6395) Hitbox improvements for a wide range of amphibious and naval units to ensure that torpedoes and beam weapons can hit them reliably. + +- (#6396, #6538) Fix recall failing on 1 "no" vote less than needed, dead players having their previous recall votes still in effect, and multiple bugs with the voting UI (mainly previous votes showing up again for new recalls). + +- (#6416) Fix Salvation's reload time not increasing from 2.5 to 2.6 when missing T1 power generator adjacency and only having T3 power generators. + +- (#6418) Fix ACU explosions dealing too much damage to TMD structures. + +- (#6419) Fix engineer stations without a `GuardScanRadius` defaulting to 300 radius for their build range overlay. They now display their full build range in the radius for better compatibility with the reclaim tower mods, even though `GuardScanRadius` defaults to 25. + +- (#6426) Fix the "Active game mods for blueprint loading" log message. + +- (#6429) Fix the aim of the GC's claws being disrupted by the walking animation. + +- (#6430) Fix an `OnImpact` error caused by CZAR's depth charges. + +- (#6432) Fix units failing to transfer after defeat if the player that is being transferred to is defeated during the transfer process. + +- (#6433) Fix Aeon destroyer's depth charge's indirect fire range ring not appearing. + +- (#6436, #6480, #6552) Prevent the logging of an unecessary warning when certain units make landfall. + +- (#6438) Fix `TerrainUtils.GetTerrainSlopeAngles` returning roll on the -Z axis instead of the +Z axis. Previously, this required the roll to be negated when used to orient objects such as units with the terrain. Now roll no longer needs to be negated. + +- (#6439) Fix `table.empty` and `table.getsize` not using their asm implementation due to reimports. + +- (#6445) Fix overcharge dealing half damage to static and ACU shields. + +- (#6445) Shields now block damage from knocking down/setting fire to trees. + +- (#6445) Fix normal damage being applied before anti-shield damage, which didn't let the normal damage overkill under a shield. + +- (#6446) Fix the "assist to upgrade" and "assist to unpause" game options conflicting and causing upgrading units to unpause during lag spikes. + +- (#6447) Fix `repr` causing an "attempt to call upval 'match' (a nil value)" error when used in the blueprint loading scripts. + +- (#6456) Fix engineers not rotating towards the optimal rolloff point in factories with "build finished" animations such as the UEF and Cybran air factories. + +- (#6457) Fix weapon projectiles dealing damage over time over a shorter duration than given by the `DoTTime` stat. + - `DoTTime` for FAF units is adjusted to the old actual DoT duration, so balance is not changed. + - Unit databases will now show the actual damage over time duration. + +- (#6467) Fix a crash during blueprint loading if a unit blueprint has an enhancements table but not an intel table. + +- (#6471) Fix Seraphim walls not orientating towards the terrain + +- (#6494) Fix a crash when the `EnableDiskWatch` command line argument is enabled. + +- (#6499, https://github.com/FAForever/FA-Binary-Patches/pull/94, https://github.com/FAForever/FA-Binary-Patches/pull/107) Fix hard crash when exiting the game when a Salem is on land + + The Cybran Tech 2 Destroyer (Salem) has the special ability to move from water onto land. There was a bug in a special, alternative implementation introduced by FAForever. Together with an assembly patch this bug is now fixed. + + Interested in how assembly patches work? Reach out to the game team. You can find us easiest via the official Discord server. + +- (#6504) Improve the selection boxes of various air units. Alleviate the issue of terrain partially obstructing the selection boxes of most transports when they are grounded. Slightly improve the visuals of the Vulthoo's (Seraphim T2 Gunship's) selection box. + +- (#6507) Fix depth charges not applying the ProjectilesToDeflect blueprint field + +As a result, all depth charges would also deflect up to 3 projectiles. Mostly applies to torpedo defenses. + +- (#6514) Fix extremely large amounts of energy storage preventing structures from re-enabling themselves after an energy stall due to requiring 0.1% of storage to be full. Now there is an upper limit of 10k on the energy requirement, which is reached at 100k storage. + +- (#6536) Fix the tracking radius for unit weapons being floored to the nearest tenth, which made units not track targets that are near the outside of their range. + - Mobile unit weapons: 1.0x of weapon range -> 1.05x + - Anti-air weapons: 1.10x -> 1.15x + - Bomber weapons: 1.2x -> 1.25x + - Structure weapons: 1x -> 1x (unchanged) + +- (https://github.com/FAForever/FA-Binary-Patches/pull/92, https://github.com/FAForever/FA-Binary-Patches/pull/103) Missile silos now keep loading properly when stalling resources + + Previously, silos would basically stop loading at all, even if you stalled resources just a little. Now they will load proportionally slower, like all other construction does too. + + +## Other changes + +- (#6237) Convert a markdown-based changelog file into a Lua-based changelog file + +- (#6237) Create a Github Workflow to convert markdown changelog files into Lua changelog files + +- (#6308) Falling satellite wrecks do not trigger nuke explosions anymore. This prevents a rarely used, but possible exploit. + +- (#6406) Automatically eject people from a lobby when there is a missmatch in the game version + + Players often mention how it is annoying that games desync as a game release happens. This happens even more frequently on the FAF Develop and FAF Beta Balance game types. With this change we introduce a guard to prevent players from joining a lobby when their game version does not match the game version of the host. If there is a missmatch, the host is informed in the chat and is encouraged to re-create the lobby. + +- (#6431) Make CZAR depth charges give underwater vision on impact alongside the normal vision they give. + +- (#5061, #6438, #6527, #6525, #6528) Add metamethods and utility functions for Vectors and Quaternions to simplify and clean up the code involving operations with them. + - This **removes** the file `/lua/shared/quaternions.lua`, which was added in #4768 (Mar 4, 2023), so mods that use that file will have to be updated. + - The metamethods (defined globally in `/lua/system/utils.lua`) include: + - Vector/Vector2 addition/subtraction/negation + - Vector/Vector2 * Scalar multiplication + - Quaternion/Vector * Vector/Quaternion multiplication + - Vector * Vector multiplication (cross product) + - Since these are metamethods, they work on all instances of Vector/Vector2/Quaternion, without having to import anything. + - The utility functions (have to be imported from `/lua/utilities.lua`) include: + - Faster Lua versions of VDist2, VDist2Sq, VDot + - `QuatFromRotation`: Creates a quaternion from an orientation axis and rotation angle. + - `QuatFromXZDirection`: Returns the orientation quaternion given an XZ direction + - `TranslateInXZDirection`: Translates the XZ coordinates of a position by a length in a given quaternion orientation. + - `RotateVectorByQuat`: Rotates a vector representing a 3D point by a quaternion rotation. + +- (#6450) Improve beam blueprint annotations with thorough descriptions of beam parameters. + +- (#6451) Annotate emitter blueprint parameters with extensive descriptions. + +- (#6463) Remove the 'Kill all your units' hotkey and related functionality + + The existence of the hotkey makes it appear legitimate while it is typically against the rules. + +- (#6474) Implement command line launch of the auto lobby for LAN games. This allows rapidly testing multiplayer in a local environment. + Further details on the command line switches used and an example script for launching multiple instances are in the linked pull request. + +- (#6477) Add the function `DrawBone(entity, bone, length)` to `SimUtils.lua`. + +- (#6485) The new, better way of calculating the water absorption is now available for all terrain shaders. The only requirement is that the light multiplier is set to more than 2.1. Decals now use PBR light calculations if the terrain shader uses it, making them more consistent with the ground they are on. + +- (#6495, #6562) Refactor the map utilities module + + Chunks up some larger functions into smaller functions to allow them to be re-used in other modules. + +- (#6498, #6502, #6503, #6514, #6516, #6517, #6518, #6506, #6513) Refactor the Enhancements section in the ACU/SACU scripts + + It replaces the long if/else chain with a more modular design that is easier to maintain and hook. Each enhancement has its own dedicated function, named with the format `ProcessEnhancement[EnhancementName]`. The CreateEnhancement function now calls the appropriate enhancement function automatically by that name format. + +- (#6526) Default the depth of recursive printing/logging to 3 tables deep + + The new default applies to all the `repr`-like functions. This only changes the developers experience. + +- (https://github.com/FAForever/FA-Binary-Patches/pull/82, https://github.com/FAForever/FA-Binary-Patches/pull/85, https://github.com/FAForever/FA-Binary-Patches/pull/87, https://github.com/FAForever/FA-Binary-Patches/pull/89, https://github.com/FAForever/FA-Binary-Patches/pull/90, https://github.com/FAForever/FA-Binary-Patches/pull/95, https://github.com/FAForever/FA-Binary-Patches/pull/98) Various optimizations and improvements in the engine + + +## Contributors + +With thanks to the following people who contributed through coding: + +- Jip +- clyfordv +- Nomander +- Basilisk3 +- relent0r +- 4z0t +- Rowey +- Balthazar +- Zjonn +- BlackYps + +With thanks to the following people who contributed through binary patches: + +- 4z0t +- RutreD diff --git a/docs/_posts/2024-11-29-3814.md b/docs/_posts/2024-11-29-3814.md new file mode 100644 index 0000000000..e7c6f3d3a8 --- /dev/null +++ b/docs/_posts/2024-11-29-3814.md @@ -0,0 +1,16 @@ +--- +layout: post +title: Game version 3814 +permalink: changelog/3814 +--- + + +# Game version 3814 (29th of November, 2024) + +A log statement accessed an uninitialized variable, which causes matchmaker games to crash. +We fixed the log statement and matchmaker should now work again. +Special thanks to clyf and Nomander for being the emergency response team! + +With kind regards, + +BlackYps \ No newline at end of file diff --git a/docs/_posts/2024-11-29-3815.md b/docs/_posts/2024-11-29-3815.md new file mode 100644 index 0000000000..070e6a66cd --- /dev/null +++ b/docs/_posts/2024-11-29-3815.md @@ -0,0 +1,17 @@ +--- +layout: post +title: Game version 3815 +permalink: changelog/3815 +--- + +# Game version 3815 (29th of November, 2024) + +Fix the autolobby messing with the expected server state. We hope the autolobby functions as expected now. + +With thanks to Nomander for investigating the issue and deciphering a procedure to test the autolobby changes on the test server. Previously the changes were only tested locally by running multiple game instances on the same computer. When testing locally there is no server, and therefore we did not detect this issue sooner. + +Apologies for the inconveniences, + +With kind regards, + +Jip diff --git a/lua/sim/Unit.lua b/lua/sim/Unit.lua index 6482b12186..bbe6a3ab48 100644 --- a/lua/sim/Unit.lua +++ b/lua/sim/Unit.lua @@ -2156,14 +2156,10 @@ Unit = ClassUnit(moho.unit_methods, IntelComponent, VeterancyComponent, DebugUni return end - local bp = self.Blueprint.Audio + local bp = self.Blueprint.Audio.NuclearLaunchDetected if bp then for num, aiBrain in ArmyBrains do - local factionIndex = aiBrain:GetFactionIndex() - - if bp['NuclearLaunchDetected'] then - aiBrain:NuclearLaunchDetected(bp['NuclearLaunchDetected']) - end + aiBrain:NuclearLaunchDetected(bp) end end end, diff --git a/lua/sim/weapons/DefaultProjectileWeapon.lua b/lua/sim/weapons/DefaultProjectileWeapon.lua index 9bfcb7f524..40a6821df4 100644 --- a/lua/sim/weapons/DefaultProjectileWeapon.lua +++ b/lua/sim/weapons/DefaultProjectileWeapon.lua @@ -1058,18 +1058,26 @@ DefaultProjectileWeapon = ClassWeapon(Weapon) { -- Decrement the ammo if they are a counted projectile if proj and not proj:BeenDestroyed() and countedProjectile then if bp.NukeWeapon then + -- Play the "Strategic launch detected" VO to all armies unit:NukeCreatedAtUnit() unit:RemoveNukeSiloAmmo(1) + -- Generate UI notification for automatic nuke ping - local launchData = { - army = self.Army - 1, - location = (GetFocusArmy() == -1 or IsAlly(self.Army, GetFocusArmy())) and - self:GetCurrentTargetPos() or nil - } - if not Sync.NukeLaunchData then - Sync.NukeLaunchData = {} + -- Enemies receive the notification without location data to avoid cheats, while still being notified visually instead of only by audio + + local isObsOrAlly = GetFocusArmy() == -1 or IsAlly(self.Army, GetFocusArmy()) + + -- the global VO plays only when the audio exists, so notify enemies if it exists + if isObsOrAlly or unit.Blueprint.Audio.NuclearLaunchDetected ~= nil then + local launchData = { + army = self.Army - 1, + location = isObsOrAlly and self:GetCurrentTargetPos() or nil + } + if not Sync.NukeLaunchData then + Sync.NukeLaunchData = {} + end + table.insert(Sync.NukeLaunchData, launchData) end - table.insert(Sync.NukeLaunchData, launchData) else unit:RemoveTacticalSiloAmmo(1) end diff --git a/lua/ui/lobby/autolobby.lua b/lua/ui/lobby/autolobby.lua index 2e31c407d0..76b1e4239f 100644 --- a/lua/ui/lobby/autolobby.lua +++ b/lua/ui/lobby/autolobby.lua @@ -42,7 +42,8 @@ local AutolobbyCommunicationsInstance = false ---@param natTraversalProvider any ---@return UIAutolobbyCommunications function CreateLobby(protocol, localPort, desiredPlayerName, localPlayerUID, natTraversalProvider) - LOG("CreateLobby", protocol, localPort, desiredPlayerName, localPlayerUID, natTraversalProvider) + -- we intentionally do not log the 'natTraversalProvider' parameter as it can cause issues due to being an uninitialized C object + LOG("CreateLobby", protocol, localPort, desiredPlayerName, localPlayerUID) -- create the interface, needs to be done before the lobby is local playerCount = tonumber(GetCommandLineArg("/players", 1)[1]) or 8 @@ -64,8 +65,6 @@ function CreateLobby(protocol, localPort, desiredPlayerName, localPlayerUID, nat AutolobbyCommunicationsInstance.LobbyParameters.LocalPlayerPeerId = localPlayerUID AutolobbyCommunicationsInstance.LobbyParameters.NatTraversalProvider = natTraversalProvider - AutolobbyCommunicationsInstance:SendGameStateToServer('Idle') - return AutolobbyCommunicationsInstance end diff --git a/lua/ui/lobby/autolobby/AutolobbyController.lua b/lua/ui/lobby/autolobby/AutolobbyController.lua index 94d3bf59e0..364fc8df4a 100644 --- a/lua/ui/lobby/autolobby/AutolobbyController.lua +++ b/lua/ui/lobby/autolobby/AutolobbyController.lua @@ -746,7 +746,6 @@ AutolobbyCommunications = Class(MohoLobbyMethods, AutolobbyServerCommunicationsC self:DebugSpew("LaunchGame") self:DebugSpew(reprs(gameConfig, { depth = 10 })) - self:SendGameStateToServer('Launching') return MohoLobbyMethods.LaunchGame(self, gameConfig) end, @@ -820,7 +819,6 @@ AutolobbyCommunications = Class(MohoLobbyMethods, AutolobbyServerCommunicationsC -- start prefetching the scenario self:Prefetch(self.GameOptions, self.GameMods) - self:SendGameStateToServer('Lobby') self:SendLaunchStatusToServer('Hosting') -- update UI for game options @@ -855,8 +853,6 @@ AutolobbyCommunications = Class(MohoLobbyMethods, AutolobbyServerCommunicationsC self.LocalPeerId = localPeerId self.HostID = hostPeerId - self:SendGameStateToServer('Lobby') - -- occasionally send data over the network to create pings on screen self.Trash:Add(ForkThread(self.ShareLaunchStatusThread, self)) -- self.Trash:Add(ForkThread(self.CheckForRejoinThread, self)) -- disabled, for now diff --git a/lua/ui/lobby/autolobby/components/AutolobbyServerCommunicationsComponent.lua b/lua/ui/lobby/autolobby/components/AutolobbyServerCommunicationsComponent.lua index c3fb273ac1..95e3b62beb 100644 --- a/lua/ui/lobby/autolobby/components/AutolobbyServerCommunicationsComponent.lua +++ b/lua/ui/lobby/autolobby/components/AutolobbyServerCommunicationsComponent.lua @@ -22,7 +22,7 @@ ------------------------------------------------------------------------------- --#region Game <-> Server communications - +-- -- All the following logic is tightly coupled with functionality on either the -- lobby server, the ice adapter, the java server and/or the client. For more -- context you can search for the various keywords in the following repositories: @@ -32,6 +32,36 @@ -- -- Specifically, the following file processes these messages on the server: -- - https://github.com/FAForever/server/blob/98271c421412467fa387f3a6530fe8d24e360fa4/server/gameconnection.py +-- +-- ## How to test game communications +-- +-- You cannot test the game <-> server communications using the launch script to +-- launch local instances of the game. This requires a bit of effort. +-- +-- Prerequisites: +-- - A Lua development environment +-- - Two separate instances of the FAF client +-- +-- Procedure: +-- - Start the FAF client and then logout to view the login screen. +-- - Choose the test server. +-- - Navigate to the leaderboards. +-- - Navigate to the last page of the leaderboards. +-- - Both clients should pick a player with almost no games. +-- - Back in the FAF client login screen, click on 'login'. +-- - - Sanity check: it should state somewhere on screen that you are logging into the test server. +-- - Use the nickname of the player as login. Use `foo` as the password. Not all accounts that exist +-- in production also exist in the test server, so you may have to try a few to find one that works. +-- +-- Once logged in: +-- - Via the hamburger menu (top left) go to Settings -> Forged Alliance Forever +-- - Update the command line format to `"%s" /init init_local_development.lua`, it auto saves +-- - Start searching +-- +-- The procedure applies to both clients. By updating the command line format you override the +-- game files that the client is loading. Using this approach you can launch the game from +-- any pull request. Just make sure that both clients use the same pull request and have gone +-- through the same procedure. -- upvalue scope for performance local GpgNetSend = GpgNetSend @@ -107,6 +137,11 @@ AutolobbyServerCommunicationsComponent = ClassSimple { ---@param self UIAutolobbyServerCommunicationsComponent | UIAutolobbyCommunications ---@param value UILobbyState SendGameStateToServer = function(self, value) + -- any other value seriously messes with the lobby protocol on the server + if value ~= 'Launching' then + return + end + GpgNetSend('GameState', value) end, @@ -124,7 +159,7 @@ AutolobbyServerCommunicationsComponent = ClassSimple { GpgNetSend('EstablishedPeer', peerId) end, - --- Sends a message to the server that we disconnected from a peer. Note that a peer may be trying to rejoin. See also the launch status of the given peer. + --- Sends a message to the server that we disconnected from a peer. Note that a peer may be trying to rejoin. See also the launch status of the given peer. ---@param self UIAutolobbyServerCommunicationsComponent | UIAutolobbyCommunications ---@param peerId UILobbyPeerId SendDisconnectedPeer = function(self, peerId) diff --git a/lua/ui/lobby/changelogData.lua b/lua/ui/lobby/changelogData.lua index a34805e350..d0357f7af4 100644 --- a/lua/ui/lobby/changelogData.lua +++ b/lua/ui/lobby/changelogData.lua @@ -1,8 +1,67 @@ ---@type number -last_version = 3812 +last_version = 3815 ---@type PatchNotes[] gamePatches = { + { + version = 3815, + name = "Hotfix", + hasPrettyGithubRelease = true, + hasPrettyPatchnotes = false, + description = { + "# Game version 3815 (29th of November, 2024)", + "", + "Fix the autolobby messing with the expected server state. We hope the autolobby functions as expected now.", + "", + "With thanks to Nomander for investigating the issue and deciphering a procedure to test the autolobby changes on ", + "the test server. Previously the changes were only tested locally by running multiple game instances on the same ", + "computer. When testing locally there is no server, and therefore we did not detect this issue sooner.", + "", + "Apologies for the inconveniences,", + "", + "With kind regards,", + "", + "Jip", + }, + }, + { + version = 3814, + name = "Hotfix", + hasPrettyGithubRelease = true, + hasPrettyPatchnotes = false, + description = { + "# Game version 3814 (29th of November, 2024)", + "", + "A log statement accessed an uninitialized variable, which causes matchmaker games to crash.", + "We fixed the log statement and matchmaker should now work again.", + "Special thanks to clyf and Nomander for being the emergency response team!", + "", + "With kind regards,", + "", + "BlackYps", + }, + }, + { + version = 3813, + name = "Developers patch", + hasPrettyGithubRelease = true, + hasPrettyPatchnotes = true, + description = { + "The release was delayed by a week because we found a desync issue on the last minute. I want to thank everybody that contributed ", + "to the search and fixing of the issue. Pinpointing a desync is especially difficult but through the combined efforts of many people ", + "we managed to solve this exceptionally quickly. I am really glad to have such a good team!", + "The desync issue was on FAF Develop for a few weeks. If you want to contribute you can play on FAF Develop and/or FAF Beta Balance ", + "occasionally and report back to the game team. Whether all is good or you encountered issues - all data points are worth their effort.", + "", + "As mentioned before, the in-game will no longer include all the details of the changes. You can find the complete ", + "changelog on Github. You can use the button in the bottom-left corner of this dialog to immediately jump to ", + "details of the changes of the selected game version.", + "", + "With kind regards,", + "", + "BlackYps", + }, + }, { version = 3812, name = "Hotfix", diff --git a/lua/ui/maputil.lua b/lua/ui/maputil.lua index b7da6605fc..f2c9c92b94 100644 --- a/lua/ui/maputil.lua +++ b/lua/ui/maputil.lua @@ -132,19 +132,22 @@ ---@field PlayableAreaHeight number Syncs when the playable area changes ---@field PlayableRect { [1]: number, [2]: number, [3]: number, [4]: number } Coordinates `{x0, y0, x1, y1}` of the playable area Rectangle. Syncs when the playable area changes. +-- A scenario file path is typically like `/maps/scmp_001/scmp_001_scenario.lua` + --- Given the path to a scenario info file, returns a path with the `_scenario.lua` bit removed. ---@param pathToScenarioInfo any ---@return string -local function GetPathToFolder(pathToScenarioInfo) +local function GetPathToScenario(pathToScenarioInfo) return string.sub(pathToScenarioInfo, 1, string.len(pathToScenarioInfo) - string.len("scenario.lua")) end --- Given the path to a scenario info file, returns the path to the folder it resides in. ---@param pathToScenarioInfo any ---@return string -local function GetPathToScenario(pathToScenarioInfo) +local function GetPathToFolder(pathToScenarioInfo) local splits = StringSplit(pathToScenarioInfo, "/") - return string.sub(pathToScenarioInfo, 1, string.len(pathToScenarioInfo) - string.len(splits[table.getn(splits)])) + -- Remove the length of the last token (filename), and the slash character before it. + return string.sub(pathToScenarioInfo, 1, string.len(pathToScenarioInfo) - string.len(splits[table.getn(splits)]) - 1) end --- Given the path to a scenario info file, returns the path to the scenario options file. The reference to this file is not stored in the _scenario.lua file. @@ -260,14 +263,15 @@ function LoadScenario(pathToScenarioInfo) end -- optionally, add in the options - local ok, msg, scenarioOptions = pcall(LoadScenarioOptionsFile, GetPathToScenarioOptions(pathToScenarioInfo)) --[[@as UIScenarioOptionsFile | nil]] - if scenarioOptions then + local ok, scenarioOptions = pcall(LoadScenarioOptionsFile, GetPathToScenarioOptions(pathToScenarioInfo)) --[[@as UIScenarioOptionsFile | nil]] + if ok and scenarioOptions then scenarioInfo.options = scenarioOptions end -- optionally, add in briefing data flag - local ok, msg, scenarioStrings = pcall(LoadScenarioStringsFile, GetPathToScenarioStrings(pathToScenarioInfo)) --[[@as UIScenarioStringsFile | nil]] - if scenarioStrings then + local scenarioStrings + ok, scenarioStrings = pcall(LoadScenarioStringsFile, GetPathToScenarioStrings(pathToScenarioInfo)) --[[@as UIScenarioStringsFile | nil]] + if ok and scenarioStrings then if scenarioStrings.BriefingData then scenarioInfo.hasBriefing = true end diff --git a/lua/version.lua b/lua/version.lua index 6449b4ecee..3631c223aa 100644 --- a/lua/version.lua +++ b/lua/version.lua @@ -34,9 +34,9 @@ local Commit = 'unknown' -- The use of `'` instead of `"` is **intentional** --#endregion -local Version = "3812" ----@alias PATCH "3812" ----@alias VERSION "1.5.3812" +local Version = "3815" +---@alias PATCH "3815" +---@alias VERSION "1.5.3815" ---@return PATCH # Game release function GetVersion() LOG(string.format('Supreme Commander: Forged Alliance Lua version %s at %s (%s)', Version, GameType, Commit)) diff --git a/mod_info.lua b/mod_info.lua index 03eae20ac6..b0f3331b2b 100644 --- a/mod_info.lua +++ b/mod_info.lua @@ -27,7 +27,7 @@ -- - https://github.com/FAForever/fa/blob/deploy/fafdevelop/lua/MODS.LUA name = "Forged Alliance Forever" -version = 3812 -- needs to be an integer as it is parsed as a short (16 bit integer) +version = 3815 -- needs to be an integer as it is parsed as a short (16 bit integer) _faf_modname='faf' copyright = "Forged Alliance Forever Community" description = "Forged Alliance Forever extends Forged Alliance, bringing new patches, game modes, units, ladder, and much more!" diff --git a/units/XSA0203/XSA0203_unit.bp b/units/XSA0203/XSA0203_unit.bp index c9239e8f27..a2f1d48ae1 100644 --- a/units/XSA0203/XSA0203_unit.bp +++ b/units/XSA0203/XSA0203_unit.bp @@ -105,7 +105,7 @@ UnitBlueprint{ Economy = { BuildCostEnergy = 10000, BuildCostMass = 500, - BuildTime = 3300, + BuildTime = 2700, }, Footprint = { MaxSlope = 0.25,