diff --git a/changelog.md b/changelog.md index d0cde55c6b..c416347015 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,18 @@ Some sections of the changelog are available in other languages such as [French](changelog-fr.md) or [Russian](changelog-ru.md) +# Game version 3775 (19th of November, 2023) + +Another day, another patch! + +This time around, it's a balance patch involving changes across the board, with special attention to balancing air units. For the full details, we recommend visiting the patchnotes website. You can navigate there by clicking the 'Balance notes' button at the bottom of the changelog window. + +A special shoutout to Brutus5000, P4Block, Sheikah, Ravendel, and others who have extensively investigated and tried to fix problems with the ICE adapter. + +Thanks to all those who took the time to report issues and participate in feedback sessions. + +The balance team and Jip + # Game version 3774 (15th of November, 2023) Please refer to the notes of versions 3771, 3772 and 3773 for the full patch notes. diff --git a/lua/ui/lobby/changelog.lua b/lua/ui/lobby/changelog.lua index 05bf6d569f..e0fc8173ea 100644 --- a/lua/ui/lobby/changelog.lua +++ b/lua/ui/lobby/changelog.lua @@ -1,4 +1,3 @@ - local EscapeHandler = import("/lua/ui/dialogs/eschandler.lua") local LayoutHelpers = import("/lua/maui/layouthelpers.lua") local Prefs = import("/lua/user/prefs.lua") @@ -18,7 +17,7 @@ function OpenChangelog() end --- Toggles the debug interface that shows the various groups that are used to divide the dialog -local debugInterface = false +local debugInterface = false --- A bit of a hack, but allows us to keep track of whether the changelog is open or not. The lobby -- is (almost aggressively) trying to keep control of the keyboard on the chat box to prevent hotkeys @@ -38,14 +37,14 @@ Changelog = ClassUI(Group) { -- allow us to use escape to quickly get out - isOpen = true + isOpen = true EscapeHandler.PushEscapeHandler( function() self:Close() end ) - -- make sure we're on top of everything else + -- make sure we're on top of everything else self.Depth:Set(GetFrame(0):GetTopmostDepth() + 1) @@ -81,7 +80,8 @@ Changelog = ClassUI(Group) { self.HeaderDebug:SetSolidColor("ffff0000") LayoutHelpers.FillParent(self.HeaderDebug, self.Header) - self.HeaderTitle = UIUtil.CreateText(self.CommonUI, LOC("Changelog of Supreme Commander: Forged Alliance Forever"), 17, 'Arial Gras', true) + self.HeaderTitle = UIUtil.CreateText(self.CommonUI, + LOC("Changelog of Supreme Commander: Forged Alliance Forever"), 17, 'Arial Gras', true) LayoutHelpers.AtVerticalCenterIn(self.HeaderTitle, self.Header) self.HeaderTitle.Left:Set(function() return self.Header.Left() + LayoutHelpers.ScaleNumber(10) end) @@ -120,7 +120,8 @@ Changelog = ClassUI(Group) { self.FooterBetaBalanceButton = UIUtil.CreateButtonWithDropshadow(self.Footer, '/BUTTON/medium/', "Beta Balance") LayoutHelpers.AtVerticalCenterIn(self.FooterBetaBalanceButton, self.Footer) LayoutHelpers.DepthOverParent(self.FooterBetaBalanceButton, self.Footer, 5) - self.FooterBetaBalanceButton.Left:Set(function() return self.FooterGithubButton.Right() - LayoutHelpers.ScaleNumber(20) end) + self.FooterBetaBalanceButton.Left:Set(function() return self.FooterGithubButton.Right() - + LayoutHelpers.ScaleNumber(20) end) self.FooterBetaBalanceButton.OnClick = function() OpenURL('http://patchnotes.faforever.com/fafbeta') end @@ -128,11 +129,21 @@ Changelog = ClassUI(Group) { self.FooterDevelopButton = UIUtil.CreateButtonWithDropshadow(self.Footer, '/BUTTON/medium/', "FAF Develop") LayoutHelpers.AtVerticalCenterIn(self.FooterDevelopButton, self.Footer) LayoutHelpers.DepthOverParent(self.FooterDevelopButton, self.Footer, 5) - self.FooterDevelopButton.Left:Set(function() return self.FooterBetaBalanceButton.Right() - LayoutHelpers.ScaleNumber(20) end) + self.FooterDevelopButton.Left:Set(function() return self.FooterBetaBalanceButton.Right() - + LayoutHelpers.ScaleNumber(20) end) self.FooterDevelopButton.OnClick = function() OpenURL('http://patchnotes.faforever.com/fafdevelop') end + self.FooterPatchNotesButton = UIUtil.CreateButtonWithDropshadow(self.Footer, '/BUTTON/medium/', "Balance notes") + LayoutHelpers.AtVerticalCenterIn(self.FooterPatchNotesButton, self.Footer, 2) + LayoutHelpers.DepthOverParent(self.FooterPatchNotesButton, self.Footer, 5) + self.FooterPatchNotesButton.Right:Set(function() return self.Footer.Right() - LayoutHelpers.ScaleNumber(220) end) + self.FooterPatchNotesButton:Disable() + self.FooterPatchNotesButton.OnClick = function() + OpenURL('http://github.com/FAForever/fa/blob/develop/changelog.md') + end + self.FooterDiscordButton = UIUtil.CreateButtonWithDropshadow(self.Footer, '/BUTTON/medium/', "Report a bug") LayoutHelpers.AtVerticalCenterIn(self.FooterDiscordButton, self.Footer) LayoutHelpers.DepthOverParent(self.FooterDiscordButton, self.Footer, 5) @@ -176,7 +187,7 @@ Changelog = ClassUI(Group) { self.ContentDivider.Right:Set(self.ContentNotes.Right) self.ContentDivider.Bottom:Set(function() return self.Content.Bottom() - LayoutHelpers.ScaleNumber(10) end) - -- patches + -- patches self.ContentPatchesList = ItemList(self.ContentPatches) LayoutHelpers.FillParentFixedBorder(self.ContentPatchesList, self.ContentPatches, 12) @@ -209,7 +220,7 @@ Changelog = ClassUI(Group) { self:PopulatePatchList() self:PopulateWithPatch(0) - if not debugInterface then + if not debugInterface then self.Debug:Hide() end @@ -218,13 +229,23 @@ Changelog = ClassUI(Group) { --- Populates the dialog with the given patch PopulateWithPatch = function(self, index) local patch = data.gamePatches[index + 1] - if patch then + if patch then + + if patch.hasPrettyPatchnotes then + self.FooterPatchNotesButton:Enable() + self.FooterPatchNotesButton.OnClick = function() + OpenURL(string.format('http://patchnotes.faforever.com/balance/%s.html', patch.version)) + end + else + self.FooterPatchNotesButton:Disable() + end + self.ContentPatchesList:SetSelection(index) self.HeaderSubtitle:SetText(patch.name) self.ContentNotesList:DeleteAllItems() local altDescription = LOC("") - for k, line in patch[altDescription] or patch.description do + for k, line in patch[altDescription] or patch.description do self.ContentNotesList:AddItem(line) end end @@ -233,7 +254,7 @@ Changelog = ClassUI(Group) { --- Populates the list of patches PopulatePatchList = function(self) self.ContentPatchesList:DeleteAllItems() - for k, patch in data.gamePatches do + for k, patch in data.gamePatches do self.ContentPatchesList:AddItem(patch.version .. " - " .. patch.name) end end, @@ -250,4 +271,4 @@ Changelog = ClassUI(Group) { -- go into oblivion self:Destroy() end, -} \ No newline at end of file +} diff --git a/lua/ui/lobby/changelogData.lua b/lua/ui/lobby/changelogData.lua index c426a1b4d4..b669d9cff4 100644 --- a/lua/ui/lobby/changelogData.lua +++ b/lua/ui/lobby/changelogData.lua @@ -1,4 +1,4 @@ -last_version = 3774 +last_version = 3775 ---@alias PatchNotesType "Hotfix"|"Developers patch"|"Balance patch" @@ -12,6 +12,27 @@ last_version = 3774 ---@type PatchNotes[] gamePatches = { + { + version = 3775, + name = "Balance patch", + hasPrettyPatchnotes = true, + description = { + "# Game version 3775 (19th of November, 2023) ", + "", + "Another day, another patch!", + "", + "This time around, it's a balance patch involving changes across the board, with special attention to balancing air units. For the full details, ", + "we recommend visiting the patchnotes website. You can navigate there by clicking the 'Balance notes' button at the bottom of the changelog ", + "window.", + "", + "A special shoutout to Brutus5000, P4Block, Sheikah, Ravendel, and others who have extensively investigated and tried to fix problems with ", + "the ICE adapter.", + "", + "Thanks to all those who took the time to report issues and participate in feedback sessions.", + "", + "The balance team and Jip", + } + }, { version = 3774, name = "Hotfix", diff --git a/lua/version.lua b/lua/version.lua index ba9b86b076..8e91803655 100644 --- a/lua/version.lua +++ b/lua/version.lua @@ -1,7 +1,7 @@ -local Version = "3774" ----@alias PATCH "3774" ----@alias VERSION "1.5.3774" +local Version = "3775" +---@alias PATCH "3775" +---@alias VERSION "1.5.3775" ---@return PATCH function GetVersion() LOG('Supreme Commander: Forged Alliance version ' .. Version) diff --git a/mod_info.lua b/mod_info.lua index 2d74a2d271..b2c4c2882e 100644 --- a/mod_info.lua +++ b/mod_info.lua @@ -3,7 +3,7 @@ -- Documentation for the extended FAF mod_info.lua format can be found here: -- https://github.com/FAForever/fa/wiki/mod_info.lua-documentation name = "Forged Alliance Forever" -version = 3774 +version = 3775 _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/projectiles/AIFMissileSerpentine01/AIFMissileSerpentine01_proj.bp b/projectiles/AIFMissileSerpentine01/AIFMissileSerpentine01_proj.bp index 848161a53e..d63274f293 100644 --- a/projectiles/AIFMissileSerpentine01/AIFMissileSerpentine01_proj.bp +++ b/projectiles/AIFMissileSerpentine01/AIFMissileSerpentine01_proj.bp @@ -58,10 +58,11 @@ ProjectileBlueprint { TrackTarget = true, TrackTargetGround = true, + TrackTargetGroundFuzziness = 0.5, TurnRate = 0, VelocityAlign = true, - MaxZigZag = 5, - ZigZagFrequency = 0.5, + MaxZigZag = 4, + ZigZagFrequency = 0.4, }, } diff --git a/projectiles/AIFMissileSerpentine02/AIFMissileSerpentine02_proj.bp b/projectiles/AIFMissileSerpentine02/AIFMissileSerpentine02_proj.bp index f99c3189bf..0b6db157b2 100644 --- a/projectiles/AIFMissileSerpentine02/AIFMissileSerpentine02_proj.bp +++ b/projectiles/AIFMissileSerpentine02/AIFMissileSerpentine02_proj.bp @@ -57,11 +57,12 @@ ProjectileBlueprint { RotationalVelocityRange = 0, TrackTarget = true, TrackTargetGround = true, + TrackTargetGroundFuzziness = 0.5, TurnRate = 0, UseGravity = false, VelocityAlign = true, - MaxZigZag = 5, - ZigZagFrequency = 0.5, + MaxZigZag = 4, + ZigZagFrequency = 0.4, }, } diff --git a/projectiles/AIFMissileSerpentine03/AIFMissileSerpentine03_proj.bp b/projectiles/AIFMissileSerpentine03/AIFMissileSerpentine03_proj.bp index 5a326beb33..0c04119db2 100644 --- a/projectiles/AIFMissileSerpentine03/AIFMissileSerpentine03_proj.bp +++ b/projectiles/AIFMissileSerpentine03/AIFMissileSerpentine03_proj.bp @@ -60,6 +60,6 @@ ProjectileBlueprint { VelocityAlign = true, MaxZigZag = 5, - ZigZagFrequency = 1, + ZigZagFrequency = 1.0, }, } diff --git a/projectiles/AIFMissileTactical01/AIFMissileTactical01_proj.bp b/projectiles/AIFMissileTactical01/AIFMissileTactical01_proj.bp index e30e89733b..19a7fa6192 100644 --- a/projectiles/AIFMissileTactical01/AIFMissileTactical01_proj.bp +++ b/projectiles/AIFMissileTactical01/AIFMissileTactical01_proj.bp @@ -59,6 +59,7 @@ ProjectileBlueprint { RotationalVelocityRange = 0, TrackTarget = true, TrackTargetGround = true, + TrackTargetGroundFuzziness = 0.5, TurnRate = 0, UseGravity = false, VelocityAlign = true, diff --git a/projectiles/AIFMissileTactical02/AIFMissileTactical02_proj.bp b/projectiles/AIFMissileTactical02/AIFMissileTactical02_proj.bp index 0f767e7bf1..987ae7d80a 100644 --- a/projectiles/AIFMissileTactical02/AIFMissileTactical02_proj.bp +++ b/projectiles/AIFMissileTactical02/AIFMissileTactical02_proj.bp @@ -51,6 +51,7 @@ ProjectileBlueprint { MaxSpeed = 30, RotationalVelocity = 0, RotationalVelocityRange = 0, + TrackTargetGroundFuzziness = 0.5, TrackTarget = true, TurnRate = 15, UseGravity = false,