diff --git a/CHANGELOG.md b/CHANGELOG.md index a8495466..969ce0b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog -Latest published Workshop version: **0.0.148** +Latest published Workshop version: **0.0.149** + +## 2026-11-07 — Clearer setting choices + +- Replaced typed loot, starting scenario, AI and weather modes with labelled selection buttons. +- Guard spacing and HQ participation buttons now save directly, without redundant input fields or Apply. +- Selected choices highlight after server confirmation. ## 2026-11-07 — Interrupted mission results diff --git a/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c b/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c index 567d716c..154c03c7 100644 --- a/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c +++ b/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c @@ -47,13 +47,17 @@ class ERR_AdminMenu : ChimeraMenuBase m_Controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); m_Mode = ERR_GameMode.Cast(GetGame().GetGameMode()); if (!m_Controller) { Close(); return; } - array names = {"TelemetryOn", "TelemetryOff","SitesOn", "SitesOff", "PlaneOn", "PlaneOff", "Close", "PauseJournal", "JournalDetails", "LatestJournal", "KeepWeaponOn", "KeepWeaponOff", "SelfEpiOn", "SelfEpiOff", "IntelSummary", "RerollIntel", "RandomDay_startTimeMinutes", "Default_viewDistanceMetres", "RestartEmptyOn", "RestartEmptyOff", "RecommendedBoats", "RecommendedPlane", "RecommendedWeapons", "RecommendedDrones"}; + array names = {"CrashLootRandom", "CrashLootCustom", "TelemetryOn", "TelemetryOff","SitesOn", "SitesOff", "PlaneOn", "PlaneOff", "Close", "PauseJournal", "JournalDetails", "LatestJournal", "KeepWeaponOn", "KeepWeaponOff", "SelfEpiOn", "SelfEpiOff", "IntelSummary", "RerollIntel", "RandomDay_startTimeMinutes", "Default_viewDistanceMetres", "RestartEmptyOn", "RestartEmptyOff", "RecommendedBoats", "RecommendedPlane", "RecommendedWeapons", "RecommendedDrones"}; foreach (string mainButton : ERR_AdminMenuPages.MainButtons()) names.Insert(mainButton); foreach (string pageButton : Navigation()) names.Insert(pageButton); - for (int density = 1; density <= 4; density++) names.Insert("GuardEvery_" + density.ToString()); - for (int policy = 0; policy <= 2; policy++) names.Insert("GuardHQ_" + policy.ToString()); foreach (string key : ERR_AdminMenuFields.Keys()) { + array choices = ERR_AdminMenuFields.Choices(key); + if (!choices.IsEmpty()) + { + foreach (string choice : choices) names.Insert("Choice_" + key + "_" + choice); + continue; + } names.Insert("Apply_" + key); if (ERR_Settings.Randomizable(key)) names.Insert("Random_" + key); } @@ -162,8 +166,11 @@ class ERR_AdminMenu : ChimeraMenuBase protected int m_SitesState = -1; protected int m_RestartEmptyState = -1; protected int m_TelemetryState = -1; + protected int m_CrashLootState = -1; protected void UpdateActions() { + ERR_SelectionStyle.Choice(SCR_ButtonTextComponent.GetButtonText("CrashLootRandom", GetRootWidget()), m_CrashLootState == 1); + ERR_SelectionStyle.Choice(SCR_ButtonTextComponent.GetButtonText("CrashLootCustom", GetRootWidget()), m_CrashLootState == 0); ERR_SelectionStyle.Pair(GetRootWidget(), "TelemetryOn", "TelemetryOff", m_TelemetryState); ERR_SelectionStyle.Pair(GetRootWidget(), "SitesOn", "SitesOff", m_SitesState); ERR_SelectionStyle.Pair(GetRootWidget(), "SelfEpiOn", "SelfEpiOff", m_SelfEpiState); @@ -172,17 +179,19 @@ class ERR_AdminMenu : ChimeraMenuBase foreach (SCR_ButtonBaseComponent button : m_Buttons) { string name = button.GetRootWidget().GetName(); - if (name.IndexOf("Apply_") == 0 || name.IndexOf("Random_") == 0 || name.IndexOf("RandomDay_") == 0 || name.IndexOf("Default_") == 0) + string choiceKey = ERR_AdminMenuFields.ChoiceKey(name); + if (!choiceKey.IsEmpty()) button.SetEnabled(m_Ready && m_AvailableFields.Contains(choiceKey) && ERR_AdminMenuFields.Available(choiceKey, m_HQ, m_Intel)); + else if (name.IndexOf("Apply_") == 0 || name.IndexOf("Random_") == 0 || name.IndexOf("RandomDay_") == 0 || name.IndexOf("Default_") == 0) { int prefix = name.IndexOf("_") + 1; string key = name.Substring(prefix, name.Length() - prefix); button.SetEnabled(m_Ready && m_AvailableFields.Contains(key) && ERR_AdminMenuFields.Available(key, m_HQ, m_Intel)); } else if (name == "PlaneOn" || name == "PlaneOff") button.SetEnabled(m_Ready && m_HQ && m_AvailableFields.Contains("planeReconEnabled")); - else if (name.IndexOf("GuardEvery_") == 0) button.SetEnabled(m_Ready && m_HQ && m_AvailableFields.Contains("objectGuardEvery")); - else if (name.IndexOf("GuardHQ_") == 0) button.SetEnabled(m_Ready && m_HQ && m_AvailableFields.Contains("objectGuardHQMode")); else if (name == "RerollIntel" || name == "IntelSummary") button.SetEnabled(m_Ready && m_Intel); else if (name == "LatestJournal") button.SetEnabled(m_Ready && m_HQ); + else if (name == "CrashLootRandom") button.SetEnabled(m_Ready && m_CrashLootState == 0); + else if (name == "CrashLootCustom") button.SetEnabled(m_Ready && m_CrashLootState == 1); else if (name == "TelemetryOn") button.SetEnabled(m_Ready && m_TelemetryState == 0); else if (name == "TelemetryOff") button.SetEnabled(m_Ready && m_TelemetryState == 1); else if (name == "RestartEmptyOn") button.SetEnabled(m_Ready && m_RestartEmptyState == 0); @@ -199,7 +208,7 @@ class ERR_AdminMenu : ChimeraMenuBase { if (!authorized) { Close(); return; } if (!values) return; - m_HQ = false; m_Intel = false; m_AvailableFields.Clear(); m_KeepWeaponState = -1; m_SelfEpiState = -1; m_RestartEmptyState = -1; m_TelemetryState = -1; + m_HQ = false; m_Intel = false; m_AvailableFields.Clear(); m_KeepWeaponState = -1; m_SelfEpiState = -1; m_RestartEmptyState = -1; m_TelemetryState = -1; m_CrashLootState = -1; foreach (string entry : values) { if (entry == "supports=hq") { m_HQ = true; continue; } @@ -231,6 +240,13 @@ class ERR_AdminMenu : ChimeraMenuBase if (ERR_AdminMenuFields.Keys().Contains(resolvedKey)) SetText("Saved_" + resolvedKey, "Saved: Random (using " + entry.Substring(divider + 1, entry.Length() - divider - 1) + ")"); continue; } + if (key == "crashLootMode") + { + string lootMode = entry.Substring(divider + 1, entry.Length() - divider - 1); + if (lootMode == "0" || lootMode == "1") m_CrashLootState = lootMode.ToInt(); + SetText("Saved_crashLootMode", "Next round: " + ERR_AdminMenuFields.Display(key, lootMode)); + continue; + } if (key == "planeReconEnabled") { int planeState = entry.Substring(divider + 1, entry.Length() - divider - 1).ToInt(); @@ -274,20 +290,18 @@ class ERR_AdminMenu : ChimeraMenuBase } if (!ERR_AdminMenuFields.Keys().Contains(key)) continue; string saved = entry.Substring(divider + 1, entry.Length() - divider - 1); - if (ERR_Settings.Randomizable(key)) ERR_SelectionStyle.Choice(SCR_ButtonTextComponent.GetButtonText("Random_" + key, GetRootWidget()), saved == "-1"); + if (ERR_Settings.Randomizable(key) && ERR_AdminMenuFields.Choices(key).IsEmpty()) ERR_SelectionStyle.Choice(SCR_ButtonTextComponent.GetButtonText("Random_" + key, GetRootWidget()), saved == "-1"); if (key == "startTimeMinutes") ERR_SelectionStyle.Choice(SCR_ButtonTextComponent.GetButtonText("RandomDay_startTimeMinutes", GetRootWidget()), saved == "-2"); if (key == "viewDistanceMetres") ERR_SelectionStyle.Choice(SCR_ButtonTextComponent.GetButtonText("Default_viewDistanceMetres", GetRootWidget()), saved == "0"); - if (key == "objectGuardEvery") - for (int density = 1; density <= 4; density++) - ERR_SelectionStyle.Choice(SCR_ButtonTextComponent.GetButtonText("GuardEvery_" + density.ToString(), GetRootWidget()), saved.ToInt() == density); - if (key == "objectGuardHQMode") - for (int policy = 0; policy <= 2; policy++) - ERR_SelectionStyle.Choice(SCR_ButtonTextComponent.GetButtonText("GuardHQ_" + policy.ToString(), GetRootWidget()), saved.ToInt() == policy); + array choices = ERR_AdminMenuFields.Choices(key); + foreach (string choice : choices) + ERR_SelectionStyle.Choice(SCR_ButtonTextComponent.GetButtonText("Choice_" + key + "_" + choice, GetRootWidget()), choice == ERR_AdminMenuFields.SavedChoice(key, saved)); string value = ERR_AdminMenuFields.Display(key, saved); m_AvailableFields.Insert(key); if (key == "startMode") SetText("Saved_" + key, ERR_AdminMenuFields.StartSummary(entry.Substring(divider + 1, entry.Length() - divider - 1).ToInt(), m_Mode.StartMode())); else if (key == "aiDoctrine" || key == "aiShadow") SetText("Saved_" + key, "Next round: " + value); else SetText("Saved_" + key, "Saved: " + value); + if (!choices.IsEmpty()) continue; // Existing fields retain all draft text, including a temporarily empty edit. if (!m_InitializedFields.Contains(key)) { @@ -393,16 +407,14 @@ class ERR_AdminMenu : ChimeraMenuBase return; } if (!m_Controller || !m_Ready || m_Age > 6 || m_ClickDelay > 0) return; - if (name.IndexOf("GuardEvery_") == 0 || name.IndexOf("GuardHQ_") == 0) + string choiceKey = ERR_AdminMenuFields.ChoiceKey(name); + if (!choiceKey.IsEmpty()) { - string guardKey = "objectGuardEvery"; - if (name.IndexOf("GuardHQ_") == 0) guardKey = "objectGuardHQMode"; - if (!m_HQ || !m_AvailableFields.Contains(guardKey)) return; - int guardPrefix = name.IndexOf("_") + 1; - SCR_EditBoxComponent guardEdit = SCR_EditBoxComponent.GetEditBoxComponent(guardKey, GetRootWidget()); - if (guardEdit) guardEdit.SetValue(name.Substring(guardPrefix, name.Length() - guardPrefix)); - SetText("Feedback", "Choice selected. Press Apply to save for next round. Green marks the saved choice."); - return; + if (!m_AvailableFields.Contains(choiceKey) || !ERR_AdminMenuFields.Available(choiceKey, m_HQ, m_Intel)) return; + int choicePrefix = choiceKey.Length() + 8; + string choice = name.Substring(choicePrefix, name.Length() - choicePrefix); + m_ClickDelay = 0.3; SetText("Feedback", "Saving selection for next round..."); + m_Controller.ERR_AdminSubmit(ERR_AdminMenuFields.Command(choiceKey, choice), true); return; } if (name == "PlaneOn" || name == "PlaneOff") { @@ -411,6 +423,13 @@ class ERR_AdminMenu : ChimeraMenuBase m_ClickDelay = 0.3; SetText("Feedback", "Saving reconnaissance plane selection for next round..."); m_Controller.ERR_AdminSubmit("mission plane set " + enabled, true); return; } + if (name == "CrashLootRandom" || name == "CrashLootCustom") + { + if (m_CrashLootState < 0) return; + string lootMode = "custom"; if (name == "CrashLootRandom") lootMode = "random"; + m_ClickDelay = 0.3; SetText("Feedback", "Saving crash-site loot mode for next round..."); + m_Controller.ERR_AdminSubmit("mission crashloot set " + lootMode, true); return; + } if (name == "TelemetryOn" || name == "TelemetryOff") { if (m_TelemetryState < 0) return; diff --git a/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenuFields.c b/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenuFields.c index a3adf0a6..8f0f4e03 100644 --- a/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenuFields.c +++ b/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenuFields.c @@ -3,7 +3,29 @@ class ERR_AdminMenuFields { static array Keys() { - return {"shoreBoatCount", "shoreBoatChancePercent", "shoreBoatCrossingChancePercent", "crashLootMode", "crashSiteCount", "crashHelicopterChancePercent", "crashRifleCount", "crashMagazineCount", "crashAntiAirChancePercent", "crashRocketChancePercent", "aiDoctrine", "aiShadow", "automaticEquipmentChancePercent", "sarkaAngerPerCar", "motorbikeCount", "droneReconCount", "droneCooldownSeconds", "planeAltitudeMetres", "planeReplacementSeconds", "planeSectorSeconds", "fieldCampCount", "fieldHospitalCount", "startWeaponCount", "startMagazineCount", "objectGuardCount", "objectGuardEvery", "objectGuardHQMode", "hunterSpawnDistanceMetres", "roadblockCount", "largeRoadblockCount", "mainRoadWidthMetres", "civilianTrafficCount", "garageVehicleCount", "garageChancePercent", "garageRadiusMetres", "garageSpawnIntervalSeconds", "emptyRestartHours", "startMode", "radioDefenceSeconds", "aiIntelChancePercent", "intelRevealChancePercent", "radioIntelSiteCount", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "convoyCount", "antiAirChancePercent", "antiPersonnelMineChancePercent", "heliTimerMinutes"}; + return {"shoreBoatCount", "shoreBoatChancePercent", "shoreBoatCrossingChancePercent", "crashSiteCount", "crashHelicopterChancePercent", "crashRifleCount", "crashMagazineCount", "crashAntiAirChancePercent", "crashRocketChancePercent", "aiDoctrine", "aiShadow", "automaticEquipmentChancePercent", "sarkaAngerPerCar", "motorbikeCount", "droneReconCount", "droneCooldownSeconds", "planeAltitudeMetres", "planeReplacementSeconds", "planeSectorSeconds", "fieldCampCount", "fieldHospitalCount", "startWeaponCount", "startMagazineCount", "objectGuardCount", "objectGuardEvery", "objectGuardHQMode", "hunterSpawnDistanceMetres", "roadblockCount", "largeRoadblockCount", "mainRoadWidthMetres", "civilianTrafficCount", "garageVehicleCount", "garageChancePercent", "garageRadiusMetres", "garageSpawnIntervalSeconds", "emptyRestartHours", "startMode", "radioDefenceSeconds", "aiIntelChancePercent", "intelRevealChancePercent", "radioIntelSiteCount", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "convoyCount", "antiAirChancePercent", "antiPersonnelMineChancePercent", "heliTimerMinutes"}; + } + // Only bounded named modes belong here; quantities and free-form values stay edits. + static array Choices(string key) + { + if (key == "startMode") return {"prison", "crash"}; + if (key == "aiDoctrine") return {"current", "coordinated"}; + if (key == "aiShadow") return {"off", "on"}; + if (key == "objectGuardEvery") return {"1", "2", "3", "4"}; + if (key == "objectGuardHQMode") return {"0", "1", "2"}; + if (key == "weatherProfile") return {"authored", "clear", "overcast", "rain", "random"}; + return {}; + } + static string ChoiceKey(string button) + { + if (!button.StartsWith("Choice_")) return ""; + array parts = {}; button.Split("_", parts, false); + if (parts.Count() != 3 || !Choices(parts[1]).Contains(parts[2])) return ""; + return parts[1]; + } + static string SavedChoice(string key, string saved) + { + string choice = Display(key, saved); choice.ToLower(); return choice; } static bool Available(string key, bool hq, bool intel) { diff --git a/addons/core/UI/layouts/ERR/AdminMenu.layout b/addons/core/UI/layouts/ERR/AdminMenu.layout index 6e127c73..d059aa9b 100644 --- a/addons/core/UI/layouts/ERR/AdminMenu.layout +++ b/addons/core/UI/layouts/ERR/AdminMenu.layout @@ -110,8 +110,8 @@ ImageWidgetClass { "Is Visible" 0 Name "Selected_OpenJournal" Slot FrameWidgetSl FrameWidgetClass { "Is Visible" 1 Name "SettingsPage" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 220 OffsetLeft 220 PositionY 160 OffsetTop 160 SizeX 1000 OffsetRight -1220 SizeY 532 OffsetBottom -692 } { TextWidgetClass { Name "Label_startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 4 OffsetTop 4 SizeX 456 OffsetRight -484 SizeY 22 OffsetBottom -26 } Color 0.9 0.92 0.94 1 Text "Next start (Prison or Crash)" "Font Size" 18 "Min Font Size" 18 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 28 OffsetTop 28 SizeX 180 OffsetRight -208 SizeY 32 OffsetBottom -60 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 220 OffsetLeft 220 PositionY 28 OffsetTop 28 SizeX 100 OffsetRight -320 SizeY 32 OffsetBottom -60 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_startMode_prison" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 28 OffsetTop 28 SizeX 220 OffsetRight -248 SizeY 32 OffsetBottom -60 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Prison" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_startMode_crash" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 264 OffsetLeft 264 PositionY 28 OffsetTop 28 SizeX 220 OffsetRight -484 SizeY 32 OffsetBottom -60 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Crash" } } } TextWidgetClass { Name "Saved_startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 64 OffsetTop 64 SizeX 456 OffsetRight -484 SizeY 28 OffsetBottom -92 } Color 0.9 0.92 0.94 1 Text "Waiting for server" "Font Size" 14 "Min Font Size" 14 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Help_startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 92 OffsetTop 92 SizeX 456 OffsetRight -484 SizeY 28 OffsetBottom -120 } Color 0.9 0.92 0.94 1 Text "Starting scenario for the next round." "Font Size" 14 "Min Font Size" 14 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Label_radioDefenceSeconds" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 4 OffsetTop 4 SizeX 456 OffsetRight -964 SizeY 22 OffsetBottom -26 } Color 0.9 0.92 0.94 1 Text "Radio defence (30-1800 seconds)" "Font Size" 18 "Min Font Size" 18 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } @@ -510,7 +510,7 @@ ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_But FrameWidgetClass { "Is Visible" 0 Name "WorldPage" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 220 OffsetLeft 220 PositionY 160 OffsetTop 160 SizeX 1000 OffsetRight -1220 SizeY 532 OffsetBottom -692 } { TextWidgetClass { Name "WorldHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 6 OffsetTop 6 SizeX 936 OffsetRight -964 SizeY 50 OffsetBottom -56 } - Color 0.9 0.92 0.94 1 Text "Time and weather apply next round. View distance applies now. Press Apply to save." "Font Size" 19 "Min Font Size" 19 Wrap 1 + Color 0.9 0.92 0.94 1 Text "Time and weather apply next round. View distance applies now. Weather buttons save immediately; use Apply for edited values." "Font Size" 19 "Min Font Size" 19 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { @@ -640,8 +640,8 @@ ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_But } } TextWidgetClass { - Name "Label_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 322 OffsetTop 322 SizeX 368 OffsetRight -396 SizeY 28 OffsetBottom -350 } - Color 0.9 0.92 0.94 1 Text "Weather (authored / clear / overcast / rain)" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { + Name "Label_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 322 OffsetTop 322 SizeX 168 OffsetRight -196 SizeY 28 OffsetBottom -350 } + Color 0.9 0.92 0.94 1 Text "Weather" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } @@ -653,34 +653,15 @@ TextWidgetClass { } TextWidgetClass { Name "Help_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 378 OffsetTop 378 SizeX 936 OffsetRight -964 SizeY 20 OffsetBottom -398 } - Color 0.72 0.81 0.87 1 Text "Use authored, clear, overcast or rain. Random chooses one of the three weather types next round." "Font Size" 16 "Min Font Size" 16 Wrap 1 + Color 0.72 0.81 0.87 1 Text "Map default keeps authored weather. Random chooses clear, overcast or rain each round." "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { - Name "weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 408 OffsetLeft 408 PositionY 322 OffsetTop 322 SizeX 240 OffsetRight -648 SizeY 42 OffsetBottom -364 } - components { - SCR_EditBoxComponent "{547290FFBD5B33E9}" { - m_sLabel "" - } - } - } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { - Name "Apply_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 660 OffsetLeft 660 PositionY 322 OffsetTop 322 SizeX 112 OffsetRight -772 SizeY 42 OffsetBottom -364 } - components { - SCR_ButtonTextComponent "{5548F0143AE99095}" { - m_sText "Apply" - } - } - } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { - Name "Random_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 784 OffsetLeft 784 PositionY 322 OffsetTop 322 SizeX 180 OffsetRight -964 SizeY 42 OffsetBottom -364 } - components { - SCR_ButtonTextComponent "{5548F0143AE99095}" { - m_sText "Random" - } - } - } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_authored" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 208 OffsetLeft 208 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -348 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Map default" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_clear" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 362 OffsetLeft 362 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -502 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Clear" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_overcast" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 516 OffsetLeft 516 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -656 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Overcast" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_rain" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 670 OffsetLeft 670 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -810 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Rain" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_random" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 824 OffsetLeft 824 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -964 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Random" } } } TextWidgetClass { Name "Label_viewDistanceMetres" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 406 OffsetTop 406 SizeX 368 OffsetRight -396 SizeY 28 OffsetBottom -434 } Color 0.9 0.92 0.94 1 Text "View distance (500-10000 m / default)" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { @@ -1121,23 +1102,19 @@ ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 170 OffsetLeft 170 PositionY 130 OffsetTop 130 SizeX 110 OffsetRight -280 SizeY 38 OffsetBottom -168 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } TextWidgetClass { Name "Saved_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 171 OffsetTop 171 SizeX 936 OffsetRight -964 SizeY 22 OffsetBottom -193 } Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Help_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 195 OffsetTop 195 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -221 } Color 0.9 0.92 0.94 1 Text "Towers and chimneys use suitable platforms. Lost guards are not replaced." "Font Size" 14 "Min Font Size" 14 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -TextWidgetClass { Name "Label_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 225 OffsetTop 225 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -251 } Color 0.9 0.92 0.94 1 Text "Guard every Nth eligible site (1-4)" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 255 OffsetTop 255 SizeX 130 OffsetRight -158 SizeY 38 OffsetBottom -293 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 170 OffsetLeft 170 PositionY 255 OffsetTop 255 SizeX 110 OffsetRight -280 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +TextWidgetClass { Name "Label_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 225 OffsetTop 225 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -251 } Color 0.9 0.92 0.94 1 Text "Guard spacing" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardEvery_1" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 255 OffsetTop 255 SizeX 222 OffsetRight -250 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every site" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardEvery_2" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 266 OffsetLeft 266 PositionY 255 OffsetTop 255 SizeX 222 OffsetRight -488 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 2nd" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardEvery_3" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 504 OffsetLeft 504 PositionY 255 OffsetTop 255 SizeX 222 OffsetRight -726 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 3rd" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardEvery_4" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 742 OffsetLeft 742 PositionY 255 OffsetTop 255 SizeX 222 OffsetRight -964 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 4th" } } } TextWidgetClass { Name "Saved_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 296 OffsetTop 296 SizeX 936 OffsetRight -964 SizeY 22 OffsetBottom -318 } Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Help_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 320 OffsetTop 320 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -346 } Color 0.9 0.92 0.94 1 Text "1 = every site; 2 = every second; 3 = every third; 4 = every fourth." "Font Size" 14 "Min Font Size" 14 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardEvery_1" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 292 OffsetLeft 292 PositionY 255 OffsetTop 255 SizeX 155 OffsetRight -447 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every site" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardEvery_2" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 459 OffsetLeft 459 PositionY 255 OffsetTop 255 SizeX 155 OffsetRight -614 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 2nd" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardEvery_3" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 626 OffsetLeft 626 PositionY 255 OffsetTop 255 SizeX 155 OffsetRight -781 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 3rd" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardEvery_4" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 793 OffsetLeft 793 PositionY 255 OffsetTop 255 SizeX 155 OffsetRight -948 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 4th" } } } -TextWidgetClass { Name "Label_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 350 OffsetTop 350 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -376 } Color 0.9 0.92 0.94 1 Text "HQ participation (0-2)" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 380 OffsetTop 380 SizeX 130 OffsetRight -158 SizeY 38 OffsetBottom -418 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 170 OffsetLeft 170 PositionY 380 OffsetTop 380 SizeX 110 OffsetRight -280 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +TextWidgetClass { Name "Label_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 350 OffsetTop 350 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -376 } Color 0.9 0.92 0.94 1 Text "HQ participation" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardHQMode_0" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 380 OffsetTop 380 SizeX 304 OffsetRight -332 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Hold positions" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardHQMode_1" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 344 OffsetLeft 344 PositionY 380 OffsetTop 380 SizeX 304 OffsetRight -648 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Half respond to HQ" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardHQMode_2" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 660 OffsetLeft 660 PositionY 380 OffsetTop 380 SizeX 304 OffsetRight -964 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "All respond to HQ" } } } TextWidgetClass { Name "Saved_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 421 OffsetTop 421 SizeX 936 OffsetRight -964 SizeY 22 OffsetBottom -443 } Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -TextWidgetClass { Name "Help_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 445 OffsetTop 445 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -471 } Color 0.9 0.92 0.94 1 Text "0 = hold positions; 1 = half hold and half respond; 2 = all can respond." "Font Size" 14 "Min Font Size" 14 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardHQ_0" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 292 OffsetLeft 292 PositionY 380 OffsetTop 380 SizeX 210 OffsetRight -502 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Hold positions" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardHQ_1" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 514 OffsetLeft 514 PositionY 380 OffsetTop 380 SizeX 210 OffsetRight -724 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Half to HQ" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardHQ_2" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 736 OffsetLeft 736 PositionY 380 OffsetTop 380 SizeX 210 OffsetRight -946 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "All to HQ" } } } +TextWidgetClass { Name "Help_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 445 OffsetTop 445 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -471 } Color 0.9 0.92 0.94 1 Text "Choose which guards can leave their posts to respond to HQ." "Font Size" 14 "Min Font Size" 14 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } } } FrameWidgetClass { "Is Visible" 0 Name "SitesPage" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 220 OffsetLeft 220 PositionY 160 OffsetTop 160 SizeX 1000 OffsetRight -1220 SizeY 532 OffsetBottom -692 } { TextWidgetClass { Name "SitesHeading" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 6 OffsetTop 6 SizeX 710 OffsetRight -738 SizeY 32 OffsetBottom -38 } Color 0.9 0.92 0.94 1 Text "Camps and hospitals - next round" "Font Size" 22 "Min Font Size" 22 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } @@ -1158,9 +1135,9 @@ TextWidgetClass { Name "SitesObjectives" Slot FrameWidgetSlot { Anchor 0 0 0 0 P FrameWidgetClass { "Is Visible" 0 Name "CrashSitesPage" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 220 OffsetLeft 220 PositionY 160 OffsetTop 160 SizeX 1000 OffsetRight -1220 SizeY 532 OffsetBottom -692 } { TextWidgetClass { Name "CrashHeading" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 4 OffsetTop 4 SizeX 936 OffsetRight -964 SizeY 30 OffsetBottom -34 } Color 0.9 0.92 0.94 1 Text "Crash sites - next round" "Font Size" 22 "Min Font Size" 22 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "CrashHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 40 OffsetTop 40 SizeX 936 OffsetRight -964 SizeY 40 OffsetBottom -80 } Color 0.9 0.92 0.94 1 Text "Default loot is random for each crate: poor pistol supplies, a useful rifle, or a rich haul of scoped guns and launchers. No refills." "Font Size" 17 "Min Font Size" 17 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -TextWidgetClass { Name "Label_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 82 OffsetTop 82 SizeX 456 OffsetRight -484 SizeY 26 OffsetBottom -108 } Color 0.9 0.92 0.94 1 Text "Loot mode: Random or Custom" "Font Size" 17 "Min Font Size" 17 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 82 OffsetTop 82 SizeX 180 OffsetRight -688 SizeY 32 OffsetBottom -114 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 700 OffsetLeft 700 PositionY 82 OffsetTop 82 SizeX 100 OffsetRight -800 SizeY 32 OffsetBottom -114 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +TextWidgetClass { Name "Label_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 82 OffsetTop 82 SizeX 456 OffsetRight -484 SizeY 26 OffsetBottom -108 } Color 0.9 0.92 0.94 1 Text "Crash-site loot" "Font Size" 17 "Min Font Size" 17 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "CrashLootRandom" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 82 OffsetTop 82 SizeX 218 OffsetRight -726 SizeY 32 OffsetBottom -114 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Random" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "CrashLootCustom" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 746 OffsetLeft 746 PositionY 82 OffsetTop 82 SizeX 218 OffsetRight -964 SizeY 32 OffsetBottom -114 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Custom" } } } TextWidgetClass { Name "Saved_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 118 OffsetTop 118 SizeX 456 OffsetRight -964 SizeY 20 OffsetBottom -138 } Color 0.9 0.92 0.94 1 Text "Waiting for server" "Font Size" 14 "Min Font Size" 14 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Help_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 112 OffsetTop 112 SizeX 456 OffsetRight -484 SizeY 40 OffsetBottom -152 } Color 0.9 0.92 0.94 1 Text "Random rolls each crate independently. Custom uses the four loot controls below." "Font Size" 14 "Min Font Size" 14 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Label_crashSiteCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 160 OffsetTop 160 SizeX 456 OffsetRight -484 SizeY 22 OffsetBottom -182 } Color 0.9 0.92 0.94 1 Text "Crash sites (0-12)" "Font Size" 17 "Min Font Size" 17 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } @@ -1316,13 +1293,13 @@ FrameWidgetClass { "Is Visible" 0 Name "AIPage" Slot FrameWidgetSlot { Anchor 0 TextWidgetClass { Name "AIHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 6 OffsetTop 6 SizeX 720 OffsetRight -748 SizeY 42 OffsetBottom -48 } Color 0.9 0.92 0.94 1 Text "AI doctrine - changes apply next round." "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Label_aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 76 OffsetTop 76 SizeX 936 OffsetRight -964 SizeY 28 OffsetBottom -104 } Color 0.9 0.92 0.94 1 Text "Hunting doctrine: Current or Coordinated" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 108 OffsetTop 108 SizeX 360 OffsetRight -388 SizeY 38 OffsetBottom -146 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 400 OffsetLeft 400 PositionY 108 OffsetTop 108 SizeX 112 OffsetRight -512 SizeY 38 OffsetBottom -146 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_aiDoctrine_current" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 108 OffsetTop 108 SizeX 236 OffsetRight -264 SizeY 38 OffsetBottom -146 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Current" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_aiDoctrine_coordinated" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 276 OffsetLeft 276 PositionY 108 OffsetTop 108 SizeX 236 OffsetRight -512 SizeY 38 OffsetBottom -146 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Coordinated" } } } TextWidgetClass { Name "Saved_aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 536 OffsetLeft 536 PositionY 116 OffsetTop 116 SizeX 428 OffsetRight -964 SizeY 26 OffsetBottom -142 } Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Help_aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 152 OffsetTop 152 SizeX 936 OffsetRight -964 SizeY 42 OffsetBottom -194 } Color 0.9 0.92 0.94 1 Text "Current keeps existing behaviour. Coordinated assigns squads to a shared search operation." "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Label_aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 206 OffsetTop 206 SizeX 936 OffsetRight -964 SizeY 28 OffsetBottom -234 } Color 0.9 0.92 0.94 1 Text "Proposal logging: On or Off" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 238 OffsetTop 238 SizeX 360 OffsetRight -388 SizeY 38 OffsetBottom -276 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 400 OffsetLeft 400 PositionY 238 OffsetTop 238 SizeX 112 OffsetRight -512 SizeY 38 OffsetBottom -276 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_aiShadow_off" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 238 OffsetTop 238 SizeX 236 OffsetRight -264 SizeY 38 OffsetBottom -276 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Off" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_aiShadow_on" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 276 OffsetLeft 276 PositionY 238 OffsetTop 238 SizeX 236 OffsetRight -512 SizeY 38 OffsetBottom -276 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "On" } } } TextWidgetClass { Name "Saved_aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 536 OffsetLeft 536 PositionY 246 OffsetTop 246 SizeX 428 OffsetRight -964 SizeY 26 OffsetBottom -272 } Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "Help_aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 282 OffsetTop 282 SizeX 936 OffsetRight -964 SizeY 42 OffsetBottom -324 } Color 0.9 0.92 0.94 1 Text "On logs coordinated proposals while Current keeps control. No coordinated orders are issued." "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } TextWidgetClass { Name "AIChangesHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 350 OffsetTop 350 SizeX 936 OffsetRight -964 SizeY 72 OffsetBottom -422 } Color 0.9 0.92 0.94 1 Text "Current is the default. Proposal logging is for comparing plans before enabling coordinated orders. Neither setting changes the running round." "Font Size" 18 "Min Font Size" 18 Wrap 1 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } } diff --git a/tests/test_admin_menu.py b/tests/test_admin_menu.py index 13847f04..bedaeb69 100644 --- a/tests/test_admin_menu.py +++ b/tests/test_admin_menu.py @@ -12,7 +12,7 @@ navigation = source.with_name('ERR_AdminMenuPages.c') layout = BASE / 'addons/core/UI/layouts/ERR/AdminMenu.layout' keys = re.findall(r'"([A-Za-z]+)"', body(fields, 'static array Keys(')) settings = re.findall(r'"([A-Za-z]+)"', body(BASE / 'addons/core/Scripts/Game/ERR/00_Core/ERR_Settings.c', 'static array Keys(')) -assert len(keys) == len(set(keys)) and set(settings) - set(keys) == {"telemetryEnabled", "automaticConvoyEnabled", "keepWeaponOnUnconscious", "selfEpinephrine", "planeReconEnabled", "restartOnEmpty", "showAllSites"} +assert len(keys) == len(set(keys)) and set(settings) - set(keys) == {"crashLootMode", "telemetryEnabled", "automaticConvoyEnabled", "keepWeaponOnUnconscious", "selfEpinephrine", "planeReconEnabled", "restartOnEmpty", "showAllSites"} assert set(keys) <= set(settings) # Every menu field must have a server setting. # Native layouts place child widget declarations inside an anonymous Children # block. A missing brace can preserve most widget names yet prevent menu load. @@ -48,12 +48,21 @@ else: names = re.findall(r'\bName "([^"]+)"', layout.read_text()) assert 'RandomDay_startTimeMinutes' in names assert 'PlaneOn' in names and 'PlaneOff' in names +assert 'CrashLootRandom' in names and 'CrashLootCustom' in names +assert 'crashLootMode' not in names and 'Apply_crashLootMode' not in names assert all(n in names for n in ('OpenPlane','Sidebar_HQ','PlanePage','Selected_OpenPlane')) for signature in ('static array Pages(', 'static array Navigation('): for n in re.findall(r'"([A-Za-z]+)"', body(navigation, signature)): assert n in names assert 'Apply_planeReconEnabled' not in names # Saved-state toggle pair, not a numeric edit. assert len(names) == len(set(names)), 'Menu widget names must be unique' +choice_sets = {key: re.findall(r'"([^"]+)"', values) for key, values in re.findall(r'if \(key == "([^"]+)"\) return \{([^}]+)\}', body(fields, 'static array Choices('))} +assert set(choice_sets) == {'startMode', 'aiDoctrine', 'aiShadow', 'objectGuardEvery', 'objectGuardHQMode', 'weatherProfile'} for key in keys: + if key in choice_sets: + assert key not in names and 'Apply_' + key not in names + assert all('Choice_' + key + '_' + choice in names for choice in choice_sets[key]) + assert all(prefix + key in names for prefix in ('Saved_', 'Help_')) + continue assert all(name in names for name in (key, 'Apply_' + key, 'Saved_' + key, 'Help_' + key)) if key not in ('shoreBoatCount','shoreBoatChancePercent','shoreBoatCrossingChancePercent','crashLootMode','crashSiteCount','crashHelicopterChancePercent','crashRifleCount','crashMagazineCount','crashAntiAirChancePercent','crashRocketChancePercent','radioIntelSiteCount','droneReconCount','droneCooldownSeconds','sarkaAngerPerCar','emptyRestartHours','aiDoctrine','aiShadow','motorbikeCount','planeAltitudeMetres','planeReplacementSeconds','planeSectorSeconds','fieldCampCount','fieldHospitalCount','startMode','garageVehicleCount','garageChancePercent','garageRadiusMetres','garageSpawnIntervalSeconds','civilianTrafficCount','roadblockCount','largeRoadblockCount','mainRoadWidthMetres','hunterSpawnDistanceMetres','objectGuardCount','objectGuardEvery','objectGuardHQMode','startWeaponCount','startMagazineCount'): assert ('Default_' if key == 'viewDistanceMetres' else 'Random_') + key in names else: assert 'Random_startMode' not in names @@ -66,14 +75,19 @@ menu_format = body(ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_JournalText.c' follow = body(fields, 'static bool FollowJournal(') command = body(fields, 'static string Command(') available = body(fields, 'static bool Available(').replace('Keys().Contains(key)', 'Known(key)') +choices = body(fields, 'static array Choices(').replace('array', 'Array') +choice_key = body(fields, 'static string ChoiceKey(').replace('array', 'Array') known = ' || '.join('key == "' + key + '"' for key in keys) run(r''' #include #include #include +#include struct string : std::string { using std::string::string; string(std::string s):std::string(s){} + bool StartsWith(string prefix){return rfind(prefix,0)==0;} + template void Split(string separator,T& result,bool skipEmpty){assert(!skipEmpty);size_t start=0,end;while((end=find(separator,start))!=npos){result.push_back(substr(start,end-start));start=end+separator.size();}result.push_back(substr(start));} bool IsEmpty(){return empty();} int Length(){return size();} int IndexOf(string s){auto i=find(s);return i==npos?-1:int(i);} @@ -81,13 +95,25 @@ struct string : std::string { void Replace(string a,string b){size_t i=0;while((i=find(a,i))!=npos){replace(i,a.size(),b);i+=b.size();}} string Trim(){auto a=find_first_not_of(" \t\r\n");if(a==npos)return "";auto b=find_last_not_of(" \t\r\n");return substr(a,b-a+1);} }; +template struct Array:std::vector{using std::vector::vector;int Count(){return this->size();}bool Contains(T v){return std::find(this->begin(),this->end(),v)!=this->end();}}; struct ERR_JournalText { ''' + menu_format + r''' }; struct Fields { - static bool Known(string key) {return ''' + known + ';}\n' + command + '\n' + available + '\n' + follow + '\n' + journal + r''' + static bool Known(string key) {return ''' + known + ';}\n' + choices + '\n' + choice_key + '\n' + command + '\n' + available + '\n' + follow + '\n' + journal + r''' }; int main() { + assert(Fields::ChoiceKey("Choice_startMode_prison")=="startMode"); + assert(Fields::ChoiceKey("Choice_startMode_crash")=="startMode"); + assert(Fields::ChoiceKey("Choice_aiDoctrine_coordinated")=="aiDoctrine"); + assert(Fields::ChoiceKey("Choice_aiShadow_off")=="aiShadow"); + for(string choice:{"authored","clear","overcast","rain","random"}) + assert(Fields::ChoiceKey(string("Choice_weatherProfile_")+choice)=="weatherProfile"); + assert(Fields::ChoiceKey("Choice_objectGuardEvery_4")=="objectGuardEvery"); + assert(Fields::ChoiceKey("Choice_objectGuardHQMode_2")=="objectGuardHQMode"); + for(string invalid:{"Apply_weatherProfile","Choice_weatherProfile_4","Choice_objectGuardEvery_0","Choice_objectGuardHQMode_3","Choice_startMode_random","Choice_aiShadow_on_extra","Choice_"}) assert(Fields::ChoiceKey(invalid).empty()); + assert(Fields::Choices("crashRifleCount").empty()); + assert(Fields::Choices("startDateCode").empty()); string raw="#24 t=7s M3 observe guard"; assert(Fields::JournalText(raw)=="No. 24 t=7s M3 observe guard"); assert(raw=="#24 t=7s M3 observe guard"); diff --git a/ui/admin_menu/pages/AIPage.layout.in b/ui/admin_menu/pages/AIPage.layout.in index 4242713c..4e25da8b 100644 --- a/ui/admin_menu/pages/AIPage.layout.in +++ b/ui/admin_menu/pages/AIPage.layout.in @@ -2,13 +2,13 @@ FrameWidgetClass { "Is Visible" {{VISIBLE_AIPage}} Name "AIPage" Slot FrameWidge TextWidgetClass { Name "AIHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 6 OffsetTop 6 SizeX 720 OffsetRight -748 SizeY 42 OffsetBottom -48 } Color {{COLOR_TEXT}} Text "AI doctrine - changes apply next round." "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Label_aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 76 OffsetTop 76 SizeX 936 OffsetRight -964 SizeY 28 OffsetBottom -104 } Color {{COLOR_TEXT}} Text "Hunting doctrine: Current or Coordinated" "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 108 OffsetTop 108 SizeX 360 OffsetRight -388 SizeY 38 OffsetBottom -146 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 400 OffsetLeft 400 PositionY 108 OffsetTop 108 SizeX 112 OffsetRight -512 SizeY 38 OffsetBottom -146 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_aiDoctrine_current" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 108 OffsetTop 108 SizeX 236 OffsetRight -264 SizeY 38 OffsetBottom -146 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Current" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_aiDoctrine_coordinated" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 276 OffsetLeft 276 PositionY 108 OffsetTop 108 SizeX 236 OffsetRight -512 SizeY 38 OffsetBottom -146 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Coordinated" } } } TextWidgetClass { Name "Saved_aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 536 OffsetLeft 536 PositionY 116 OffsetTop 116 SizeX 428 OffsetRight -964 SizeY 26 OffsetBottom -142 } Color {{COLOR_TEXT}} Text "Waiting for saved value" "Font Size" {{SIZE_CAPTION}} "Min Font Size" {{SIZE_CAPTION}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Help_aiDoctrine" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 152 OffsetTop 152 SizeX 936 OffsetRight -964 SizeY 42 OffsetBottom -194 } Color {{COLOR_TEXT}} Text "Current keeps existing behaviour. Coordinated assigns squads to a shared search operation." "Font Size" {{SIZE_CAPTION}} "Min Font Size" {{SIZE_CAPTION}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Label_aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 206 OffsetTop 206 SizeX 936 OffsetRight -964 SizeY 28 OffsetBottom -234 } Color {{COLOR_TEXT}} Text "Proposal logging: On or Off" "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 238 OffsetTop 238 SizeX 360 OffsetRight -388 SizeY 38 OffsetBottom -276 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 400 OffsetLeft 400 PositionY 238 OffsetTop 238 SizeX 112 OffsetRight -512 SizeY 38 OffsetBottom -276 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_aiShadow_off" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 238 OffsetTop 238 SizeX 236 OffsetRight -264 SizeY 38 OffsetBottom -276 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Off" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_aiShadow_on" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 276 OffsetLeft 276 PositionY 238 OffsetTop 238 SizeX 236 OffsetRight -512 SizeY 38 OffsetBottom -276 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "On" } } } TextWidgetClass { Name "Saved_aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 536 OffsetLeft 536 PositionY 246 OffsetTop 246 SizeX 428 OffsetRight -964 SizeY 26 OffsetBottom -272 } Color {{COLOR_TEXT}} Text "Waiting for saved value" "Font Size" {{SIZE_CAPTION}} "Min Font Size" {{SIZE_CAPTION}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Help_aiShadow" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 282 OffsetTop 282 SizeX 936 OffsetRight -964 SizeY 42 OffsetBottom -324 } Color {{COLOR_TEXT}} Text "On logs coordinated proposals while Current keeps control. No coordinated orders are issued." "Font Size" {{SIZE_CAPTION}} "Min Font Size" {{SIZE_CAPTION}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "AIChangesHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 350 OffsetTop 350 SizeX 936 OffsetRight -964 SizeY 72 OffsetBottom -422 } Color {{COLOR_TEXT}} Text "Current is the default. Proposal logging is for comparing plans before enabling coordinated orders. Neither setting changes the running round." "Font Size" {{SIZE_BODY}} "Min Font Size" {{SIZE_BODY}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } diff --git a/ui/admin_menu/pages/CrashSitesPage.layout.in b/ui/admin_menu/pages/CrashSitesPage.layout.in index 4286c324..3d1f334e 100644 --- a/ui/admin_menu/pages/CrashSitesPage.layout.in +++ b/ui/admin_menu/pages/CrashSitesPage.layout.in @@ -1,9 +1,9 @@ FrameWidgetClass { "Is Visible" {{VISIBLE_CrashSitesPage}} Name "CrashSitesPage" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 220 OffsetLeft 220 PositionY 160 OffsetTop 160 SizeX 1000 OffsetRight -1220 SizeY 532 OffsetBottom -692 } { TextWidgetClass { Name "CrashHeading" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 4 OffsetTop 4 SizeX 936 OffsetRight -964 SizeY 30 OffsetBottom -34 } Color {{COLOR_TEXT}} Text "Crash sites - next round" "Font Size" {{SIZE_HEADING}} "Min Font Size" {{SIZE_HEADING}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "CrashHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 40 OffsetTop 40 SizeX 936 OffsetRight -964 SizeY 40 OffsetBottom -80 } Color {{COLOR_TEXT}} Text "Default loot is random for each crate: poor pistol supplies, a useful rifle, or a rich haul of scoped guns and launchers. No refills." "Font Size" {{SIZE_HELP}} "Min Font Size" {{SIZE_HELP}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -TextWidgetClass { Name "Label_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 82 OffsetTop 82 SizeX 456 OffsetRight -484 SizeY 26 OffsetBottom -108 } Color {{COLOR_TEXT}} Text "Loot mode: Random or Custom" "Font Size" {{SIZE_HELP}} "Min Font Size" {{SIZE_HELP}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 82 OffsetTop 82 SizeX 180 OffsetRight -688 SizeY 32 OffsetBottom -114 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 700 OffsetLeft 700 PositionY 82 OffsetTop 82 SizeX 100 OffsetRight -800 SizeY 32 OffsetBottom -114 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +TextWidgetClass { Name "Label_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 82 OffsetTop 82 SizeX 456 OffsetRight -484 SizeY 26 OffsetBottom -108 } Color {{COLOR_TEXT}} Text "Crash-site loot" "Font Size" {{SIZE_HELP}} "Min Font Size" {{SIZE_HELP}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "CrashLootRandom" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 82 OffsetTop 82 SizeX 218 OffsetRight -726 SizeY 32 OffsetBottom -114 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Random" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "CrashLootCustom" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 746 OffsetLeft 746 PositionY 82 OffsetTop 82 SizeX 218 OffsetRight -964 SizeY 32 OffsetBottom -114 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Custom" } } } TextWidgetClass { Name "Saved_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 118 OffsetTop 118 SizeX 456 OffsetRight -964 SizeY 20 OffsetBottom -138 } Color {{COLOR_TEXT}} Text "Waiting for server" "Font Size" {{SIZE_CAPTION_SMALL}} "Min Font Size" {{SIZE_CAPTION_SMALL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Help_crashLootMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 112 OffsetTop 112 SizeX 456 OffsetRight -484 SizeY 40 OffsetBottom -152 } Color {{COLOR_TEXT}} Text "Random rolls each crate independently. Custom uses the four loot controls below." "Font Size" {{SIZE_CAPTION_SMALL}} "Min Font Size" {{SIZE_CAPTION_SMALL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Label_crashSiteCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 160 OffsetTop 160 SizeX 456 OffsetRight -484 SizeY 22 OffsetBottom -182 } Color {{COLOR_TEXT}} Text "Crash sites (0-12)" "Font Size" {{SIZE_HELP}} "Min Font Size" {{SIZE_HELP}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } diff --git a/ui/admin_menu/pages/GuardsPage.layout.in b/ui/admin_menu/pages/GuardsPage.layout.in index b575305d..9152ff08 100644 --- a/ui/admin_menu/pages/GuardsPage.layout.in +++ b/ui/admin_menu/pages/GuardsPage.layout.in @@ -7,21 +7,17 @@ ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 170 OffsetLeft 170 PositionY 130 OffsetTop 130 SizeX 110 OffsetRight -280 SizeY 38 OffsetBottom -168 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } TextWidgetClass { Name "Saved_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 171 OffsetTop 171 SizeX 936 OffsetRight -964 SizeY 22 OffsetBottom -193 } Color {{COLOR_TEXT}} Text "Waiting for saved value" "Font Size" {{SIZE_CAPTION}} "Min Font Size" {{SIZE_CAPTION}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Help_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 195 OffsetTop 195 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -221 } Color {{COLOR_TEXT}} Text "Towers and chimneys use suitable platforms. Lost guards are not replaced." "Font Size" {{SIZE_CAPTION_SMALL}} "Min Font Size" {{SIZE_CAPTION_SMALL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -TextWidgetClass { Name "Label_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 225 OffsetTop 225 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -251 } Color {{COLOR_TEXT}} Text "Guard every Nth eligible site (1-4)" "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 255 OffsetTop 255 SizeX 130 OffsetRight -158 SizeY 38 OffsetBottom -293 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 170 OffsetLeft 170 PositionY 255 OffsetTop 255 SizeX 110 OffsetRight -280 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +TextWidgetClass { Name "Label_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 225 OffsetTop 225 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -251 } Color {{COLOR_TEXT}} Text "Guard spacing" "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardEvery_1" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 255 OffsetTop 255 SizeX 222 OffsetRight -250 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every site" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardEvery_2" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 266 OffsetLeft 266 PositionY 255 OffsetTop 255 SizeX 222 OffsetRight -488 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 2nd" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardEvery_3" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 504 OffsetLeft 504 PositionY 255 OffsetTop 255 SizeX 222 OffsetRight -726 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 3rd" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardEvery_4" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 742 OffsetLeft 742 PositionY 255 OffsetTop 255 SizeX 222 OffsetRight -964 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 4th" } } } TextWidgetClass { Name "Saved_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 296 OffsetTop 296 SizeX 936 OffsetRight -964 SizeY 22 OffsetBottom -318 } Color {{COLOR_TEXT}} Text "Waiting for saved value" "Font Size" {{SIZE_CAPTION}} "Min Font Size" {{SIZE_CAPTION}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Help_objectGuardEvery" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 320 OffsetTop 320 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -346 } Color {{COLOR_TEXT}} Text "1 = every site; 2 = every second; 3 = every third; 4 = every fourth." "Font Size" {{SIZE_CAPTION_SMALL}} "Min Font Size" {{SIZE_CAPTION_SMALL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardEvery_1" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 292 OffsetLeft 292 PositionY 255 OffsetTop 255 SizeX 155 OffsetRight -447 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every site" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardEvery_2" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 459 OffsetLeft 459 PositionY 255 OffsetTop 255 SizeX 155 OffsetRight -614 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 2nd" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardEvery_3" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 626 OffsetLeft 626 PositionY 255 OffsetTop 255 SizeX 155 OffsetRight -781 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 3rd" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardEvery_4" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 793 OffsetLeft 793 PositionY 255 OffsetTop 255 SizeX 155 OffsetRight -948 SizeY 38 OffsetBottom -293 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Every 4th" } } } -TextWidgetClass { Name "Label_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 350 OffsetTop 350 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -376 } Color {{COLOR_TEXT}} Text "HQ participation (0-2)" "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 380 OffsetTop 380 SizeX 130 OffsetRight -158 SizeY 38 OffsetBottom -418 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 170 OffsetLeft 170 PositionY 380 OffsetTop 380 SizeX 110 OffsetRight -280 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +TextWidgetClass { Name "Label_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 350 OffsetTop 350 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -376 } Color {{COLOR_TEXT}} Text "HQ participation" "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardHQMode_0" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 380 OffsetTop 380 SizeX 304 OffsetRight -332 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Hold positions" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardHQMode_1" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 344 OffsetLeft 344 PositionY 380 OffsetTop 380 SizeX 304 OffsetRight -648 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Half respond to HQ" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_objectGuardHQMode_2" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 660 OffsetLeft 660 PositionY 380 OffsetTop 380 SizeX 304 OffsetRight -964 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "All respond to HQ" } } } TextWidgetClass { Name "Saved_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 421 OffsetTop 421 SizeX 936 OffsetRight -964 SizeY 22 OffsetBottom -443 } Color {{COLOR_TEXT}} Text "Waiting for saved value" "Font Size" {{SIZE_CAPTION}} "Min Font Size" {{SIZE_CAPTION}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -TextWidgetClass { Name "Help_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 445 OffsetTop 445 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -471 } Color {{COLOR_TEXT}} Text "0 = hold positions; 1 = half hold and half respond; 2 = all can respond." "Font Size" {{SIZE_CAPTION_SMALL}} "Min Font Size" {{SIZE_CAPTION_SMALL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardHQ_0" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 292 OffsetLeft 292 PositionY 380 OffsetTop 380 SizeX 210 OffsetRight -502 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Hold positions" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardHQ_1" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 514 OffsetLeft 514 PositionY 380 OffsetTop 380 SizeX 210 OffsetRight -724 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Half to HQ" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "GuardHQ_2" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 736 OffsetLeft 736 PositionY 380 OffsetTop 380 SizeX 210 OffsetRight -946 SizeY 38 OffsetBottom -418 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "All to HQ" } } } +TextWidgetClass { Name "Help_objectGuardHQMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 445 OffsetTop 445 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -471 } Color {{COLOR_TEXT}} Text "Choose which guards can leave their posts to respond to HQ." "Font Size" {{SIZE_CAPTION_SMALL}} "Min Font Size" {{SIZE_CAPTION_SMALL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } } } diff --git a/ui/admin_menu/pages/SettingsPage.layout.in b/ui/admin_menu/pages/SettingsPage.layout.in index 97dc16f4..f4d6a1b0 100644 --- a/ui/admin_menu/pages/SettingsPage.layout.in +++ b/ui/admin_menu/pages/SettingsPage.layout.in @@ -1,7 +1,7 @@ FrameWidgetClass { "Is Visible" {{VISIBLE_SettingsPage}} Name "SettingsPage" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 220 OffsetLeft 220 PositionY 160 OffsetTop 160 SizeX 1000 OffsetRight -1220 SizeY 532 OffsetBottom -692 } { TextWidgetClass { Name "Label_startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 4 OffsetTop 4 SizeX 456 OffsetRight -484 SizeY 22 OffsetBottom -26 } Color {{COLOR_TEXT}} Text "Next start (Prison or Crash)" "Font Size" {{SIZE_BODY}} "Min Font Size" {{SIZE_BODY}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 28 OffsetTop 28 SizeX 180 OffsetRight -208 SizeY 32 OffsetBottom -60 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 220 OffsetLeft 220 PositionY 28 OffsetTop 28 SizeX 100 OffsetRight -320 SizeY 32 OffsetBottom -60 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_startMode_prison" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 28 OffsetTop 28 SizeX 220 OffsetRight -248 SizeY 32 OffsetBottom -60 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Prison" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_startMode_crash" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 264 OffsetLeft 264 PositionY 28 OffsetTop 28 SizeX 220 OffsetRight -484 SizeY 32 OffsetBottom -60 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Crash" } } } TextWidgetClass { Name "Saved_startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 64 OffsetTop 64 SizeX 456 OffsetRight -484 SizeY 28 OffsetBottom -92 } Color {{COLOR_TEXT}} Text "Waiting for server" "Font Size" {{SIZE_CAPTION_SMALL}} "Min Font Size" {{SIZE_CAPTION_SMALL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Help_startMode" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 92 OffsetTop 92 SizeX 456 OffsetRight -484 SizeY 28 OffsetBottom -120 } Color {{COLOR_TEXT}} Text "Starting scenario for the next round." "Font Size" {{SIZE_CAPTION_SMALL}} "Min Font Size" {{SIZE_CAPTION_SMALL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { Name "Label_radioDefenceSeconds" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 4 OffsetTop 4 SizeX 456 OffsetRight -964 SizeY 22 OffsetBottom -26 } Color {{COLOR_TEXT}} Text "Radio defence (30-1800 seconds)" "Font Size" {{SIZE_BODY}} "Min Font Size" {{SIZE_BODY}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } diff --git a/ui/admin_menu/pages/WorldPage.layout.in b/ui/admin_menu/pages/WorldPage.layout.in index f89bda99..d8a65975 100644 --- a/ui/admin_menu/pages/WorldPage.layout.in +++ b/ui/admin_menu/pages/WorldPage.layout.in @@ -1,7 +1,7 @@ FrameWidgetClass { "Is Visible" {{VISIBLE_WorldPage}} Name "WorldPage" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 220 OffsetLeft 220 PositionY 160 OffsetTop 160 SizeX 1000 OffsetRight -1220 SizeY 532 OffsetBottom -692 } { TextWidgetClass { Name "WorldHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 6 OffsetTop 6 SizeX 936 OffsetRight -964 SizeY 50 OffsetBottom -56 } - Color {{COLOR_TEXT}} Text "Time and weather apply next round. View distance applies now. Press Apply to save." "Font Size" {{SIZE_INTRO}} "Min Font Size" {{SIZE_INTRO}} Wrap 1 + Color {{COLOR_TEXT}} Text "Time and weather apply next round. View distance applies now. Weather buttons save immediately; use Apply for edited values." "Font Size" {{SIZE_INTRO}} "Min Font Size" {{SIZE_INTRO}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } TextWidgetClass { @@ -131,8 +131,8 @@ ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_But } } TextWidgetClass { - Name "Label_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 322 OffsetTop 322 SizeX 368 OffsetRight -396 SizeY 28 OffsetBottom -350 } - Color {{COLOR_TEXT}} Text "Weather (authored / clear / overcast / rain)" "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties { + Name "Label_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 322 OffsetTop 322 SizeX 168 OffsetRight -196 SizeY 28 OffsetBottom -350 } + Color {{COLOR_TEXT}} Text "Weather" "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } @@ -144,34 +144,15 @@ TextWidgetClass { } TextWidgetClass { Name "Help_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 378 OffsetTop 378 SizeX 936 OffsetRight -964 SizeY 20 OffsetBottom -398 } - Color {{COLOR_MUTED}} Text "Use authored, clear, overcast or rain. Random chooses one of the three weather types next round." "Font Size" {{SIZE_CAPTION}} "Min Font Size" {{SIZE_CAPTION}} Wrap 1 + Color {{COLOR_MUTED}} Text "Map default keeps authored weather. Random chooses clear, overcast or rain each round." "Font Size" {{SIZE_CAPTION}} "Min Font Size" {{SIZE_CAPTION}} Wrap 1 FontProperties FontProperties { Font "{{FONT}}" } } -ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { - Name "weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 408 OffsetLeft 408 PositionY 322 OffsetTop 322 SizeX 240 OffsetRight -648 SizeY 42 OffsetBottom -364 } - components { - SCR_EditBoxComponent "{547290FFBD5B33E9}" { - m_sLabel "" - } - } - } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { - Name "Apply_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 660 OffsetLeft 660 PositionY 322 OffsetTop 322 SizeX 112 OffsetRight -772 SizeY 42 OffsetBottom -364 } - components { - SCR_ButtonTextComponent "{5548F0143AE99095}" { - m_sText "Apply" - } - } - } -ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { - Name "Random_weatherProfile" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 784 OffsetLeft 784 PositionY 322 OffsetTop 322 SizeX 180 OffsetRight -964 SizeY 42 OffsetBottom -364 } - components { - SCR_ButtonTextComponent "{5548F0143AE99095}" { - m_sText "Random" - } - } - } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_authored" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 208 OffsetLeft 208 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -348 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Map default" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_clear" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 362 OffsetLeft 362 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -502 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Clear" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_overcast" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 516 OffsetLeft 516 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -656 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Overcast" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_rain" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 670 OffsetLeft 670 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -810 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Rain" } } } +ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Choice_weatherProfile_random" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 824 OffsetLeft 824 PositionY 322 OffsetTop 322 SizeX 140 OffsetRight -964 SizeY 32 OffsetBottom -354 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Random" } } } TextWidgetClass { Name "Label_viewDistanceMetres" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 406 OffsetTop 406 SizeX 368 OffsetRight -396 SizeY 28 OffsetBottom -434 } Color {{COLOR_TEXT}} Text "View distance (500-10000 m / default)" "Font Size" {{SIZE_LABEL}} "Min Font Size" {{SIZE_LABEL}} Wrap 1 FontProperties FontProperties {