diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs index edaed4911f7..f25c1834d75 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs @@ -37,6 +37,7 @@ public sealed partial class AdminVerbSystem private static readonly EntProtoId DefaultConspiratorRule = "Conspirators"; // Harmony private static readonly EntProtoId DefaultWizardRule = "Wizard"; private static readonly EntProtoId DefaultHitmanRule = "HitmanRule"; + private static readonly EntProtoId DefaultNTAgentRule = "NTAgentRule"; private static readonly EntProtoId DefaultNinjaRule = "NinjaSpawn"; private static readonly ProtoId PirateGearId = "PirateGear"; @@ -248,18 +249,18 @@ public sealed partial class AdminVerbSystem }; args.Verbs.Add(cosmiccult); - var ntAgent = Loc.GetString("admin-verb-make-NTAgent"); + var ntAgentName = Loc.GetString("admin-verb-make-NTAgent"); Verb agent = new() { - Text = ntAgent, + Text = ntAgentName, Category = VerbCategory.Antag, Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Misc/job_icons.rsi"), "Nanotrasen"), Act = () => { - _antag.ForceMakeAntag(targetPlayer, "NTAgentRule"); + _antag.ForceMakeAntag(targetPlayer, DefaultNTAgentRule); }, Impact = LogImpact.High, - Message = string.Join(": ", ntAgent, Loc.GetString("admin-verb-text-make-NTAgent")), + Message = string.Join(": ", ntAgentName, Loc.GetString("admin-verb-text-make-NTAgent")), }; args.Verbs.Add(agent); // End DeltaV Additions diff --git a/Resources/Locale/en-US/_DV/ntagent/preset-NTAgent.ftl b/Resources/Locale/en-US/_DV/ntagent/preset-NTAgent.ftl index d1cc5c089c7..2d0ae42dac2 100644 --- a/Resources/Locale/en-US/_DV/ntagent/preset-NTAgent.ftl +++ b/Resources/Locale/en-US/_DV/ntagent/preset-NTAgent.ftl @@ -15,5 +15,8 @@ NTAgent-round-end-name = Internal Affairs Agent objective-condition-frame-person-title = Frame {$targetName}, {CAPITALIZE($job)}. objective-condition-fired-person-title = Get {$targetName}, {CAPITALIZE($job)} fired. +objective-condition-dossier-person-title = Make a Dossier on {$targetName}, {CAPITALIZE($job)} +objective-condition-slander-person-title = Make {$targetName}, {CAPITALIZE($job)} Look Incompetent. + roles-antag-NT-agent-objective = Do dirty work for NanoTrasen. diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 085629169fa..14e08f9489c 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -34,6 +34,10 @@ - id: Hitman prob: 0.2 #as requested # end deltaV additions - add hitman + #begin DeltaV additions - ntagent subgamemode + - id: NTAgent + prob: 0.25 #as requested + # end deltaV additions - ntagent subgamemode - type: entity parent: BaseGameRule @@ -53,6 +57,10 @@ - id: Hitman prob: 0.2 #as requested # end deltaV additions - add hitman + #begin DeltaV additions - ntagent subgamemode + - id: NTAgent + prob: 0.25 #as requested + # end deltaV additions - ntagent subgamemode - type: entity parent: BaseGameRule @@ -67,7 +75,10 @@ #begin DeltaV additions - add hitman - id: Hitman prob: 0.2 #as requested - # end deltaV additions - add hitman + # end deltaV additions - add hitman\#begin DeltaV additions - ntagent subgamemode + - id: NTAgent + prob: 0.25 #as requested + # end deltaV additions - ntagent subgamemode - type: entity parent: BaseGameRule @@ -81,6 +92,10 @@ - id: Hitman prob: 0.2 #as requested # end deltaV additions - add hitman + #begin DeltaV additions - ntagent subgamemode + - id: NTAgent + prob: 0.25 #as requested + # end deltaV additions - ntagent subgamemode - type: entity parent: BaseGameRule diff --git a/Resources/Prototypes/_DV/GameRules/events.yml b/Resources/Prototypes/_DV/GameRules/events.yml index b852a84426d..5ab18ab0473 100644 --- a/Resources/Prototypes/_DV/GameRules/events.yml +++ b/Resources/Prototypes/_DV/GameRules/events.yml @@ -441,8 +441,10 @@ occursDuringRoundEnd: false - type: AntagRandomObjectives sets: - - groups: NTAgentObjectiveGroup - maxPicks: 2 + - groups: NTAgentBigObjectiveGroup + maxPicks: 1 + - groups: NTAgentSmallObjectiveGroup + maxPicks: 1 maxDifficulty: 100 - type: AntagSelection agentName: NTAgent-round-end-name diff --git a/Resources/Prototypes/_DV/GameRules/subgamemodes.yml b/Resources/Prototypes/_DV/GameRules/subgamemodes.yml index 34e2ba7d5ad..c82d9b9952d 100644 --- a/Resources/Prototypes/_DV/GameRules/subgamemodes.yml +++ b/Resources/Prototypes/_DV/GameRules/subgamemodes.yml @@ -25,3 +25,42 @@ sound: "/Audio/_DV/Ambience/Antag/hitman_briefing_piano_between.ogg" - type: DynamicRuleCost cost: 100 # bit more than thief + +- type: entity + parent: [NTAgentRule] + id: NTAgent + components: + - type: AntagRandomObjectives + sets: + - groups: NTAgentBigObjectiveGroup + maxPicks: 1 + - groups: NTAgentSmallObjectiveGroup + maxPicks: 1 + maxDifficulty: 100 + - type: AntagSelection + agentName: NTAgent-round-end-name + selectionTime: IntraPlayerSpawn + definitions: + - prefRoles: [ NTAgent ] + min: 1 + max: 3 + playerRatio: 20 + lateJoinAdditional: true + allowNonHumans: true + multiAntagSetting: NotExclusive + blacklist: + components: + - AntagImmune + briefing: + text: NTAgent-role-greeting-human + color: lightblue + sound: /Audio/_DV/Ambience/Antag/centcomm_nt_agent.ogg + mindRoles: + - MindRoleNTAgent + components: + - type: AutoImplant + implants: + - RadioImplantCentcomm + - NanolinkSubImplant + - type: DynamicRuleCost + cost: 50 # really arent that much more than thief diff --git a/Resources/Prototypes/_DV/Objectives/NTAgent.yml b/Resources/Prototypes/_DV/Objectives/NTAgent.yml index 55804ce3c11..3ee66e45576 100644 --- a/Resources/Prototypes/_DV/Objectives/NTAgent.yml +++ b/Resources/Prototypes/_DV/Objectives/NTAgent.yml @@ -19,6 +19,15 @@ sprite: Objects/Misc/bureaucracy.rsi state: paper_words +- type: entity + parent: BaseNTAgentObjective + id: BaseNTAgentSlanderDepartment + components: + - type: Objective + icon: + sprite: Structures/Wallmounts/screen.rsi + state: screen + # listen to CC - type: entity parent: BaseNTAgentObjective @@ -54,6 +63,52 @@ - KillPersonCondition - TargetObjectiveImmune # DeltaV +# slander someone +- type: entity + parent: BaseNTAgentObjective + id: SlanderRandomPersonObjective + description: We want to fire this person. Make everyone think they're incompetent. + components: + - type: Objective + icon: + sprite: Structures/Wallmounts/screen.rsi + state: screen + difficulty: 1.75 + unique: false + - type: TargetObjective + title: objective-condition-slander-person-title + - type: PickRandomPerson + filters: + # Can't have multiple objectives to kill the same person. + - !type:TargetObjectiveMindFilter + blacklist: + components: + - KillPersonCondition + - TargetObjectiveImmune # DeltaV + +# Dossier +- type: entity + parent: BaseNTAgentObjective + id: DossierRandomPersonObjective + description: NanoTrasen wants to know more about this person. Figure out what you can and report to Central. + components: + - type: Objective + icon: + sprite: Objects/Misc/bureaucracy.rsi + state: paper_words + difficulty: 1 + unique: false + - type: TargetObjective + title: objective-condition-dossier-person-title + - type: PickRandomPerson + filters: + # Can't have multiple objectives to kill the same person. + - !type:TargetObjectiveMindFilter + blacklist: + components: + - KillPersonCondition + - TargetObjectiveImmune # DeltaV + # fire someone - type: entity parent: BaseNTAgentObjective @@ -82,19 +137,75 @@ parent: BaseNTAgentTestDepartment id: TestSecurityObjective name: Audit Security. - description: Test their response time, their knowledge of law or whatever else. Send the results to Central. + description: Test their response time, armory/perma security, or whatever else. Send the results to Central. - type: entity parent: BaseNTAgentTestDepartment id: TestEngineeringObjective name: Audit Engineering. - description: Test their response time to sabotage, structural damage or whatever else. Send the results to Central. + description: Test their response time to sabotage, power output, or whatever else. Send the results to Central. - type: entity parent: BaseNTAgentTestDepartment id: TestMedicalObjective name: Audit Medical. - description: Test their response time, their medical knowledge or whatever else. Send the results to Central. + description: Test their response time, reactions to types of damage, emergencies or whatever else. Send the results to Central. + +- type: entity + parent: BaseNTAgentTestDepartment + id: TestEpistemicsObjective + name: Audit Epistemics. + description: Evaluate their artifact safety standards, anomaly detection capabilities, glimmer control, or whatever else. Send the results to Central. + +- type: entity + parent: BaseNTAgentTestDepartment + id: TestServiceObjective + name: Audit Service. + description: Test the quality and quantity of their food and drink, hygiene standards, or whatever else. Send the results to Central. + +- type: entity + parent: BaseNTAgentTestDepartment + id: TestLogisticsObjective + name: Audit Logistics. + description: Test the speed of delivery, material silo security or whatever else. Send the results to Central. + +#look bad + +- type: entity + parent: BaseNTAgentSlanderDepartment + id: SlanderSecurityObjective + name: Make Security Look Incompetent + description: NanoTrasen wants a reason to fire people. Make them look incompetent to the public. + +- type: entity + parent: BaseNTAgentSlanderDepartment + id: SlanderEngineeringObjective + name: Make Engineering Look Incompetent + description: NanoTrasen wants a reason to fire people. Make them look incompetent to the public. + +- type: entity + parent: BaseNTAgentSlanderDepartment + id: SlanderMedicalObjective + name: Make Medical Look Incompetent + description: NanoTrasen wants a reason to fire people. Make them look incompetent to the public. + +- type: entity + parent: BaseNTAgentSlanderDepartment + id: SlanderEpistemicsObjective + name: Make Epistemics Look Incompetent + description: NanoTrasen wants a reason to fire people. Make them look incompetent to the public. + +- type: entity + parent: BaseNTAgentSlanderDepartment + id: SlanderLogisticsObjective + name: Make Logistics Look Incompetent + description: NanoTrasen wants a reason to fire people. Make them look incompetent to the public. + +- type: entity + parent: BaseNTAgentSlanderDepartment + id: SlanderCommandObjective + name: Make Command Look Incompetent + description: NanoTrasen wants a reason to fire people. Make them look incompetent to the public. # defunding - type: entity @@ -107,3 +218,14 @@ icon: sprite: _DV/Objects/Misc/first_bill.rsi state: icon + +- type: entity + parent: BaseNTAgentObjective + id: CutCostsObjective + name: Liquidate unneeded assets. + description: Nanotrasen wants to cut costs. Remove unneeded machines or equipment. + components: + - type: Objective + icon: + sprite: _DV/Objects/Misc/first_bill.rsi + state: icon diff --git a/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml b/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml index da4645aa2b4..ca52f3bcc55 100644 --- a/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml @@ -223,16 +223,25 @@ # NTAgent - type: weightedRandom - id: NTAgentObjectiveGroup + id: NTAgentBigObjectiveGroup + weights: + NTAgentObjectiveGroupAudit: 1 + NTAgentObjectiveGroupCutCosts: 1 + NTAgentObjectiveGroupSlander: 1 + + +- type: weightedRandom + id: NTAgentSmallObjectiveGroup weights: NTAgentObjectiveGroupPerson: 1 - NTAgentObjectiveGroupAudit: 1 - type: weightedRandom id: NTAgentObjectiveGroupPerson weights: FrameRandomPersonObjective: 1 - FireRandomPersonObjective: 1 + # FireRandomPersonObjective: 1 + DossierRandomPersonObjective: 1 + SlanderRandomPersonObjective: 1 - type: weightedRandom id: NTAgentObjectiveGroupAudit @@ -240,4 +249,22 @@ TestSecurityObjective: 1 TestEngineeringObjective: 1 TestMedicalObjective: 1 - DefundDepartmentObjective: 1 + TestEpistemicsObjective: 1 + TestServiceObjective: 1 + TestLogisticsObjective: 1 + +- type: weightedRandom + id: NTAgentObjectiveGroupSlander + weights: + SlanderSecurityObjective: 1 + SlanderEngineeringObjective: 1 + SlanderMedicalObjective: 1 + SlanderEpistemicsObjective: 1 + SlanderLogisticsObjective: 1 + SlanderCommandObjective: 0.5 + +- type: weightedRandom + id: NTAgentObjectiveGroupCutCosts + weights: + # DefundDepartmentObjective: 1 + CutCostsObjective: 1 diff --git a/Resources/ServerInfo/Guidebook/_DV/Antagonist/NTAgent.xml b/Resources/ServerInfo/Guidebook/_DV/Antagonist/NTAgent.xml index 0722011cbcd..bea30b0c8b2 100644 --- a/Resources/ServerInfo/Guidebook/_DV/Antagonist/NTAgent.xml +++ b/Resources/ServerInfo/Guidebook/_DV/Antagonist/NTAgent.xml @@ -26,13 +26,6 @@ You can also contact your [bold]handler[/bold], [color=green]Central Command[/color]. They might give you a hand with some things, but don't rely on it. - ##Getting Someone Fired - [italic]A certain employee might've gotten too comfortable in their position, which could potentially spell bad news for NanoTrasen. Help them explore other job opportunities.[/italic] - - Getting someone fired might be easy or difficult, depending on their job. If they're a janitor, it should be easy, but if they're a Command member, it might be harder (especially if it's the Captain). - - However, making up a reason shouldn't be too hard. Writing a "credible" report about their breach of [textlink="The Company Policy" link="companyPolicies"] or their behavior might help if you spy on them. Otherwise, putting them in a bad spot that you've made up might do the trick too. Convincing them to wear Syndicate clothing would make their bosses [italic]very happy![/italic] - ##Getting Someone Framed [italic]Someone has gotten on NanoTrasen's bad side. They need you to ensure that they end up in prison.[/italic] @@ -42,6 +35,25 @@ Remember, security is usually dumber (or smarter) than they seem. They might be too busy with their jobs to remember your face, but they might remember your small clue. Hell, you could become the Detective's best informant. Just try not to overdo it. The station might wise up to your antics. [italic]You need to SELL your lie effectively![/italic] + ##Make a person look incompetent + [italic]We want to fire this person. Make everyone think they're incompetent.[/italic] + + This is a pretty open objective, but remember your efforts will be for naught if they figure out what youre trying to do. + + - Framing them for a very big incident, like a artifact explosion or medical malpractice, will likey stick. + - Sabotaging whatever job they happen to have is also likely to be effective. + + ##Make a Dossier on someone. + [italic]NanoTrasen wants to know more about this person. Figure out what you can and report to Central.[/italic] + + All you need to do is investigate this person. At worst, they'll be weirded out by your stalking. + + You should probably write your report on a [bolditalic]station report paper[/bolditalic], available through your NanoLink! [italic]Anything written on it will appear in the “Station Report” tab on the round-end screen.[/italic] + + + - You may want to join the persons deparment to get better access to them. + - Striking up a friendship with the person can make it easier to learn more about them. + ##Auditing a Department [italic]NanoTrasen needs you to check how their valued departments operate.[/italic] @@ -56,17 +68,23 @@ You're the auditor! Figure out what's MOST important to audit. - ##Defunding a Department - [italic]NanoTrasen needs a good reason why overfunding certain departments is a bad idea.[/italic] + ##Making a Department Look Incompetent + [italic]NanoTrasen wants a reason to fire people. Make them look incompetent to the public.[/italic] - Your job is to pick a department of your choosing and ensure that its department budget is nearly empty by the end of the shift. + Like Auditing, this is a very open-ended objective. Do whatever you think will make the given department look incompetent at their job, [bold]but remember: Central Command doesn't want the station destroyed.[/bold] - You can either secretly pocket all of the money or waste their funds on entirely useless things. If they don't have the cash, you can also ensure that the department starts lacking certain things, like chairs or even consoles! + - The easiest method is to just sabotage something and cause them to blow up or, but this is also the most illegal and desturctive method. + - Pretending to be a member of the deparment and failing could do a lot towards making the deparment look incompetent. - - Withdrawing cash from the ordering console usually leaves a big radio announcement saying who did it. Limit your withdrawals or use someone else's ID to take it. - - People are going to notice if certain important objects go missing from their departments, which can attract unwanted attention. Start small and work from there. Use distractions to your advantage and try to keep things unnoticed. + ##Cut uneeded Costs + [italic]NanoTrasen wants to cut costs. Remove unneeded machines or equipment.[/italic] - Remember, some departments might be easier to defund than others. While defunding the Justice department would be easy, it would be more impressive to defund Security. + Pretty simple, but do remember that it is going to be very noticeable when you deconstruct or move machines. + + - If someone left something on the ground, it is probably unneeded! + - Material silos, vending machines, out of the way lights, several monitoring consoles and generally any redundant machine are unneeded things. + - Crew might wisen up to your antics! Make up excuses, disguise as someone else or relocate your efforts somewhere else if it gets too hot! + - Remember that departments have unnecessary things as well, not just public hallways. Don't forget to "relocate" those assets too. ##Getting Called by Your Handler From time to time, you might get a small request from [color=green]Central Command Officials[/color] to do some extra work. While it's [italic]not mandatory[/italic] to complete them, they might be willing to help you out later if you help them now.