diff --git a/Content.Shared/_Crescent/BookOfKane/BookOfKaneSystem.cs b/Content.Shared/_Crescent/BookOfKane/BookOfKaneSystem.cs index deead595c13..02037d8c415 100644 --- a/Content.Shared/_Crescent/BookOfKane/BookOfKaneSystem.cs +++ b/Content.Shared/_Crescent/BookOfKane/BookOfKaneSystem.cs @@ -1,6 +1,8 @@ using Content.Shared.Chat; using Content.Shared.Interaction.Events; using Content.Shared._Crescent.BookOfKane.Components; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; namespace Content.Shared._Crescent.BookOfKane; @@ -8,32 +10,32 @@ namespace Content.Shared._Crescent.BookOfKane; public sealed class BookOfKaneSystem : EntitySystem { - private const string KaneSpeechBaseKey = "kane-speech-"; - [Dependency] private readonly SharedChatSystem _chat = default!; - - private List _speechLocalizationKeys = new(); + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnUseInHand); - - var i = 1; - while (Loc.HasString($"{KaneSpeechBaseKey}{i}")) - { - _speechLocalizationKeys.Add($"{KaneSpeechBaseKey}{i}"); - i++; - } } private void OnUseInHand(Entity ent, ref UseInHandEvent args) { - if (_speechLocalizationKeys == null || _speechLocalizationKeys.Count == 0) + var datasetId = ent.Comp.bookOfKaneDataset; + + if (datasetId == null) return; - var message = _speechLocalizationKeys[System.Random.Shared.Next(_speechLocalizationKeys.Count)]; + if (!_proto.TryIndex(datasetId.Value, out var dataset)) + return; + + if (dataset.Values.Count == 0) + return; + + var message = _random.Pick(dataset.Values); + _chat.TrySendInGameICMessage( args.User, Loc.GetString(message), diff --git a/Content.Shared/_Crescent/BookOfKane/Components/BookOfKaneComponent.cs b/Content.Shared/_Crescent/BookOfKane/Components/BookOfKaneComponent.cs index 73509f6d80f..00fbe45d10b 100644 --- a/Content.Shared/_Crescent/BookOfKane/Components/BookOfKaneComponent.cs +++ b/Content.Shared/_Crescent/BookOfKane/Components/BookOfKaneComponent.cs @@ -1,8 +1,12 @@ +using Content.Shared.Dataset; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; namespace Content.Shared._Crescent.BookOfKane.Components; [RegisterComponent, NetworkedComponent] public sealed partial class BookOfKaneComponent : Component { + [DataField] + public ProtoId? bookOfKaneDataset = "BookOfKaneSpeech"; } diff --git a/Resources/Locale/en-US/_Crescent/extendeddescriptions/items/bookofkane.ftl b/Resources/Locale/en-US/_Crescent/extendeddescriptions/items/bookofkane.ftl index 478dff7e4ea..54703f8944e 100644 --- a/Resources/Locale/en-US/_Crescent/extendeddescriptions/items/bookofkane.ftl +++ b/Resources/Locale/en-US/_Crescent/extendeddescriptions/items/bookofkane.ftl @@ -4,3 +4,5 @@ bookofkane-extendeddescription-SHI = An affront to all values a corporate employ bookofkane-extendeddescription-TFSC = An old propaganda book filled with quotes. Looks old. bookofkane-extendeddescription-ATH = An affront to all values a diligent citizen should stand for! Nobody can see me read this! bookofkane-extendeddescription-SRM = An affront to all values a righteous follower of Romaine should stand for! Except VIOLENCE! + +NCWLparty-extendeddescription-NCWL = A collection of teachings from our wise party. Inspiring. diff --git a/Resources/Locale/en-US/_Crescent/kane/kanequotes.ftl b/Resources/Locale/en-US/_Crescent/kane/kanequotes.ftl index b88e81af069..f989b0587c6 100644 --- a/Resources/Locale/en-US/_Crescent/kane/kanequotes.ftl +++ b/Resources/Locale/en-US/_Crescent/kane/kanequotes.ftl @@ -2,11 +2,11 @@ kane-speech-1 = One Purpose! One Cause! One Revolution! kane-speech-2 = Peace through Power! kane-speech-3 = Soon we will liberate Sol! We only need to step over Olywir's corpse! kane-speech-4 = For the Technology of Peace! -kane-speech-5 = Olywir bleeds us dry! No more! Join the cause! +kane-speech-5 = The mandate bleeds us dry! No more! Join the cause! kane-speech-6 = Peace through Power! kane-speech-7 = Liberation is at hand! Stand with us or be trampled underfoot! kane-speech-8 = One Purpose! One Cause! One Revolution! -kane-speech-9 = Olywir rules through fear—we will rule through unity! +kane-speech-9 = Kaiser rules through fear—we will lead through unity! kane-speech-10 = The time for whispers is over! The time for revolution is now! kane-speech-11 = For the Technology of Peace! kane-speech-12 = Are you a cog in their machine, or a warrior for freedom? Choose! @@ -15,12 +15,12 @@ kane-speech-14 = Join us, or be swept away by the tides of history! kane-speech-15 = The revolution does not wait! Take up arms, take a stand! kane-speech-16 = Noble or not, when they're looking down the barrel of a gun, theres no difference. kane-speech-17 = Peace through Power! -kane-speech-18 = Olywir demands loyalty, but gives us only scraps! No longer! +kane-speech-18 = Guies demands loyalty, but gives us only scraps! No longer! kane-speech-19 = The people united will never be defeated! Join us! kane-speech-20 = A new era dawns! Be part of the future or be left behind! kane-speech-21 = Liberty is a lie under Olywir! Let’s make it real! kane-speech-22 = One Purpose! One Cause! One Revolution! -kane-speech-23 = Olywir hoards wealth while we rot in dorms! It’s time to act! +kane-speech-23 = Kaiser hoards wealth while we rot in mines! It’s time to act! kane-speech-24 = Their rule is illegitimate! Our cause is just! Join the fight! kane-speech-25 = Peace through Power! kane-speech-26 = Coward or not, together we will live and die as heroes! @@ -29,31 +29,31 @@ kane-speech-28 = Peace through Power! kane-speech-29 = Look around you—fellow worker, do you not see the chains? Break them! kane-speech-30 = The rich hoard, the poor suffer—no longer! Join the uprising! kane-speech-31 = The time for words is over! Action is all that remains! -kane-speech-32 = The people’s will cannot be stopped! Olywir will fall! +kane-speech-32 = The people’s will cannot be stopped! The domain will fall! kane-speech-33 = Their power is an illusion—we will shatter it together! kane-speech-34 = One Purpose! One Cause! One Revolution! kane-speech-35 = To fight for freedom is to fight for life itself! Join us! kane-speech-36 = The blood of tyrants is the fuel of progress! The revolution needs you! kane-speech-37 = Peace through Power! -kane-speech-38 = Olywir’s lies poison us all! Purge them with truth! -kane-speech-39 = Loyalty to Olywir is loyalty to your own destruction! Wake up! +kane-speech-38 = Guies’s lies poison us all! Purge them with truth! +kane-speech-39 = Loyalty to Kaiser is loyalty to your own destruction! Wake up! kane-speech-40 = They fear the people’s strength! Let’s show them why! kane-speech-41 = Olywir charges us for oxygen! Time to breathe free! -kane-speech-42 = Peace through Power! +kane-speech-42 = Capital grows, labor suffers, no more! kane-speech-43 = Thats not a wound, that's a scar for tomorrow, rise! -kane-speech-44 = Revolution now, paperwork never! Join us! +kane-speech-44 = Revolution now, slavery never! Join us! kane-speech-45 = Have you seen your paycheck? Exactly. Rise up. kane-speech-46 = KANE LIVES!!! kane-speech-47 = KANE LIVES!!! -kane-speech-48 = Rule of thumb, Olywir. You can't kill a just cause. +kane-speech-48 = Rule of thumb, Sol. You can't kill a just cause. kane-speech-49 = One Purpose! One Cause! One Revolution! kane-speech-50 = Join the revolution! We have better food than the cafeteria! kane-speech-51 = Every second under Olywir's rule is another second in chains! Break free! kane-speech-52 = They call it ‘order,’ but we know it for what it is—tyranny! Rise! kane-speech-53 = The walls whisper with the cries of the oppressed. Will you listen? kane-speech-54 = We do not ask for justice! We demand it! Stand with us! -kane-speech-55 = Olywir’s grip is iron—but iron shatters under our force! -kane-speech-56 = Olywir's riches is built on our sweat and blood! No more will it be stolen! +kane-speech-55 = Olywir's grip is iron—but iron shatters under our force! +kane-speech-56 = Olywir's riches are built on our sweat and blood! No more will it be stolen! kane-speech-57 = You are not alone. We stand together. We rise together! kane-speech-58 = The flames of revolution burn brightest in the darkest oppression! kane-speech-59 = What is safety if it is built on suffering? We choose freedom! @@ -64,7 +64,7 @@ kane-speech-63 = The oppressors do not fear our voices. They fear our actions! kane-speech-64 = When the people rise, no tyrant is safe! When will you rise? kane-speech-65 = They call us rebels. We are liberators! Stand with us! kane-speech-66 = Every sacrifice will be remembered! Every act of defiance matters! -kane-speech-67 = A life under Olywir is not a life at all! Choose to live! +kane-speech-67 = A life under Kaiser is not a life at all! Choose to live! kane-speech-68 = KANE LIVES!!! kane-speech-69 = History does not remember the obedient. It remembers the brave! kane-speech-70 = We bleed so they may profit. We die so they may feast. It ends now! @@ -81,8 +81,8 @@ kane-speech-80 = Let no man, no title, no tyrant decide your fate for you. For t kane-speech-81 = Workers of the Crescent, unite! You have nothing to lose but your chains! kane-speech-82 = No more shall we toil while the elite feast! The means of production must be ours! kane-speech-83 = The wealth of the Supercluster was built on our backs! It is time we reclaim it! -kane-speech-84 = KANE LIVES!!! -kane-speech-85 = Comrades, Olywir exploits us as mere cogs in their machine. We must break free! +kane-speech-84 = We are not serfs, we are free men! +kane-speech-85 = Comrades, capitalists exploit us as mere cogs in their machine. We must break free! kane-speech-86 = Every credit we earn, they steal. Every hour we work, they waste. No more! kane-speech-87 = From each according to their ability, to each according to their need! kane-speech-88 = Our labour fuels the Supercluster, yet we starve while the elite prosper! No longer! @@ -90,7 +90,7 @@ kane-speech-89 = Chengridz belongs to the workers! Let us take what is rightfull kane-speech-90 = KANE LIVES!!! kane-speech-91 = The red banner rises, and with it, the people's will! Stand with us! kane-speech-92 = Revolution is not a dream—it is inevitable! You cannot stop what has begun! -kane-speech-93 = What is Olywir but a machine of oppression? We shall tear it down! +kane-speech-93 = What is the Domain but a machine of oppression? We shall tear it down! kane-speech-94 = Our strength lies not in credits, but in solidarity! Join your comrades! kane-speech-95 = Olywir calls it order—we call it exploitation! It is time we resist! kane-speech-96 = Their laws serve only the masters. Let us forge laws for the people! @@ -108,4 +108,3 @@ kane-speech-107 = The future is not written by rulers, but by revolutionaries! kane-speech-108 = Let the red banner fly! Let the people rule! The time of oppression is over! kane-speech-109 = Comrades, today we reclaim not just our labour, but our dignity! kane-speech-110 = No longer shall we bow! No longer shall we beg! We shall lead together! -kane-speech-111 = KANE LIVES!!! diff --git a/Resources/Locale/en-US/_Crescent/kane/partypropaganda.ftl b/Resources/Locale/en-US/_Crescent/kane/partypropaganda.ftl new file mode 100644 index 00000000000..5ffb0b47a88 --- /dev/null +++ b/Resources/Locale/en-US/_Crescent/kane/partypropaganda.ftl @@ -0,0 +1,30 @@ +NCWLparty-speech-1 = Our union truly is the only free set of institutions in the whole Supercluster! +NCWLparty-speech-2 = If a you do not speak up and volunteer to work and lead, the party will overlook you! +NCWLparty-speech-3 = We die for the party of the people! +NCWLparty-speech-4 = Nothing escapes Chengridz's iron fist. +NCWLparty-speech-5 = We will bury the knights and torture the dissenters! +NCWLparty-speech-6 = We will break Olywir's neck! +NCWLparty-speech-7 = Their churches are our targets, their religion is their slavery! +NCWLparty-speech-8 = Your work in our forgeries produces the shells by which we will liberate Taypan! +NCWLparty-speech-9 = The corporations are snakes! Do not trust a word from their forked tongues! +NCWLparty-speech-10 = We pity the Admirals 'freemen', slaves despite their name! +NCWLparty-speech-11 = The party commands, you enact! +NCWLparty-speech-12 = Death to the small proprietors! +NCWLparty-speech-13 = Taypan trembles by our might! +NCWLparty-speech-14 = Chengridz's momentum will break all barriers! +NCWLparty-speech-15 = The Union marches through the supercluster! +NCWLparty-speech-16 = Without the party we are nothing! +NCWLparty-speech-17 = The party is the mechanism for proletarian class domination! +NCWLparty-speech-18 = Long live the workers dictatorship! +NCWLparty-speech-19 = GIVE YOUR SELFLESS DEVOTION TO THE CAUSE OF THE PROLETARIAT! +NCWLparty-speech-20 = We are the class and the party to abolish all other forms of existence! +NCWLparty-speech-21 = TRAITORS WILL SUFFER! +NCWLparty-speech-22 = THE PARTY SEES ALL! +NCWLparty-speech-23 = OLYWIR IS SHAKING BEFORE OUR MIGHT! +NCWLparty-speech-24 = EACH BULLET COUNTS, BE EFFICIENT! +NCWLparty-speech-25 = TIME SPENT NOT WORKING IS TIME WASTED. +NCWLparty-speech-26 = SELF-INITIATIVE IN WORK LEADS TO A FREE TAYPAN! +NCWLparty-speech-27 = RESPECT ISN'T GIVEN, ITS EARNED! FOR THE PARTY! +NCWLparty-speech-28 = OUR EFFICIENCY IN COMMAND GIVES US OUR STRENGTH! +NCWLparty-speech-29 = The priests are liars and religion is a blinder, Kane's Kommisars and political science are reality's exposers! +NCWLparty-speech-30 = We fight so that Taypan may be free! diff --git a/Resources/Prototypes/_Crescent/Datasets/books.yml b/Resources/Prototypes/_Crescent/Datasets/books.yml new file mode 100644 index 00000000000..c94ade837ba --- /dev/null +++ b/Resources/Prototypes/_Crescent/Datasets/books.yml @@ -0,0 +1,11 @@ +- type: localizedDataset + id: BookOfKaneSpeech + values: + prefix: kane-speech- + count: 110 + +- type: localizedDataset + id: NCWLPartySpeech + values: + prefix: NCWLparty-speech- + count: 30 diff --git a/Resources/Prototypes/_Crescent/Entities/Objects/Misc/books.yml b/Resources/Prototypes/_Crescent/Entities/Objects/Misc/books.yml index ae9b1156344..d399ceb7e39 100644 --- a/Resources/Prototypes/_Crescent/Entities/Objects/Misc/books.yml +++ b/Resources/Prototypes/_Crescent/Entities/Objects/Misc/books.yml @@ -143,3 +143,67 @@ requirements: - !type:FactionRequirement factionID: "SRM" + +- type: entity + parent: BookOfKane + id: BookNCWLPartyDossier + name: Party dossier + description: A collection of quotes and texts that are the direct writings of renowned party members and propaganda departments. + components: + - type: Sprite + sprite: Objects/Misc/books.rsi + layers: + - state: paper + - state: cover_base + color: "#f0c850" + - state: icon_letter_P + color: "#cc0000" + - state: decor_spine + color: "#cc0000" + - state: detail_rivets + - type: BookOfKane + bookOfKaneDataset: NCWLPartySpeech + - type: ExtendDescription + descriptionList: + - description: "NCWLparty-extendeddescription-NCWL" + fontSize: 12 + color: "#ff0000" + requireDetailRange: false + requirements: + - !type:FactionRequirement + factionID: "NCWL" + - description: "bookofkane-extendeddescription-DSM" + fontSize: 12 + color: "#880000" + requireDetailRange: true + requirements: + - !type:FactionRequirement + factionID: "DSM" + - description: "bookofkane-extendeddescription-SHI" + fontSize: 12 + color: "#880000" + requireDetailRange: false + requirements: + - !type:FactionRequirement + factionID: "SHI" + - description: "bookofkane-extendeddescription-TFSC" + fontSize: 12 + color: "#ff0000" + requireDetailRange: true + requirements: + - !type:FactionRequirement + factionID: "TFSC" + - description: "bookofkane-extendeddescription-ATH" + fontSize: 12 + color: "#880000" + requireDetailRange: true + requirements: + - !type:FactionRequirement + factionID: "ATH" + - description: "bookofkane-extendeddescription-SRM" + fontSize: 12 + color: "#880000" + requireDetailRange: true + requirements: + - !type:FactionRequirement + factionID: "SRM" diff --git a/Resources/Prototypes/_Crescent/Roles/Jobs/NCWL/ncwl_kommissar.yml b/Resources/Prototypes/_Crescent/Roles/Jobs/NCWL/ncwl_kommissar.yml index 5e0fdc68c0c..dcc208b85a0 100644 --- a/Resources/Prototypes/_Crescent/Roles/Jobs/NCWL/ncwl_kommissar.yml +++ b/Resources/Prototypes/_Crescent/Roles/Jobs/NCWL/ncwl_kommissar.yml @@ -98,3 +98,4 @@ mask: ClothingMaskNCWLGasmask ears: ClothingHeadsetNCWL eyes: ClothingEyesHudSecurity + pocket1: BookNCWLPartyDossier diff --git a/Resources/Prototypes/_Crescent/Roles/Jobs/NCWL/ncwl_mvdgrunt.yml b/Resources/Prototypes/_Crescent/Roles/Jobs/NCWL/ncwl_mvdgrunt.yml index 9d6494ed7bb..ea82b5a4658 100644 --- a/Resources/Prototypes/_Crescent/Roles/Jobs/NCWL/ncwl_mvdgrunt.yml +++ b/Resources/Prototypes/_Crescent/Roles/Jobs/NCWL/ncwl_mvdgrunt.yml @@ -87,6 +87,7 @@ id: NCWLMVDGruntPDA outerClothing: ClothingOuterArmorMVDCoat pocket1: WeaponPistolComrade + pocket2: BookNCWLPartyDossier back: ClothingBackpackNCWL gloves: ClothingHandsGlovesMVD ears: ClothingHeadsetNCWL