From 8b6f1d24055909a62165893b0bf68ec171403abf Mon Sep 17 00:00:00 2001 From: OCO_Omega <42233446+OCOtheOmega@users.noreply.github.com> Date: Sun, 17 Dec 2023 09:54:13 +0300 Subject: [PATCH] Station Goals (#10) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description - [x] Station goals https://github.com/Simple-Station/Parkstation-Friendly-Chainsaw/issues/2 # Media ![изображение](https://github.com/Simple-Station/Parkstation-Friendly-Chainsaw/assets/42233446/6e9a3a84-88be-489e-8095-6cd40f7c026f) ![изображение](https://github.com/Simple-Station/Parkstation-Friendly-Chainsaw/assets/42233446/fe44948e-766b-4fb0-8b5d-fe0957c94255) ![изображение](https://github.com/Simple-Station/Parkstation-Friendly-Chainsaw/assets/42233446/9c56b9bb-f3fd-4bd5-9436-c6e397a4622f) # Changelog :cl: DEATHB4DEFEAT - add: Added station goals that get sent to the Command fax machine at the start of every shift --------- Co-authored-by: DEATHB4DEFEAT Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> --- Content.Client/Entry/EntryPoint.cs | 1 + .../Corvax/GameTicking/RoundEndedEvent.cs | 13 + .../Corvax/GameTicking/RoundStartedEvent.cs | 11 + .../Corvax/StationGoal/StationGoalCommand.cs | 55 +++++ .../StationGoal/StationGoalPaperComponent.cs | 11 + .../StationGoal/StationGoalPaperSystem.cs | 113 +++++++++ .../StationGoal/StationGoalPrototype.cs | 12 + Content.Server/Fax/FaxMachineComponent.cs | 9 + .../GameTicking/GameTicker.RoundFlow.cs | 3 + Content.Shared/Corvax/CCVars/CCCVars.cs | 18 ++ .../station-goal/station-goal-command.ftl | 6 + .../corvax/station-goal/station-goals.ftl | 224 ++++++++++++++++++ .../corvax/entities/objects/misc/paper.ftl | 2 + .../Corvax/Entities/Objects/Misc/paper.yml | 11 + .../Prototypes/Corvax/Objectives/goals.yml | 84 +++++++ .../Structures/Machines/fax_machine.yml | 5 +- 16 files changed, 576 insertions(+), 2 deletions(-) create mode 100644 Content.Server/Corvax/GameTicking/RoundEndedEvent.cs create mode 100644 Content.Server/Corvax/GameTicking/RoundStartedEvent.cs create mode 100644 Content.Server/Corvax/StationGoal/StationGoalCommand.cs create mode 100644 Content.Server/Corvax/StationGoal/StationGoalPaperComponent.cs create mode 100644 Content.Server/Corvax/StationGoal/StationGoalPaperSystem.cs create mode 100644 Content.Server/Corvax/StationGoal/StationGoalPrototype.cs create mode 100644 Content.Shared/Corvax/CCVars/CCCVars.cs create mode 100644 Resources/Locale/en-US/corvax/station-goal/station-goal-command.ftl create mode 100644 Resources/Locale/en-US/corvax/station-goal/station-goals.ftl create mode 100644 Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/misc/paper.ftl create mode 100644 Resources/Prototypes/Corvax/Entities/Objects/Misc/paper.yml create mode 100644 Resources/Prototypes/Corvax/Objectives/goals.yml diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index 04f0acac97..f757726f14 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -121,6 +121,7 @@ public override void Init() _prototypeManager.RegisterIgnore("wireLayout"); _prototypeManager.RegisterIgnore("alertLevels"); _prototypeManager.RegisterIgnore("nukeopsRole"); + _prototypeManager.RegisterIgnore("stationGoal"); // Corvax-StationGoal _componentFactory.GenerateNetIds(); _adminManager.Initialize(); diff --git a/Content.Server/Corvax/GameTicking/RoundEndedEvent.cs b/Content.Server/Corvax/GameTicking/RoundEndedEvent.cs new file mode 100644 index 0000000000..dc25631093 --- /dev/null +++ b/Content.Server/Corvax/GameTicking/RoundEndedEvent.cs @@ -0,0 +1,13 @@ +namespace Content.Server.Corvax.GameTicking; + +public sealed class RoundEndedEvent : EntityEventArgs +{ + public int RoundId { get; } + public TimeSpan RoundDuration { get; } + + public RoundEndedEvent(int roundId, TimeSpan roundDuration) + { + RoundId = roundId; + RoundDuration = roundDuration; + } +} diff --git a/Content.Server/Corvax/GameTicking/RoundStartedEvent.cs b/Content.Server/Corvax/GameTicking/RoundStartedEvent.cs new file mode 100644 index 0000000000..7a21fcef4b --- /dev/null +++ b/Content.Server/Corvax/GameTicking/RoundStartedEvent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.Corvax.GameTicking; + +public sealed class RoundStartedEvent : EntityEventArgs +{ + public int RoundId { get; } + + public RoundStartedEvent(int roundId) + { + RoundId = roundId; + } +} diff --git a/Content.Server/Corvax/StationGoal/StationGoalCommand.cs b/Content.Server/Corvax/StationGoal/StationGoalCommand.cs new file mode 100644 index 0000000000..baad64d62c --- /dev/null +++ b/Content.Server/Corvax/StationGoal/StationGoalCommand.cs @@ -0,0 +1,55 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Shared.Administration; +using Robust.Shared.Console; +using Robust.Shared.Prototypes; + +namespace Content.Server.Corvax.StationGoal +{ + [AdminCommand(AdminFlags.Fun)] + public sealed class StationGoalCommand : IConsoleCommand + { + public string Command => "sendstationgoal"; + public string Description => Loc.GetString("send-station-goal-command-description"); + public string Help => Loc.GetString("send-station-goal-command-help-text", ("command", Command)); + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length != 1) + { + shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); + return; + } + + var protoId = args[0]; + var prototypeManager = IoCManager.Resolve(); + if (!prototypeManager.TryIndex(protoId, out var proto)) + { + shell.WriteError(Loc.GetString("send-station-goal-command-error-no-goal-proto", ("id", protoId))); + return; + } + + var stationGoalPaper = IoCManager.Resolve().System(); + if (!stationGoalPaper.SendStationGoal(proto)) + { + shell.WriteError(Loc.GetString("send-station-goal-command-error-couldnt-fax")); + return; + } + } + + public CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + var options = IoCManager.Resolve() + .EnumeratePrototypes() + .OrderBy(p => p.ID) + .Select(p => new CompletionOption(p.ID)); + + return CompletionResult.FromHintOptions(options, Loc.GetString("send-station-goal-command-arg-id")); + } + + return CompletionResult.Empty; + } + } +} diff --git a/Content.Server/Corvax/StationGoal/StationGoalPaperComponent.cs b/Content.Server/Corvax/StationGoal/StationGoalPaperComponent.cs new file mode 100644 index 0000000000..f8ee1b32f1 --- /dev/null +++ b/Content.Server/Corvax/StationGoal/StationGoalPaperComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.Corvax.StationGoal +{ + /// + /// Paper with a written station goal in it. + /// + [RegisterComponent] + public sealed partial class StationGoalPaperComponent : Component + { + } +} + diff --git a/Content.Server/Corvax/StationGoal/StationGoalPaperSystem.cs b/Content.Server/Corvax/StationGoal/StationGoalPaperSystem.cs new file mode 100644 index 0000000000..7e370fd5de --- /dev/null +++ b/Content.Server/Corvax/StationGoal/StationGoalPaperSystem.cs @@ -0,0 +1,113 @@ +using System.Data; +using System.Text.RegularExpressions; +using Content.Server.Corvax.GameTicking; +using Content.Server.Fax; +using Content.Server.Station.Systems; +using Content.Shared.Corvax.CCCVars; +using Content.Shared.Random; +using Content.Shared.Random.Helpers; +using Robust.Shared.Configuration; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server.Corvax.StationGoal; + +/// +/// System for station goals +/// +public sealed class StationGoalPaperSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly FaxSystem _fax = default!; + [Dependency] private readonly IConfigurationManager _config = default!; + [Dependency] private readonly StationSystem _station = default!; + + private static readonly Regex StationIdRegex = new(@".*-(\d+)$"); + + private const string RandomPrototype = "StationGoals"; + + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRoundStarted); + } + + + private void OnRoundStarted(RoundStartedEvent ev) + { + if (_config.GetCVar(CCCVars.StationGoalsEnabled)) + SendRandomGoal(); + } + + /// + /// Send a random station goal to all faxes which are authorized to receive it + /// + /// If the fax was successful + /// Raised when station goal types in the prototype is invalid + public bool SendRandomGoal() + { + // Get the random station goal list + if (!_prototype.TryIndex(RandomPrototype, out var goals)) + { + Log.Error($"StationGoalPaperSystem: Random station goal prototype '{RandomPrototype}' not found"); + return false; + } + + // Get a random goal + var goal = RecursiveRandom(goals); + + // Send the goal + return SendStationGoal(goal); + } + + private StationGoalPrototype RecursiveRandom(WeightedRandomPrototype random) + { + var goal = random.Pick(_random); + + if (_prototype.TryIndex(goal, out var goalPrototype)) + return goalPrototype; + + if (_prototype.TryIndex(goal, out var goalRandom)) + return RecursiveRandom(goalRandom); + + throw new Exception($"StationGoalPaperSystem: Random station goal could not be found from origin prototype {RandomPrototype}"); + } + + /// + /// Send a station goal to all faxes which are authorized to receive it + /// + /// True if at least one fax received paper + public bool SendStationGoal(StationGoalPrototype goal) + { + var enumerator = EntityManager.EntityQueryEnumerator(); + var wasSent = false; + + while (enumerator.MoveNext(out var uid, out var fax)) + { + if (!fax.ReceiveStationGoal || + !TryComp(_station.GetOwningStation(uid), out var meta)) + continue; + + var stationId = StationIdRegex.Match(meta.EntityName).Groups[1].Value; + + var printout = new FaxPrintout( + Loc.GetString("station-goal-fax-paper-header", + ("date", DateTime.Now.AddYears(1000).ToString("yyyy MMMM dd")), + ("station", string.IsNullOrEmpty(stationId) ? "???" : stationId), + ("content", goal.Text) + ), + Loc.GetString("station-goal-fax-paper-name"), + "StationGoalPaper" + ); + + _fax.Receive(uid, printout, null, fax); + + wasSent = true; + } + + return wasSent; + } +} diff --git a/Content.Server/Corvax/StationGoal/StationGoalPrototype.cs b/Content.Server/Corvax/StationGoal/StationGoalPrototype.cs new file mode 100644 index 0000000000..73289e60c9 --- /dev/null +++ b/Content.Server/Corvax/StationGoal/StationGoalPrototype.cs @@ -0,0 +1,12 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.Corvax.StationGoal +{ + [Serializable, Prototype("stationGoal")] + public sealed class StationGoalPrototype : IPrototype + { + [IdDataFieldAttribute] public string ID { get; } = default!; + + public string Text => Loc.GetString($"station-goal-{ID.ToLower()}"); + } +} diff --git a/Content.Server/Fax/FaxMachineComponent.cs b/Content.Server/Fax/FaxMachineComponent.cs index d1f269dd37..d67a92a50a 100644 --- a/Content.Server/Fax/FaxMachineComponent.cs +++ b/Content.Server/Fax/FaxMachineComponent.cs @@ -51,6 +51,15 @@ public sealed partial class FaxMachineComponent : Component [DataField("receiveNukeCodes")] public bool ReceiveNukeCodes { get; set; } = false; + // Corvax-StationGoal-Start + /// + /// Should that fax receive station goal info + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("receiveStationGoal")] + public bool ReceiveStationGoal { get; set; } = false; + // Corvax-StationGoal-End + /// /// Sound to play when fax has been emagged /// diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index 85f833bd1c..1f11da3f5f 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Server.Announcements; +using Content.Server.Corvax.GameTicking; using Content.Server.Discord; using Content.Server.GameTicking.Events; using Content.Server.Ghost; @@ -252,6 +253,7 @@ public void StartRound(bool force = false) AnnounceRound(); UpdateInfoText(); SendRoundStartedDiscordMessage(); + RaiseLocalEvent(new RoundStartedEvent(RoundId)); // Corvax-RoundFlow #if EXCEPTION_TOLERANCE } @@ -388,6 +390,7 @@ public void ShowRoundEndScoreboard(string text = "") RaiseNetworkEvent(new RoundEndMessageEvent(gamemodeTitle, roundEndText, roundDuration, RoundId, listOfPlayerInfoFinal.Length, listOfPlayerInfoFinal, LobbySong, new SoundCollectionSpecifier("RoundEnd").GetSound())); + RaiseLocalEvent(new RoundEndedEvent(RoundId, roundDuration)); // Corvax-RoundFlow } private async void SendRoundEndDiscordMessage() diff --git a/Content.Shared/Corvax/CCVars/CCCVars.cs b/Content.Shared/Corvax/CCVars/CCCVars.cs new file mode 100644 index 0000000000..371b793d3d --- /dev/null +++ b/Content.Shared/Corvax/CCVars/CCCVars.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.Corvax.CCCVars; + +[CVarDefs] +// ReSharper disable once InconsistentNaming +public sealed class CCCVars +{ + /* + * Station Goals + */ + + /// + /// Enables station goals + /// + public static readonly CVarDef StationGoalsEnabled = + CVarDef.Create("game.station_goals", false, CVar.SERVERONLY); +} diff --git a/Resources/Locale/en-US/corvax/station-goal/station-goal-command.ftl b/Resources/Locale/en-US/corvax/station-goal/station-goal-command.ftl new file mode 100644 index 0000000000..82ed4d5c8a --- /dev/null +++ b/Resources/Locale/en-US/corvax/station-goal/station-goal-command.ftl @@ -0,0 +1,6 @@ +send-station-goal-command-description = Sends the selected station target to all faxes that can receive it +send-station-goal-command-help-text = Usage: { $command } +send-station-goal-command-arg-id = Goal Prototype ID + +send-station-goal-command-error-no-goal-proto = No station goal found with ID {$id} +send-station-goal-command-error-couldnt-fax = Couldn't send station goal, probably due to a lack of fax machines that are able to recieve it diff --git a/Resources/Locale/en-US/corvax/station-goal/station-goals.ftl b/Resources/Locale/en-US/corvax/station-goal/station-goals.ftl new file mode 100644 index 0000000000..6a2c95e07a --- /dev/null +++ b/Resources/Locale/en-US/corvax/station-goal/station-goals.ftl @@ -0,0 +1,224 @@ +station-goal-fax-paper-name = Station Goal + +station-goal-fax-paper-header = + ███╗░░██╗████████╗ + ████╗░██║╚══██╔══╝ Form NT-No.{$station}-CC + ██╔██╗██║░░░██║░░░ Target Order + ██║╚████║░░░██║░░░ Date: {$date} + ██║░╚███║░░░██║░░░ + ╚═╝░░╚══╝░░░╚═╝░░░ + ════════════════════════════════════════ + {$content} + ════════════════════════════════════════ + + +station-goal-xeno= + Dear station Command, the purpose of your shift is to build a xenobiology lab and then study exotic life forms. + Two containment chambers must be constructed according to the following requirements: + 1. Must be reinforced well; + 2. At least one of the chambers must be equipped with a gas supply system; + 3. The entrance should be a cycling airlock system to prevent contamination. + + Get salvage crew to capture at least 2 representatives of life forms (e.g. space carp) and transport them to the above-described chambers. + + Capture requirements: + 1. Exotic fauna should not have critical injuries at the time of placement in the research department; + 2. When captured fauna dies, you are required to catch another, cloning is strictly prohibited. + + Once you collect the required fauna, you must study them and write a report on their properties. + The report must be stamped by the head of the department and faxed to Central Command. + + Experience Requirements: + 1. Experience should be documented in detail; + 2. Test activities may include: working with gases, smoke, foam, or injecting experimental reagents (e.g. Cognizine) into captured fauna. + +station-goal-museum= + Dear command of the station, the purpose of your shift is to build a museum, the exhibits for which will be unique objects collected from the station. + + Below are the requirements for the design of the museum: + 1. The museum must be structurally connected to the station by a space-protected corridor, or be located within it; + 2. The premises must be of a size that allows them to easily receive a large number of visitors; + 3. The premises must be provided with a standard atmosphere, ventilation and stable power supply; + 4. Room decoration should be visually pleasing; + 5. Exhibits must be reinforced accordingly to what is contained in them. + + Exhibit requirements: + 1. Exhibits must be unique in their kind; + 2. Each department must provide at least 2 exhibits for the museum fund; + 3. The total number of exhibits must be at least 20. + + Exhibits may include: + 1. Exotic drinks and dishes that require an extraordinary method of production and/or non-standard ingredients; + 2. Exotic matter/substance; + 3. Works of art (e.g. statues, paintings); + 4. Fully studied and documented artifacts (optionally provide a copy of the document); + 5. High-tech devices or tools; + 6. High-tech or high-power weapons; + 7. Robotic entities (e.g. Mechs, Cyborgs, Drones); + 8. Mutated biological organisms; + 9. Domesticated wild animals or intelligent non-humanoid life forms; + 10. Found treasures or items not available on the market. + + Upon completion of the museum, it is required to provide the crew with at least 20 minutes of free time from work so that they can visit the museum. + +station-goal-area= + Dear station Command, the goal of your shift is to increase the effective use of space at the station. + + It is required to bring the abandoned premises into proper form and find a use for them. + Each department must equip and effectively use the area of adjacent maintenance tunnels. + Sufficiently spacious maintenance tunnels need to be converted into residential areas. + The remaining tunnels should be provided with floor coverings and adequate lighting. + In addition, it is necessary to provide a public, well-lit corridor connecting all the restored compartments and new bedrooms. + +station-goal-bureaucratic-error = + ACCESS TO THIS DOCUMENT IS PROHIBITED FOR PERSONS WHO DO NOT HAVE LEGAL IMMUNITY + + Dear station Command, we inform you that the purpose of your shift was lost as a result of a bureaucratic error. + With this news, Central Command gives you the opportunity to independently assign a new goal for the station. + + New goal requirements: + 1. Relevance: The goal must be relevant and relevant to the current situation; + 2. Engagement: The goal should require the cooperation of as many departments as possible in the plans; + 3. Scope: The goal should involve sufficient, but not excessive, amounts of work to ensure the effective completion of the task. + + Please note that distribution of the contents of this document to persons who do not have legal immunity is strictly prohibited due to the possibility of discrediting the management of the Corporation. + Therefore, in order to present a new goal to the crew, the command staff must contact Central Command for approval of your ideas. + +station-goal-anomalies= + Dear station Command, the purpose of your shift is to provide new information about anomalies to NanoTrasen. + + It is necessary to conduct experimental studies aimed at testing the consequences of the collapse of at least 4 unique anomalies. + During or after the experiments, it is necessary to isolate and document the aforementioned anomalies. + + Document requirements: + 1. The official name of the anomaly; + 2. Physical description; + 3. Passive properties; + 4. Reaction of the anomaly to different particles; + 5. Consequences of the collapse; + 6. Location of the anomaly. + + The document must be certified by the stamp of the supervisor and faxed to Central Command. + +station-goal-combat= + Dear station Command, due to the increase in attacks of pirate ships in this sector, the purpose of your shift is to raise the overall combat readiness of the station. + + Required: + 1. Organize an inspection of every sentient being and cargo arriving at or leaving the station. + 2. Build or modify an existing security checkpoint at arrivals and departures. The checkpoint must be able to completely block the ports from the main part of the station. + Each of the above checkpoints must have at least one cell for the temporary detention of detainees. + 3. Organize a spare weapons storage in the opposite part of the station from the brig. + The vault arsenal should have enough weapons and equipment to fully equip all security personnel. + 4. Organize the recruitment of a new combat subdepartment of security. + Squad members must be recruited from the station's crew. + Recruitment should be carried out on a voluntary-compulsory basis. + Composition of the squad: + 1 field medic; + 1 field engineer; + 3 combat operatives. + All members of the squad must be trained in all the necessary skills to conduct combat and fulfill their role. + 5. Open a public shooting range. + The shooting range should present all available types of weapons or their training counterparts. + Avoid providing lethal weaponry to unauthorized personnel. + 6. Encourage the use of the station boxing ring. + If there is no boxing ring, you must create one. + +station-goal-shuttle= + Dear station Command, the purpose of your shift is to build a space shuttle capable of being piloted. + + Shuttle requirements: + 1. The shuttle must have a locked bridge; + a medical room with the necessary medical supplies and chemical equipment; + a supply store surrounded by reinforced material; + a crew room with at least 12 seats. + 2. There must be an intermediate room between the docking airlock and the main rooms to prevent possible depressurization. + 3. The shuttle must have a standard atmosphere, and also have several air gas containers to maintain it. + 4. The shuttle must be able to move in all directions (forward, backward, sideways) and turn reasonably well. + + Upon completion, the shuttle crew must be recruited from the station personnel. + The shuttle crew must include: + 1 pilot; + 2 engineers; + 1 medic/chemist; + 1 security officer. + + The shuttle should take on board all the station Command representatives as passengers and, in parallel with the evacuation shuttle, go to the Central Command station. + +station-goal-singularity= + Dear station Command, the goal of your shift is to build a generator based on the gravitational singularity. + + The design requirements are: + 1. The structure must be located at a significant distance from the station. + 2. The structure must be protected from meteorites and space debris. + 3. The containment field must be able to prevent the loss of a class 3 singularity. + +station-goal-solar-panels= + Dear station Command, the purpose of your shift is to organize a backup power system. + + The following work is required: + 1. Build two new branches of solar panels. + 2. Allocate an area for a compartment with spare batteries. + This compartment should accommodate at least 3 fully charged SMES', which should not be connected to the main power system of the station unless needed. + +station-goal-artifacts= + Dear station Command, the purpose of your shift is to provide new information about alien artifacts to NanoTrasen. + + It is required to organize the work of salvagers to search for and deliver artifacts from the wreckage around the station or expeditions. + After the delivery of the artifacts, they must be transferred to a special container to the research department. + It is necessary to deliver at least 2 fully studied and documented artifacts on the evacuation shuttle in special containment units. + + Recommended information for the document: + 1. Name of the artifact. + 2. Physical description. + 3. Properties of the object. + 4. Location of where the artifact was found. + 5. Additional notes. + + The document must be certified by the stamp of the supervisor. + +station-goal-storage= + Dear station Command, the purpose of your shift is to build an orbital storage facility with supplies and technology. + + The storage should be placed in space separately from the main station, make sure its design is strong, a random meteorite should not damage it. + + 4 boxes must be placed in the storage containing the following respectively: + - Advanced medicines; + - Stocks of the best seeds; + - Refrigerator box of food with a high nutritional value; + - Valuable, but not unique boards. + + Monitor the safety of the contents in the storage until the end of the shift, a cleanup crew will come retrieve the contents as they prepare the station. + +station-goal-zoo= + Dear station Command, the purpose of your shift is to improve the recreational value of the personnel at the station. + + It is necessary to build a zoo with at least 5 enclosures containing different types of animals ordered from the supply department. + Provide animals with food, at least one cleaning robot in each enclosure, and everything necessary for life, depending on the type of animal. + It is also necessary to build a bathhouse for the animals, water vapor must be supplied by Atmospheric Technicians. + + Upon completion of the zoo, it is required to provide the crew with at least 20 minutes of free time from work so that they can visit the new zoo. + +station-goal-labor= + Dear station Command, the purpose of your shift is to increase the motivation of the personnel for the growth of labor productivity. + + This requires that each of the heads during the shift closely monitors the performance of the duties of their employees and evaluates them. + After the time set by Command for evaluation, in each of the departments, the best, in the opinion of the head, employee should be selected, who will be invited to a dinner, where the Command staff will be obliged to award them a medal and a prize. + The heads must provide a report indicating the employee's position and merits for the shift. + Drinks and meals should be prepared for the dinner, as well as, if possible, several entertainment events that allow the presence of actors and musicians. + For the duration of the celebration, the dining room or other place chosen for the event must be inaccessible to the rest of the crew. + + The duration of the shift for a more accurate assessment of the work of the personnel should be set by the Command staff. + After the dinner someone must announce the end of the shift and call the evacuation shuttle. + +station-goal-lectures= + Dear station Command, the purpose of your shift is to carry out a number of events within the framework of the Corporation's plan to increase the knowledge of its employees. + + The Command staff are instructed to organize a platform for public lectures, if none exists, create one nearby the bridge entry. + The venue should be equipped with a large enough stage for speakers in the middle, a podium for the presenter to one side of it, plenty of seating for guests, and a special counter/table for brochures at the entrance. + A host/organizer of the event must also be selected. + Each department is required to present a group of employees consisting of at least 2 people. + Selected employees, under the supervision of the head of the department, should prepare a short lecture/presentation on a specific topic within their specialization (e.g. the harm of drugs and their reason for their criminalization, the effect of smoking on the body, acting, product pricing, cooking etc.), preferably with demonstration materials, and at least 10 brochures, on which the abstracts of the lecture should be indicated. + At the time indicated by the Command staff, the crew must be assembled on the site for the event, where lectures will be read. + There may be breaks between lectures to allow guests to read brochures and catch their breath. + + After the end of the event someone must announce the end of the shift and call the evacuation shuttle. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/misc/paper.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/misc/paper.ftl new file mode 100644 index 0000000000..e07620b95f --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/misc/paper.ftl @@ -0,0 +1,2 @@ +ent-StationGoalPaper = station goal centcomm message + .desc = It looks like you have a lot of work to do. diff --git a/Resources/Prototypes/Corvax/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Corvax/Entities/Objects/Misc/paper.yml new file mode 100644 index 0000000000..57fb6eefc1 --- /dev/null +++ b/Resources/Prototypes/Corvax/Entities/Objects/Misc/paper.yml @@ -0,0 +1,11 @@ +- type: entity + parent: Paper + id: StationGoalPaper + name: station goal centcomm message + description: 'It looks like you have a lot of work to do.' + components: + - type: Paper + stampState: paper_stamp-centcom + stampedBy: + - stampedName: stamp-component-stamped-name-centcom + stampedColor: "#bb3232" diff --git a/Resources/Prototypes/Corvax/Objectives/goals.yml b/Resources/Prototypes/Corvax/Objectives/goals.yml new file mode 100644 index 0000000000..d36f82894e --- /dev/null +++ b/Resources/Prototypes/Corvax/Objectives/goals.yml @@ -0,0 +1,84 @@ +- type: stationGoal + id: Area + +- type: stationGoal + id: Artifacts + +- type: stationGoal + id: BureaucraticError + +- type: stationGoal + id: Combat + +- type: stationGoal + id: Labor + +- type: stationGoal + id: Lectures + +- type: stationGoal + id: Museum + +- type: stationGoal + id: Shuttle + +- type: stationGoal + id: Singularity + +- type: stationGoal + id: SolarPanels + +- type: stationGoal + id: Storage + +- type: stationGoal + id: Xeno + +- type: stationGoal + id: Zoo + + + +- type: weightedRandom + id: StationGoals + weights: + StationGoalDepartment: 1 + StationGoalPower: 1 + StationGoalStation: 1 + + +- type: weightedRandom + id: StationGoalDepartment + weights: + StationGoalScience: 1 + StationGoalSecurity: 1 + + +- type: weightedRandom + id: StationGoalPower + weights: + Singularity: 1 + SolarPanels: 1 + +- type: weightedRandom + id: StationGoalScience + weights: + Anomalies: 1 + Artifacts: 1 + Xeno: 1 + +- type: weightedRandom + id: StationGoalSecurity + weights: + Combat: 1 + +- type: weightedRandom + id: StationGoalStation + weights: + Area: 1 + BureaucraticError: 1 + Labor: 1 + Lectures: 1 + Museum: 1 + Shuttle: 1 + Zoo: 1 diff --git a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml index 89e1e695eb..7cf5b8601c 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml @@ -99,9 +99,10 @@ - type: entity parent: FaxMachineBase id: FaxMachineCaptain - name: captain long range fax machine + name: command long range fax machine # Parkstation-Oligarchy suffix: NukeCodes components: - type: FaxMachine - name: "Captain's Office" + name: "Command" # Parkstation-Oligarchy receiveNukeCodes: true + receiveStationGoal: true # Corvax-StationGoal