From 7a8a0addaa069658f781be762fa8cad3db03370a Mon Sep 17 00:00:00 2001 From: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Date: Fri, 26 Jul 2024 13:58:41 -0700 Subject: [PATCH 1/4] Fix Multiple Species Requirements (#595) # Description Fixed species requirements, they can now be used for ORs. Improved trait/loadout requirement code, made the colors per-item instead of on the commas too. Removed group exclusion requirements in favor of the aforementioned. --- .../Systems/CharacterRequirements.cs | 88 ++++--------------- .../Systems/CharacterRequirementsSystem.cs | 2 +- .../customization/character-requirements.ftl | 15 ++-- Resources/Locale/en-US/traits/traits.ftl | 7 +- .../Prototypes/DeltaV/Traits/altvision.yml | 14 ++- .../Prototypes/Loadouts/Jobs/engineering.yml | 6 +- .../Prototypes/Loadouts/Jobs/medical.yml | 27 ++++-- .../Prototypes/Loadouts/Jobs/science.yml | 5 +- .../Prototypes/Loadouts/Jobs/security.yml | 76 +++++++++------- .../Prototypes/Loadouts/Jobs/service.yml | 27 +++--- Resources/Prototypes/Loadouts/head.yml | 7 +- Resources/Prototypes/Loadouts/items.yml | 2 +- .../Prototypes/Loadouts/outerClothing.yml | 6 +- Resources/Prototypes/Loadouts/shoes.yml | 62 ++++++++----- Resources/Prototypes/Loadouts/species.yml | 18 ++-- Resources/Prototypes/Loadouts/uniform.yml | 56 +++++++----- .../Prototypes/Traits/inconveniences.yml | 12 ++- Resources/Prototypes/Traits/neutral.yml | 16 +--- Resources/Prototypes/Traits/skills.yml | 5 +- 19 files changed, 229 insertions(+), 222 deletions(-) diff --git a/Content.Shared/Customization/Systems/CharacterRequirements.cs b/Content.Shared/Customization/Systems/CharacterRequirements.cs index 134dca8e487..4e862aa69e3 100644 --- a/Content.Shared/Customization/Systems/CharacterRequirements.cs +++ b/Content.Shared/Customization/Systems/CharacterRequirements.cs @@ -121,17 +121,20 @@ public override bool IsValid(IPrototype prototype, JobPrototype job, HumanoidCha public sealed partial class CharacterSpeciesRequirement : CharacterRequirement { [DataField(required: true)] - public ProtoId Species; + public List> Species; public override bool IsValid(IPrototype prototype, JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, IEntityManager entityManager, IPrototypeManager prototypeManager, IConfigurationManager configManager, out FormattedMessage? reason) { + const string color = "green"; reason = FormattedMessage.FromMarkup(Loc.GetString("character-species-requirement", ("inverted", Inverted), - ("species", Loc.GetString($"species-name-{Species.ToString().ToLower()}")))); - return profile.Species == Species; + ("species", $"[color={color}]{string.Join($"[/color], [color={color}]", + Species.Select(s => Loc.GetString(prototypeManager.Index(s).Name)))}[/color]"))); + + return Species.Contains(profile.Species); } } @@ -150,8 +153,11 @@ public override bool IsValid(IPrototype prototype, JobPrototype job, HumanoidCha IEntityManager entityManager, IPrototypeManager prototypeManager, IConfigurationManager configManager, out FormattedMessage? reason) { - reason = FormattedMessage.FromMarkup(Loc.GetString("character-trait-requirement", ("inverted", Inverted), - ("traits", string.Join(", ", Traits.Select(t => Loc.GetString($"trait-name-{t}")))))); + const string color = "lightblue"; + reason = FormattedMessage.FromMarkup(Loc.GetString("character-trait-requirement", + ("inverted", Inverted), + ("traits", $"[color={color}]{string.Join($"[/color], [color={color}]", + Traits.Select(t => Loc.GetString($"trait-name-{t}")))}[/color]"))); return Traits.Any(t => profile.TraitPreferences.Contains(t.ToString())); } @@ -168,11 +174,15 @@ public sealed partial class CharacterLoadoutRequirement : CharacterRequirement public List> Loadouts; public override bool IsValid(IPrototype prototype, JobPrototype job, HumanoidCharacterProfile profile, - Dictionary playTimes, IEntityManager entityManager, IPrototypeManager prototypeManager, - IConfigurationManager configManager, out FormattedMessage? reason) + Dictionary playTimes, + IEntityManager entityManager, IPrototypeManager prototypeManager, IConfigurationManager configManager, + out FormattedMessage? reason) { - reason = FormattedMessage.FromMarkup(Loc.GetString("character-loadout-requirement", ("inverted", Inverted), - ("loadouts", string.Join(", ", Loadouts.Select(l => Loc.GetString($"loadout-{l}")))))); + const string color = "lightblue"; + reason = FormattedMessage.FromMarkup(Loc.GetString("character-loadout-requirement", + ("inverted", Inverted), + ("loadouts", $"[color={color}]{string.Join($"[/color], [color={color}]", + Loadouts.Select(l => Loc.GetString($"loadout-name-{l}")))}[/color]"))); return Loadouts.Any(l => profile.LoadoutPreferences.Contains(l.ToString())); } @@ -468,63 +478,3 @@ public override bool IsValid(IPrototype prototype, JobPrototype job, HumanoidCha } #endregion - -#region Prototype Groups - -/// -/// Requires the profile to not have any of the specified traits -/// -/// -/// Only works if you put this prototype in the denied prototypes' requirements too. -/// Can't be inverted, use -/// -[UsedImplicitly] -[Serializable, NetSerializable] -public sealed partial class TraitGroupExclusionRequirement : CharacterRequirement -{ - [DataField(required: true)] - public List> Prototypes; - - public override bool IsValid(IPrototype prototype, JobPrototype job, HumanoidCharacterProfile profile, - Dictionary playTimes, - IEntityManager entityManager, IPrototypeManager prototypeManager, IConfigurationManager configManager, - out FormattedMessage? reason) - { - var invalid = profile.TraitPreferences.Any(t => Prototypes.Contains(t)); - - reason = FormattedMessage.FromMarkup(Loc.GetString("character-trait-group-exclusion-requirement", - ("traits", string.Join(", ", Prototypes.Select(t => Loc.GetString($"trait-name-{t}")))))); - - return Inverted ? invalid : !invalid; - } -} - -/// -/// Requires the profile to not have any of the specified loadouts -/// -/// -/// Only works if you put this prototype in the denied prototypes' requirements too. -/// Can't be inverted, use -/// -[UsedImplicitly] -[Serializable, NetSerializable] -public sealed partial class LoadoutGroupExclusionRequirement : CharacterRequirement -{ - [DataField(required: true)] - public List> Prototypes; - - public override bool IsValid(IPrototype prototype, JobPrototype job, HumanoidCharacterProfile profile, - Dictionary playTimes, - IEntityManager entityManager, IPrototypeManager prototypeManager, IConfigurationManager configManager, - out FormattedMessage? reason) - { - var invalid = profile.LoadoutPreferences.Any(l => Prototypes.Contains(l)); - - reason = FormattedMessage.FromMarkup(Loc.GetString("character-loadout-group-exclusion-requirement", - ("loadouts", string.Join(", ", Prototypes.Select(l => Loc.GetString($"loadout-{l}")))))); - - return Inverted ? invalid : !invalid; - } -} - -#endregion diff --git a/Content.Shared/Customization/Systems/CharacterRequirementsSystem.cs b/Content.Shared/Customization/Systems/CharacterRequirementsSystem.cs index e93c933a6aa..f21971b5e68 100644 --- a/Content.Shared/Customization/Systems/CharacterRequirementsSystem.cs +++ b/Content.Shared/Customization/Systems/CharacterRequirementsSystem.cs @@ -34,7 +34,7 @@ public bool CheckRequirementsValid(IPrototype prototype, List character-species-requirement = You must {$inverted -> [true] not be *[other] be -} a [color=green]{$species}[/color] +} a {$species} character-trait-requirement = You must {$inverted -> [true] not have *[other] have -} one of these traits: [color=lightblue]{$traits}[/color] +} one of these traits: {$traits} +character-loadout-requirement = You must {$inverted -> + [true] not have + *[other] have +} one of these loadouts: {$loadouts} character-backpack-type-requirement = You must {$inverted -> [true] not use *[other] use -} a [color=lightblue]{$type}[/color] as your bag +} a [color=brown]{$type}[/color] as your bag character-clothing-preference-requirement = You must {$inverted -> [true] not wear *[other] wear -} a [color=lightblue]{$type}[/color] +} a [color=white]{$type}[/color] character-job-requirement = You must {$inverted -> [true] not be @@ -34,6 +38,3 @@ character-timer-overall-insufficient = You require [color=yellow]{TOSTRING($time character-timer-overall-too-high = You require [color=yellow]{TOSTRING($time, "0")}[/color] fewer minutes of playtime character-timer-role-insufficient = You require [color=yellow]{TOSTRING($time, "0")}[/color] more minutes with [color={$departmentColor}]{$job}[/color] character-timer-role-too-high = You require[color=yellow] {TOSTRING($time, "0")}[/color] fewer minutes with [color={$departmentColor}]{$job}[/color] - -character-trait-group-exclusion-requirement = You cannot have one of the following traits if you select this: {$traits} -character-loadout-group-exclusion-requirement = You cannot have one of the following loadouts if you select this: {$loadouts} diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index b5a8b245e35..cd5d1782ba3 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -35,14 +35,11 @@ trait-description-Stutter = You t-t-talk with a bit of a s-s-stutter... trait-name-Snoring = Snoring trait-description-Snoring = You will snore while sleeping. -trait-name-NormalVisionHarpy = Trichromat Modification -trait-description-NormalVisionHarpy = Your eyes have been modified by means of advanced medicine to see in the standard colors of Red, Green, and Blue. - trait-name-Southern = Southern Drawl trait-description-Southern = You have a different way of speakin'. -trait-name-NormalVisionVulpkanin = Trichromat Modification -trait-description-NormalVisionVulpkanin = Your eyes have been modified by means of advanced medicine to see in the standard colors of Red, Green, and Blue. +trait-name-NormalVision = Trichromat Modification +trait-description-NormalVision = Your eyes have been modified by means of advanced medicine to see in the standard colors of Red, Green, and Blue. trait-name-Thieving = Thieving trait-description-Thieving = diff --git a/Resources/Prototypes/DeltaV/Traits/altvision.yml b/Resources/Prototypes/DeltaV/Traits/altvision.yml index 1257c1eeb09..97742d98ce5 100644 --- a/Resources/Prototypes/DeltaV/Traits/altvision.yml +++ b/Resources/Prototypes/DeltaV/Traits/altvision.yml @@ -5,10 +5,9 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Vulpkanin - - !type:CharacterSpeciesRequirement - inverted: true - species: Harpy + species: + - Vulpkanin + - Harpy - !type:CharacterTraitRequirement inverted: true traits: @@ -23,10 +22,9 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Vulpkanin - - !type:CharacterSpeciesRequirement - inverted: true - species: Harpy + species: + - Vulpkanin + - Harpy - !type:CharacterTraitRequirement inverted: true traits: diff --git a/Resources/Prototypes/Loadouts/Jobs/engineering.yml b/Resources/Prototypes/Loadouts/Jobs/engineering.yml index d91814e34d1..06ce4cbf8c3 100644 --- a/Resources/Prototypes/Loadouts/Jobs/engineering.yml +++ b/Resources/Prototypes/Loadouts/Jobs/engineering.yml @@ -6,7 +6,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - StationEngineer @@ -54,7 +55,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - StationEngineer diff --git a/Resources/Prototypes/Loadouts/Jobs/medical.yml b/Resources/Prototypes/Loadouts/Jobs/medical.yml index e9e6aa04231..edf51747d00 100644 --- a/Resources/Prototypes/Loadouts/Jobs/medical.yml +++ b/Resources/Prototypes/Loadouts/Jobs/medical.yml @@ -49,7 +49,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - MedicalDoctor @@ -67,7 +68,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - MedicalDoctor @@ -85,7 +87,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - MedicalDoctor @@ -103,7 +106,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - MedicalDoctor @@ -121,7 +125,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - MedicalDoctor @@ -139,7 +144,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - MedicalDoctor @@ -157,7 +163,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - MedicalDoctor @@ -211,7 +218,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Paramedic @@ -262,7 +270,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - MedicalDoctor diff --git a/Resources/Prototypes/Loadouts/Jobs/science.yml b/Resources/Prototypes/Loadouts/Jobs/science.yml index e281b51d036..fb382a8c2ca 100644 --- a/Resources/Prototypes/Loadouts/Jobs/science.yml +++ b/Resources/Prototypes/Loadouts/Jobs/science.yml @@ -21,7 +21,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Scientist @@ -116,7 +117,7 @@ items: - ClothingEyesEyepatchHudDiag -## Robes +# Robes - type: loadout id: LoadoutOuterRobeTechPriest category: Outer diff --git a/Resources/Prototypes/Loadouts/Jobs/security.yml b/Resources/Prototypes/Loadouts/Jobs/security.yml index 29e1850db51..2809c9c1ae5 100644 --- a/Resources/Prototypes/Loadouts/Jobs/security.yml +++ b/Resources/Prototypes/Loadouts/Jobs/security.yml @@ -1,4 +1,4 @@ -## Uniforms +# Uniforms - type: loadout id: LoadoutSecurityUniformJumpsuitBlue category: Jobs @@ -7,7 +7,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - SecurityOfficer @@ -24,7 +25,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - SecurityOfficer @@ -93,7 +95,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - SecurityOfficer @@ -120,7 +123,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Warden @@ -135,7 +139,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Warden @@ -198,7 +203,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Detective @@ -216,7 +222,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Detective @@ -225,7 +232,7 @@ - HeadOfSecurity items: - ClothingUniformJumpsuitSecSummer -## Mask +# Mask - type: loadout id: LoadoutSecurityMaskGasSwat category: Jobs @@ -239,7 +246,7 @@ items: - ClothingMaskGasSwat -## Shoes +# Shoes - type: loadout id: LoadoutSecurityShoesJackboots category: Jobs @@ -247,7 +254,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Detective @@ -258,7 +266,7 @@ items: - ClothingShoesBootsJack -## Eyes +# Eyes - type: loadout id: LoadoutSecurityEyesHudSecurity category: Jobs @@ -307,7 +315,7 @@ items: - ClothingEyesPrescriptionHudSecurity -## Head +# Head - type: loadout id: LoadoutSecurityHeadHatBeret category: Jobs @@ -337,7 +345,7 @@ items: - ClothingHeadHelmetInsulated -## Belt +# Belt - type: loadout id: LoadoutSecurityBeltWebbing category: Jobs @@ -354,22 +362,24 @@ items: - ClothingBeltSecurityWebbingFilled -## Species -#- type: loadout ##Uncomment this and reassess points when we can make it replace the secoff duty pistol -# id: LoadoutSecurityEquipmentTruncheon -# category: Jobs -# cost: 8 ## TODO: Make this replace the secoff handgun, and thus also make it cheaper -# requirements: -# - !type:CharacterJobRequirement -# jobs: -# - SecurityOfficer -# - Warden -# - HeadOfSecurity -# - Brigmedic -# - !type:CharacterPlaytimeRequirement -# tracker: JobSecurityOfficer -# min: 36000 # 10 hours -# - !type:CharacterSpeciesRequirement -# species: Oni -# items: -# - Truncheon +# TODO: Make this replace the secoff handgun and make it cheaper +# # Species +# - type: loadout +# id: LoadoutSecurityEquipmentTruncheon +# category: Jobs +# cost: 8 +# requirements: +# - !type:CharacterJobRequirement +# jobs: +# - SecurityOfficer +# - Warden +# - HeadOfSecurity +# - Brigmedic +# - !type:CharacterPlaytimeRequirement +# tracker: JobSecurityOfficer +# min: 36000 # 10 hours +# - !type:CharacterSpeciesRequirement +# species: +# - Oni +# items: +# - Truncheon diff --git a/Resources/Prototypes/Loadouts/Jobs/service.yml b/Resources/Prototypes/Loadouts/Jobs/service.yml index 1a2059f0be1..0d3f1dc869f 100644 --- a/Resources/Prototypes/Loadouts/Jobs/service.yml +++ b/Resources/Prototypes/Loadouts/Jobs/service.yml @@ -1,4 +1,4 @@ -## Clown +# Clown - type: loadout id: LoadoutServiceClownOutfitJester category: Jobs @@ -27,7 +27,7 @@ - ClothingHeadHatJesterAlt - ClothingShoesJester -## Bartender +# Bartender - type: loadout id: LoadoutServiceBartenderUniformPurple category: Jobs @@ -40,7 +40,7 @@ items: - ClothingUniformJumpsuitBartenderPurple -## Botanist +# Botanist - type: loadout id: LoadoutServiceBotanistUniformOveralls category: Jobs @@ -53,7 +53,7 @@ items: - ClothingUniformOveralls -## Lawyer +# Lawyer - type: loadout id: LoadoutServiceLawyerUniformBlueSuit category: Jobs @@ -62,7 +62,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Lawyer @@ -89,7 +90,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Lawyer @@ -116,7 +118,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Lawyer @@ -143,7 +146,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Lawyer @@ -174,7 +178,7 @@ items: - ClothingUniformJumpsuitJournalist -## Reporter +# Reporter - type: loadout id: LoadoutServiceReporterUniformDetectivesuit category: Jobs @@ -183,7 +187,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Reporter @@ -202,7 +207,7 @@ items: - ClothingUniformJumpskirtDetective -## Musician +# Musician - type: loadout id: LoadoutItemSynthesizerInstrument category: Jobs diff --git a/Resources/Prototypes/Loadouts/head.yml b/Resources/Prototypes/Loadouts/head.yml index 25cb4dadf11..9ee23f49e9f 100644 --- a/Resources/Prototypes/Loadouts/head.yml +++ b/Resources/Prototypes/Loadouts/head.yml @@ -1,4 +1,4 @@ -## Hats +# Hats - type: loadout id: LoadoutHeadBeaverHat category: Head @@ -70,7 +70,8 @@ exclusive: true items: - ClothingHeadHatBellhop -## Color Hats + +# Color Hats - type: loadout id: LoadoutHeadHatBluesoft category: Head @@ -199,7 +200,7 @@ items: - ClothingHeadHatYellowsoftFlipped -## Headbands +# Headbands - type: loadout id: LoadoutHeadBandBlack category: Head diff --git a/Resources/Prototypes/Loadouts/items.yml b/Resources/Prototypes/Loadouts/items.yml index 072061d2e28..35dcbf7b9ed 100644 --- a/Resources/Prototypes/Loadouts/items.yml +++ b/Resources/Prototypes/Loadouts/items.yml @@ -69,7 +69,7 @@ items: - Matchbox -## Instruments +# Instruments - type: loadout id: LoadoutItemMicrophoneInstrument category: Items diff --git a/Resources/Prototypes/Loadouts/outerClothing.yml b/Resources/Prototypes/Loadouts/outerClothing.yml index a5932214ce9..c52f35b0f5d 100644 --- a/Resources/Prototypes/Loadouts/outerClothing.yml +++ b/Resources/Prototypes/Loadouts/outerClothing.yml @@ -54,7 +54,7 @@ items: - ClothingOuterVestValet -## Letterman Jackets +# Letterman Jackets - type: loadout id: LoadoutOuterCoatLettermanBlue category: Outer @@ -69,7 +69,7 @@ items: - ClothingOuterCoatLettermanRed -## MNK +# MNK - type: loadout id: LoadoutOuterCoatMNKWhiteHoodie category: Outer @@ -91,7 +91,7 @@ items: - ClothingOuterCoatMNKBlackJacket -## Contractor Jackets +# Contractor Jackets - type: loadout id: LoadoutOuterCorporateJacket category: Outer diff --git a/Resources/Prototypes/Loadouts/shoes.yml b/Resources/Prototypes/Loadouts/shoes.yml index 0f493cc5431..bdea2b57ad1 100644 --- a/Resources/Prototypes/Loadouts/shoes.yml +++ b/Resources/Prototypes/Loadouts/shoes.yml @@ -7,7 +7,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesColorBlack @@ -19,7 +20,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesColorBlue @@ -31,7 +33,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesColorBrown @@ -43,7 +46,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesColorGreen @@ -55,7 +59,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesColorOrange @@ -67,7 +72,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesColorPurple @@ -79,7 +85,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesColorRed @@ -91,7 +98,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesColorWhite @@ -103,7 +111,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesColorYellow @@ -115,11 +124,12 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesGeta -## Boots +# Boots - type: loadout id: LoadoutShoesBootsWork category: Shoes @@ -128,7 +138,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesBootsWork @@ -140,7 +151,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesBootsLaceup @@ -152,7 +164,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesBootsWinter @@ -164,7 +177,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesBootsCowboyBrown @@ -176,7 +190,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesBootsCowboyBlack @@ -188,7 +203,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesBootsCowboyWhite @@ -200,7 +216,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesBootsCowboyFancy @@ -215,7 +232,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Clown @@ -228,7 +246,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesLeather @@ -240,6 +259,7 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy items: - ClothingShoesMiscWhite diff --git a/Resources/Prototypes/Loadouts/species.yml b/Resources/Prototypes/Loadouts/species.yml index 1d2fb58dc0a..8c7bd228589 100644 --- a/Resources/Prototypes/Loadouts/species.yml +++ b/Resources/Prototypes/Loadouts/species.yml @@ -4,9 +4,9 @@ cost: 0 requirements: - !type:CharacterSpeciesRequirement - species: SlimePerson - - !type:CharacterSpeciesRequirement - species: Vox + species: + - SlimePerson + - Vox items: - EmergencyNitrogenTankFilled @@ -16,9 +16,9 @@ cost: 1 requirements: - !type:CharacterSpeciesRequirement - species: SlimePerson - - !type:CharacterSpeciesRequirement - species: Vox + species: + - SlimePerson + - Vox items: - ExtendedEmergencyNitrogenTankFilled @@ -28,8 +28,8 @@ cost: 3 requirements: - !type:CharacterSpeciesRequirement - species: SlimePerson - - !type:CharacterSpeciesRequirement - species: Vox + species: + - SlimePerson + - Vox items: - DoubleEmergencyNitrogenTankFilled diff --git a/Resources/Prototypes/Loadouts/uniform.yml b/Resources/Prototypes/Loadouts/uniform.yml index c6838b97d33..eb46acc2f60 100644 --- a/Resources/Prototypes/Loadouts/uniform.yml +++ b/Resources/Prototypes/Loadouts/uniform.yml @@ -6,7 +6,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -25,7 +26,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -52,7 +54,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -79,7 +82,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -106,7 +110,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -133,7 +138,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -160,7 +166,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -187,7 +194,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -214,7 +222,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -241,7 +250,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -268,7 +278,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -295,7 +306,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -322,7 +334,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -349,7 +362,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -376,7 +390,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -403,7 +418,8 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Harpy + species: + - Harpy - !type:CharacterJobRequirement jobs: - Passenger @@ -420,7 +436,7 @@ jobs: - Passenger -## Kendo +# Kendo - type: loadout id: LoadoutUniformKendoHakama category: Uniform @@ -437,7 +453,7 @@ items: - ClothingUniformMartialGi -## Kimono +# Kimono - type: loadout id: LoadoutClothingKimonoBlue category: Uniform @@ -478,7 +494,7 @@ items: - ClothingKimonoGreen -## Gakuran +# Gakuran - type: loadout id: LoadoutUniformSchoolGakuranBlack category: Uniform @@ -487,7 +503,7 @@ items: - ClothingUniformSchoolGakuranBlack -## MNK Uniforms +# MNK Uniforms - type: loadout id: LoadoutClothingMNKOfficeSkirt category: Uniform diff --git a/Resources/Prototypes/Traits/inconveniences.yml b/Resources/Prototypes/Traits/inconveniences.yml index 8988475fd35..2dcc30cd97c 100644 --- a/Resources/Prototypes/Traits/inconveniences.yml +++ b/Resources/Prototypes/Traits/inconveniences.yml @@ -36,8 +36,10 @@ category: Mental points: 1 requirements: - - !type:TraitGroupExclusionRequirement - prototypes: [ Foreigner ] + - !type:CharacterTraitRequirement + inverted: true + traits: + - Foreigner components: - type: ForeignerTrait cantUnderstand: false # Allows to understand @@ -48,8 +50,10 @@ category: Mental points: 2 requirements: # TODO: Add a requirement to know at least 1 non-gc language - - !type:TraitGroupExclusionRequirement - prototypes: [ ForeignerLight ] + - !type:CharacterTraitRequirement + inverted: true + traits: + - ForeignerLight components: - type: ForeignerTrait baseTranslator: TranslatorForeigner diff --git a/Resources/Prototypes/Traits/neutral.yml b/Resources/Prototypes/Traits/neutral.yml index 648e6f79e48..28f6adc170a 100644 --- a/Resources/Prototypes/Traits/neutral.yml +++ b/Resources/Prototypes/Traits/neutral.yml @@ -29,21 +29,13 @@ - type: SouthernAccent - type: trait - id: NormalVisionHarpy + id: NormalVision category: Visual points: -1 requirements: - !type:CharacterSpeciesRequirement - species: Harpy - components: - - type: NormalVision - -- type: trait - id: NormalVisionVulpkanin - category: Visual - points: -1 - requirements: - - !type:CharacterSpeciesRequirement - species: Vulpkanin + species: + - Harpy + - Vulpkanin components: - type: NormalVision diff --git a/Resources/Prototypes/Traits/skills.yml b/Resources/Prototypes/Traits/skills.yml index 988307f58e4..2cfbd244e7e 100644 --- a/Resources/Prototypes/Traits/skills.yml +++ b/Resources/Prototypes/Traits/skills.yml @@ -15,7 +15,7 @@ components: - type: LightweightDrunk boozeStrengthMultiplier: 0.5 - + - type: trait id: Thieving category: Physical @@ -29,4 +29,5 @@ requirements: - !type:CharacterSpeciesRequirement inverted: true - species: Felinid + species: + - Felinid From 910b4c3c4e83e07fe2e22687e74c940604e97eb1 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sat, 27 Jul 2024 02:00:24 -0400 Subject: [PATCH 2/4] Refactor Ramping Event Scheduler (#592) # Description The Ramping Event Scheduler originally followed a more or less linear trend of "Slow events" to "Fast events", reaching its absolute maximum event speeds at EXACTLY the point set by CVar. Additionally, the timer CVars were set on initialization, which meant that event times could not be modified live, thus voiding the entire benefit of having the CVars in the first place. I have completely rewritten the entire timer function to use a logistic curve, which provides varying levels of transition rate from "Start", "Mid", and "End". Shifts begin at their normal speed, and will accelerate quickly until it reaches the "Midround", at which point event timer growth begins to slow dramatically. Additionally, the timer function accounts for both settings in Gamemode, as well as in CVar. Minimum Time and Maximum Time are also now separate from each other, and can be truly independently modified. Finally, to show what this system is capable of, I've added a variant "Long Survival" that can be set via admeme. # Media The new "Ramping Event Timer Equation". I have intentionally left this public just in case anyone wants to use it for a different system. ![image](https://github.com/user-attachments/assets/50557a21-76ae-4b08-9cb1-edd8d991712d) # Changelog :cl: - add: Long Survival has been added as a new Game mode. --------- Signed-off-by: VMSolidus Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> --- .../RampingStationEventSchedulerComponent.cs | 36 ++++++---- .../RampingStationEventSchedulerSystem.cs | 65 ++++++++++++------- Content.Shared/CCVar/CCVars.cs | 27 ++++++-- .../game-presets/preset-survival.ftl | 3 + Resources/Prototypes/GameRules/roundstart.yml | 12 +++- Resources/Prototypes/game_presets.yml | 11 ++++ 6 files changed, 109 insertions(+), 45 deletions(-) diff --git a/Content.Server/StationEvents/Components/RampingStationEventSchedulerComponent.cs b/Content.Server/StationEvents/Components/RampingStationEventSchedulerComponent.cs index 282ee5b612a..673c82b20f6 100644 --- a/Content.Server/StationEvents/Components/RampingStationEventSchedulerComponent.cs +++ b/Content.Server/StationEvents/Components/RampingStationEventSchedulerComponent.cs @@ -4,38 +4,50 @@ public sealed partial class RampingStationEventSchedulerComponent : Component { /// - /// The maximum number by which the event rate will be multiplied when shift time reaches the end time. + /// Multiplies the End Time of the Ramping Event curve. Lower this number for shorter, hectic shifts, increase this number for longer shifts. /// [DataField] - public float ChaosModifier = 3f; + public float ShiftChaosModifier = 1f; /// - /// The minimum number by which the event rate will be multiplied when the shift has just begun. + /// The number by which all event delays will be multiplied. Unlike chaos, remains constant throughout the shift. /// [DataField] - public float StartingChaosRatio = 0.1f; + public float EventDelayModifier = 1f; + /// - /// The number by which all event delays will be multiplied. Unlike chaos, remains constant throughout the shift. + /// Shift Length(in Minutes) is directly reduced by this value. /// [DataField] - public float EventDelayModifier = 1f; + public float ShiftLengthOffset = 0f; + + /// + /// Minimum time between events is decreased by this value. + /// + [DataField] + public float MinimumEventTimeOffset = 0f; /// - /// The number by which average expected shift length is multiplied. Higher values lead to slower chaos growth. + /// Maximum time between events is decreased by this value. /// - public float ShiftLengthModifier = 1f; + + [DataField] + public float MaximumEventTimeOffset = 0f; + + [DataField] + public bool IgnoreMinimumTimes = false; // Everything below is overridden in the RampingStationEventSchedulerSystem based on CVars - [DataField("endTime"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float EndTime; - [DataField("maxChaos"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float MaxChaos; - [DataField("startingChaos"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float StartingChaos; - [DataField("timeUntilNextEvent"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float TimeUntilNextEvent; } diff --git a/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs b/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs index aa0c9b214b4..e24578fdac9 100644 --- a/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs @@ -2,10 +2,10 @@ using Content.Server.GameTicking.Rules; using Content.Server.GameTicking.Rules.Components; using Content.Server.StationEvents.Components; -using Content.Server.StationEvents.Events; using Content.Shared.CCVar; using Robust.Shared.Configuration; using Robust.Shared.Random; +using Robust.Shared.Utility; namespace Content.Server.StationEvents; @@ -16,30 +16,35 @@ public sealed class RampingStationEventSchedulerSystem : GameRuleSystem + /// A logistic curve equation used to smooth out the transition between event times at shift start, vs. shift end. + /// Depending on the settings used, the end time might not necessarily be the point at which timers hit the floor. + /// It is after all, an asymptote. + /// + /// + /// + /// + /// + public float RampingEventTimeEquation(RampingStationEventSchedulerComponent component, float startTime, float endTimeOffset = 0) { - var roundTime = (float) _gameTicker.RoundDuration().TotalSeconds; - if (roundTime > component.EndTime) - return component.MaxChaos; - - return component.MaxChaos / component.EndTime * roundTime + component.StartingChaos; + var endTime = Math.Clamp(endTimeOffset, 0.1f, startTime - 1); + var shiftLength = Math.Max(1, _cfg.GetCVar(CCVars.EventsRampingAverageEndTime) - component.ShiftLengthOffset); + return 2 * endTime + / (1 + + MathF.Exp(_cfg.GetCVar(CCVars.EventsRampingAverageChaos) + * component.ShiftChaosModifier + / shiftLength + * endTime + * (float) _gameTicker.RoundDuration().TotalSeconds + / 60)) + + (startTime - endTime); } protected override void Started(EntityUid uid, RampingStationEventSchedulerComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) { base.Started(uid, component, gameRule, args); - var avgChaos = _cfg.GetCVar(CCVars.EventsRampingAverageChaos) * component.ChaosModifier; - var avgTime = _cfg.GetCVar(CCVars.EventsRampingAverageEndTime) * component.ShiftLengthModifier; - - // Worlds shittiest probability distribution - // Got a complaint? Send them to - component.MaxChaos = avgChaos * _random.NextFloat(0.75f, 1.25f); - // This is in minutes, so *60 for seconds (for the chaos calc) - component.EndTime = avgTime * _random.NextFloat(0.75f, 1.25f) * 60f; - component.StartingChaos = component.MaxChaos * component.StartingChaosRatio; - - PickNextEventTime(uid, component); + PickNextEventTime(component); } public override void Update(float frameTime) @@ -61,17 +66,31 @@ public override void Update(float frameTime) return; } - PickNextEventTime(uid, scheduler); + PickNextEventTime(scheduler); _event.RunRandomEvent(); } } - private void PickNextEventTime(EntityUid uid, RampingStationEventSchedulerComponent component) + private void PickNextEventTime(RampingStationEventSchedulerComponent component) { + // In case of server hosts being silly and setting maximum time to be lower than minimum time, sanity check the scheduler inputs and sort them by Min/Max + var minimumTime = MathF.Min(_cfg.GetCVar(CCVars.GameEventsRampingMinimumTime) + - _cfg.GetCVar(CCVars.GameEventsRampingMinimumTimeOffset) + - component.MinimumEventTimeOffset, _cfg.GetCVar(CCVars.GameEventsRampingMaximumTime) + - _cfg.GetCVar(CCVars.GameEventsRampingMaximumTimeOffset) + - component.MaximumEventTimeOffset); + + var maximumTime = MathF.Max(_cfg.GetCVar(CCVars.GameEventsRampingMinimumTime) + - _cfg.GetCVar(CCVars.GameEventsRampingMinimumTimeOffset) + - component.MinimumEventTimeOffset, _cfg.GetCVar(CCVars.GameEventsRampingMaximumTime) + - _cfg.GetCVar(CCVars.GameEventsRampingMaximumTimeOffset) + - component.MaximumEventTimeOffset); + + // Just in case someone messed up their math, set it to between 6 and 12 seconds. This absolutely isn't ideal component.TimeUntilNextEvent = _random.NextFloat( - _cfg.GetCVar(CCVars.GameEventsRampingMinimumTime), - _cfg.GetCVar(CCVars.GameEventsRampingMaximumTime)); + RampingEventTimeEquation(component, MathF.Max(0.1f, minimumTime)), + RampingEventTimeEquation(component, MathF.Max(0.2f, maximumTime))); - component.TimeUntilNextEvent *= component.EventDelayModifier / GetChaosModifier(uid, component); + component.TimeUntilNextEvent *= component.EventDelayModifier; } } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 9c91e440d32..04e680390ce 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -119,7 +119,7 @@ public static readonly CVarDef /// Max chaos chosen for a round will deviate from this /// public static readonly CVarDef - EventsRampingAverageChaos = CVarDef.Create("events.ramping_average_chaos", 6f, CVar.ARCHIVE | CVar.SERVERONLY); + EventsRampingAverageChaos = CVarDef.Create("events.ramping_average_chaos", 0.8f, CVar.ARCHIVE | CVar.SERVERONLY); /* * Game @@ -186,16 +186,29 @@ public static readonly CVarDef // 25 Minutes GameEventsBasicMaximumTime = CVarDef.Create("game.events_basic_maximum_time", 1500, CVar.SERVERONLY); /// - /// Minimum time between Ramping station events in seconds + /// Minimum time between Ramping station events in minutes /// - public static readonly CVarDef // 4 Minutes - GameEventsRampingMinimumTime = CVarDef.Create("game.events_ramping_minimum_time", 240, CVar.SERVERONLY); + public static readonly CVarDef // 8 Minutes + GameEventsRampingMinimumTime = CVarDef.Create("game.events_ramping_minimum_time", 8f, CVar.SERVERONLY); /// - /// Maximum time between Ramping station events in seconds + /// After the shift's desired "Endpoint" is reached, the minimum time between events is RampingMinimumTime - Offset. /// - public static readonly CVarDef // 12 Minutes - GameEventsRampingMaximumTime = CVarDef.Create("game.events_ramping_maximum_time", 720, CVar.SERVERONLY); + + public static readonly CVarDef + GameEventsRampingMinimumTimeOffset = CVarDef.Create("game.events_ramping_minimum_time_offset", 6f, CVar.SERVERONLY); + + /// + /// Maximum time between Ramping station events in minutes + /// + public static readonly CVarDef // 16 Minutes + GameEventsRampingMaximumTime = CVarDef.Create("game.events_ramping_maximum_time", 16f, CVar.SERVERONLY); + + /// + /// After the shift's desired "Endpoint" is reached, the maximum time between events is RampingMaximumTime - Offset. + /// + public static readonly CVarDef + GameEventsRampingMaximumTimeOffset = CVarDef.Create("game.events_ramping_maximum_time_offset", 10f, CVar.SERVERONLY); /// /// diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-survival.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-survival.ftl index 0b8fa83ae8b..10e6a4a24f2 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-survival.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-survival.ftl @@ -3,3 +3,6 @@ survival-description = No internal threats, but how long can the station survive hellshift-title = Hellshift hellshift-description = The station rolled a "one" in a luck check. Can the crew make it to the end? + +longsurvival-title = Long Survival +longsurvival-description = Survival, but two hours longer. Event growth is stretched over a vastly greater length of time. diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 0af55a7f9d0..e046b871fa7 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -132,15 +132,21 @@ components: - type: RampingStationEventScheduler +- type: entity + id: LongSurvivalStationEventScheduler + parent: BaseGameRule + noSpawn: true + components: + - type: RampingStationEventScheduler + shiftLengthOffset: -120 + - type: entity id: HellshiftStationEventScheduler parent: BaseGameRule noSpawn: true components: - type: RampingStationEventScheduler - chaosModifier: 4 # By default, one event each 30-10 seconds after two hours. Changing CVars will cause this to deviate. - startingChaosRatio: 0.025 # Starts as slow as survival, but quickly ramps up - shiftLengthModifier: 2.5 + shiftChaosModifier: 4 #30 minute HELL SHIFT # variation passes - type: entity diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index 7d7169bf10a..7e83f224433 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -20,6 +20,17 @@ - HellshiftStationEventScheduler - BasicRoundstartVariation +- type: gamePreset + id: SurvivalLonger + alias: + - longsurvival + showInVote: true + name: longsurvival-title + description: longsurvival-description + rules: + - LongSurvivalStationEventScheduler + - BasicRoundstartVariation + - type: gamePreset id: AllAtOnce name: all-at-once-title From c505552483d36fc4409545e12b26fdfbdbe400ea Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 27 Jul 2024 06:00:48 +0000 Subject: [PATCH 3/4] Automatic Changelog Update (#592) --- Resources/Changelog/Changelog.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6972811da9a..d019ca79758 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -4652,3 +4652,9 @@ Entries: connection. Attached grids now permit sound to travel through. id: 6184 time: '2024-07-26T20:09:52.0000000+00:00' +- author: VMSolidus + changes: + - type: Add + message: Long Survival has been added as a new Game mode. + id: 6185 + time: '2024-07-27T06:00:24.0000000+00:00' From 143b1d58d24a0cd9c5c67757a74baadd628789a4 Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Sat, 27 Jul 2024 10:09:47 +0200 Subject: [PATCH 4/4] Fix Script Folder in Readme for Linux (#598) # Description The folder for the linux scripts is wrong. Thought I might as well fix it, while I'm at it. --------- Signed-off-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f102318611f..e843cb34ef4 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,8 @@ We provide some scripts shown below to make the job easier. > 1. Clone this repository > 2. Run `git submodule update --init --recursive` in a terminal to download the engine -> 3. Run `Scripts/bat/buildAllDebug.sh` after making any changes to the source -> 4. Run `Scripts/bat/runQuickAll.sh` to launch the client and the server +> 3. Run `Scripts/sh/buildAllDebug.sh` after making any changes to the source +> 4. Run `Scripts/sh/runQuickAll.sh` to launch the client and the server > 5. Connect to localhost in the client and play ### MacOS