diff --git a/OpenRA.Mods.Common/Traits/World/MissionData.cs b/OpenRA.Mods.Common/Traits/World/MissionData.cs index 86328fe554..9326ce4bc0 100644 --- a/OpenRA.Mods.Common/Traits/World/MissionData.cs +++ b/OpenRA.Mods.Common/Traits/World/MissionData.cs @@ -17,6 +17,7 @@ namespace OpenRA.Mods.Common.Traits [TraitLocation(SystemActors.World)] public class MissionDataInfo : TraitInfo { + [FluentReference(optional: true)] [Desc("Briefing text displayed in the mission browser.")] public readonly string Briefing; diff --git a/OpenRA.Mods.Common/UtilityCommands/ExtractYamlStrings.cs b/OpenRA.Mods.Common/UtilityCommands/ExtractYamlStrings.cs index 2cd612267e..19f695daf5 100644 --- a/OpenRA.Mods.Common/UtilityCommands/ExtractYamlStrings.cs +++ b/OpenRA.Mods.Common/UtilityCommands/ExtractYamlStrings.cs @@ -214,6 +214,9 @@ namespace OpenRA.Mods.Common.UtilityCommands { var candidate = grouping.First(); var key = $"{candidate.Actor}-{candidate.Key}"; + if (key == "actor-world-missiondata-briefing") + key = "briefing"; + build += $"{key} = {candidate.Value}\n"; foreach (var node in candidate.Nodes) node.Value.Value = key; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoBriefingLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoBriefingLogic.cs index 0932649152..c1231ae2e6 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoBriefingLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoBriefingLogic.cs @@ -29,7 +29,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic var missionData = world.Map.Rules.Actors[SystemActors.World].TraitInfoOrDefault(); if (missionData != null) { - var text = WidgetUtils.WrapText(missionData.Briefing?.Replace("\\n", "\n"), mapDescription.Bounds.Width, mapFont); + var briefing = previewWidget.Preview().TryGetMessage(missionData.Briefing, out var translation) ? translation : missionData.Briefing; + var text = WidgetUtils.WrapText(briefing, mapDescription.Bounds.Width, mapFont); mapDescription.GetText = () => text; mapDescription.Bounds.Height = mapFont.Measure(text).Y; mapDescriptionPanel.ScrollToTop(); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs index 8ec0dd39fc..86b761cf58 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs @@ -678,7 +678,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic var missionData = map.WorldActorInfo.TraitInfoOrDefault(); if (missionData != null && !string.IsNullOrEmpty(missionData.Briefing)) - TextNotificationsManager.AddSystemLine(missionData.Briefing.Replace("\\n", "\n")); + { + var briefing = map.TryGetMessage(missionData.Briefing, out var translation) ? translation : missionData.Briefing; + TextNotificationsManager.AddSystemLine(briefing); + } var allOptions = map.PlayerActorInfo.TraitInfos() .Concat(map.WorldActorInfo.TraitInfos()) diff --git a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs index 1d10fb84d3..6ef253e48f 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs @@ -299,13 +299,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic infoVideo = missionData.BackgroundVideo; infoVideoVisible = infoVideo != null; - var briefing = WidgetUtils.WrapText(missionData.Briefing?.Replace("\\n", "\n"), description.Bounds.Width, descriptionFont); - var height = descriptionFont.Measure(briefing).Y; + var briefing = preview.TryGetMessage(missionData.Briefing, out var translation) ? translation : missionData.Briefing; + var wrapped = WidgetUtils.WrapText(briefing, description.Bounds.Width, descriptionFont); + var height = descriptionFont.Measure(wrapped).Y; Game.RunAfterTick(() => { if (preview == selectedMap) { - description.GetText = () => briefing; + description.GetText = () => wrapped; description.Bounds.Height = height; descriptionPanel.Layout.AdjustChildren(); panel = PanelType.MissionInfo;