forked from space-wizards/space-station-14
-
-
Notifications
You must be signed in to change notification settings - Fork 70
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'impstation:master' into master
- Loading branch information
Showing
16 changed files
with
412 additions
and
36 deletions.
There are no files selected for viewing
47 changes: 47 additions & 0 deletions
47
Content.Server/Chemistry/TileReactions/EnsureTileReaction.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
using Content.Server.Fluids.EntitySystems; | ||
using Content.Shared.Chemistry.Components; | ||
using Content.Shared.Chemistry.Reaction; | ||
using Content.Shared.Chemistry.Reagent; | ||
using Content.Shared.FixedPoint; | ||
using Content.Shared.Tag; | ||
using JetBrains.Annotations; | ||
using Robust.Shared.Map; | ||
using Robust.Shared.Prototypes; | ||
|
||
namespace Content.Server.Chemistry.TileReactions | ||
{ | ||
[UsedImplicitly] | ||
[DataDefinition] | ||
public sealed partial class EnsureTileReaction : ITileReaction | ||
{ | ||
[DataField, ViewVariables] | ||
public ComponentRegistry Components = new(); | ||
|
||
[DataField, ViewVariables] | ||
public HashSet<ProtoId<TagPrototype>> Tags = new(); | ||
|
||
[DataField, ViewVariables] | ||
public bool Override = false; | ||
|
||
public FixedPoint2 TileReact(TileRef tile, | ||
ReagentPrototype reagent, | ||
FixedPoint2 reactVolume, | ||
IEntityManager entityManager, | ||
List<ReagentData>? data) | ||
{ | ||
if (reactVolume < 5) | ||
return FixedPoint2.Zero; | ||
|
||
if (entityManager.EntitySysManager.GetEntitySystem<PuddleSystem>() | ||
.TrySpillAt(tile, new Solution(reagent.ID, reactVolume, data), out var puddleUid, false, false)) | ||
{ | ||
entityManager.AddComponents(puddleUid, Components, Override); | ||
entityManager.EntitySysManager.GetEntitySystem<TagSystem>().AddTags(puddleUid, Tags); | ||
|
||
return reactVolume; | ||
} | ||
|
||
return FixedPoint2.Zero; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
using Robust.Shared.GameStates; | ||
|
||
namespace Content.Shared.Fluids.Components | ||
{ | ||
[RegisterComponent, NetworkedComponent] | ||
public sealed partial class PropulsedByComponent : Component | ||
{ | ||
[ViewVariables(VVAccess.ReadOnly)] | ||
public HashSet<Entity<PropulsionComponent>> Sources = new(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
using Content.Shared.Whitelist; | ||
using Robust.Shared.GameStates; | ||
|
||
namespace Content.Shared.Fluids.Components | ||
{ | ||
/// <summary> | ||
/// This object will speed up the movement speed of entities | ||
/// when collided with | ||
/// | ||
/// Used for mucin | ||
/// | ||
/// This partially replicates SpeedModifierContactsComponent because that | ||
/// component is already heavily coupled with existing puddle code. | ||
/// </summary> | ||
[RegisterComponent, NetworkedComponent] | ||
[AutoGenerateComponentState] | ||
public sealed partial class PropulsionComponent : Component | ||
{ | ||
[DataField, ViewVariables] | ||
[AutoNetworkedField] | ||
public float WalkSpeedModifier = 1.0f; | ||
|
||
[AutoNetworkedField] | ||
[DataField, ViewVariables] | ||
public float SprintSpeedModifier = 1.0f; | ||
|
||
/// <summary> | ||
/// If an entity passes this, apply the speed modifier. | ||
/// Passes all entities if not defined. | ||
/// </summary> | ||
[AutoNetworkedField] | ||
[DataField, ViewVariables] | ||
public EntityWhitelist? Whitelist; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
using System.Linq; | ||
using Content.Shared.Fluids.Components; | ||
using Content.Shared.Movement.Components; | ||
using Content.Shared.Movement.Systems; | ||
using Content.Shared.Whitelist; | ||
using Robust.Shared.Physics.Events; | ||
|
||
namespace Content.Shared.Fluids.EntitySystems; | ||
|
||
public sealed class PropulsionSystem : EntitySystem | ||
{ | ||
[Dependency] private readonly SpeedModifierContactsSystem _speedModifier = default!; | ||
[Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; | ||
|
||
public override void Initialize() | ||
{ | ||
base.Initialize(); | ||
|
||
SubscribeLocalEvent<PropulsionComponent, ComponentInit>(OnComponentInit); | ||
SubscribeLocalEvent<PropulsionComponent, StartCollideEvent>(OnStartCollide); | ||
SubscribeLocalEvent<PropulsionComponent, EndCollideEvent>(OnEndCollide); | ||
SubscribeLocalEvent<PropulsedByComponent, RefreshMovementSpeedModifiersEvent>(OnRefreshSpeed); | ||
} | ||
|
||
public void OnComponentInit(Entity<PropulsionComponent> ent, ref ComponentInit args) | ||
{ | ||
EnsureComp<SpeedModifierContactsComponent>(ent); | ||
} | ||
|
||
public void OnStartCollide(Entity<PropulsionComponent> ent, ref StartCollideEvent args) | ||
{ | ||
if (!HasComp<MovementSpeedModifierComponent>(args.OtherEntity)) | ||
return; | ||
|
||
if (_whitelistSystem.IsWhitelistFail(ent.Comp.Whitelist, args.OtherEntity)) | ||
return; | ||
|
||
_speedModifier.AddModifiedEntity(args.OtherEntity); | ||
|
||
var propulse = EnsureComp<PropulsedByComponent>(args.OtherEntity); | ||
propulse.Sources.Add(ent); | ||
} | ||
|
||
public void OnEndCollide(Entity<PropulsionComponent> ent, ref EndCollideEvent args) | ||
{ | ||
if (TryComp<PropulsedByComponent>(args.OtherEntity, out var propulse)) | ||
{ | ||
propulse.Sources.Remove(ent); | ||
} | ||
} | ||
|
||
public static void OnRefreshSpeed(Entity<PropulsedByComponent> ent, ref RefreshMovementSpeedModifiersEvent args) | ||
{ | ||
ent.Comp.Sources.RemoveWhere((ent) => !ent.Owner.IsValid() || ent.Comp.Deleted); | ||
|
||
if (ent.Comp.Sources.Count == 0) | ||
return; | ||
|
||
var modifier = ent.Comp.Sources.First(); | ||
args.ModifySpeed(modifier.Comp.WalkSpeedModifier, modifier.Comp.SprintSpeedModifier); | ||
} | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
book-text-agony = Space is wide and good friends are too few. | ||
This ritual was performed by Avian Joe, and dictated by Drags-His-Tail. | ||
Foreward, by Avian Joe, on the preparation of the ritual: | ||
The ritual requies both a poison, and an antidote. Charcoal is the easiest to come by, but master chaplains are able to acquire poisoned warlock wine. If not, then they much procude another toxic variant. Either mutagen or something equally sinister. Holy ash from the crematorium is also added for solidity. More of a gristle than a ghastry draught. | ||
N2 is neccesary if supplicants that breathe O2 are attending. Vox are not required to participate in that part of the ceremony. Instead, they may take the tank being used by the attendants as their primary tank after the ritual, to signify solidarity. If the ritual can end without the station interrupting, of course. | ||
Slimes are particularly resilient to torment, and mostly require ingenuity on behalf of the chaplain. | ||
The true power of a chaplain is finding the means within all departments to serve the ritual. Wine from the bar, charcoal from medical, etc. Sector deities may vary, but the purpose of the ritual remains the same. | ||
"I thank all who are in attendence. | ||
I invite any who wishes to come and express solidarity with the vox and our struggle on Nanotrasen stations. | ||
Then, I invite you to partake of the diona ritual of agony. | ||
I will call you forward | ||
And merely follow my instructions until I dismiss you." | ||
A human security officer is chosen from the audience. | ||
"Do you consent to this agony?" | ||
"I do." | ||
A nitrogen tank is produced. | ||
"Don the tank. Connect it to your internals. Then breathe for five gasps." | ||
The human complies. | ||
"So that you may feel the weight of the vox's suffering. | ||
True, you undertake great strides to protect those here, but you cannot protect that which is habitual to Nanotrasen. We vox will be in danger always. And now you know why, and what it feels like." | ||
The human continues gasping, until the five gasps are complete. They remove the tank. A wine glass is produced. | ||
"Now. Drink the blood of the Root of all suffering." | ||
A pill of charcoal is produced. | ||
"Now eat of the earth. That which bore you, cherished you, nourished you. That we all suffer, but we need not suffer alone, For space is wide and good friends are too few. Root take you." | ||
The participant was dismissed, and took their seat once more. | ||
The following instances proceeded in much the same manner, but each participant was addressed differently. After the fact, the chaplain informed me that they do their best to tailor each sermon to the specific participant, be it based on species, job, or personal history. | ||
Do you consent to this agony? | ||
Breathe that which will kill you, for in this absence I would die just the same. But here, in this holy place, you can willfully see the station through my agony, and with understanding comes solidarity. | ||
This piece of home will purge the agony that sits in your lungs and stomach, but trust it is not the only agony we will rescue you from. | ||
Take heart that your community is here, for space is wide and good friends are too few. Root take you. | ||
Do you consent to this agony? | ||
Take on the air of an alien presence. Five gasps will settle into your body. And through that, you may know the weight of my people, for our time is always ticking, louder and faster than yours. | ||
You may remove the tank, for it is not for cruelty's sake we ask you to suffer so, but so you may recognize our grievances. | ||
Drink the blood of the Root of all agony, that which does not discriminate. In it, we are equal. Through it, we deny apathy. | ||
Eat of the earth, so that it may cleanse these impurities that fester inside. | ||
Take this to heart and share it. For space is wide and good friends are too few. Root take you. | ||
Do you consent to this agony? | ||
Don the tank. Take on a burden equal to your shell. A grip tighter than the mucus you leave behind. A solidarity that can unite our people and the crew of this station. You may remove the tank. | ||
Drink the blood of the Root of all suffering. This too will try to end you. But you have learned to deny it. To Persist. Endure. Even when the station fails you, we, your community, will not. For space is wide and good friends are too few. Root take you. | ||
Do you consent to this agony? | ||
Don the tank. Connect it to your internals, and breathe for five gasps. That will be enough to leave you an understanding of the vox, and the harrowing existence we live on this station. Should we fail to mointor the tank's supply, our life will ebb and perish. But this will be momentary for you. Nanotrasen knows you are a majority, and the station will care for your lungs, but take care to give care to ours. You may remove the tank. | ||
Drink the blood of the Root. (A cola is provided in lieu of alcohol for an underage participant) That will suffice. There is enough sugar in cola these days, that it is poison enough. Agony of the highest thrill. | ||
Eat of the earth, this will cleanse your suffering of the nitrogen and the bloat of sugar. We stand with you on this pedestal of suffering, willful and proud, for space is wide and good friends are too few. Root take you. (Note, suggest Fourteen Loko as a substitute. That shit is actually poison.) | ||
(The chosen participant was a slime.) | ||
Do you consent to this agony? | ||
Nitrogen will not harm you, but this dice may. Pick it up, roll it. Odds, or evens? (The participant chooses odds. The dice is cast, the result is a 4. The participant is hit twice with a bible.) | ||
Drink the blood of the root. That which seeks to restain us from the highest heights of ambition, it seeks to lower us to the ground. Where it can drain us of such nutrients. | ||
The earth, eat of it. It is a natural force. It brings down the arrogant and lofty. But it can drag the innocent and ignorant as well. For space is wide and good friends are too few. Root take you. | ||
Do you consent to this agony? | ||
Breathe for five gasps. Take in our struggle, as you would any breath, but let this sink past the lungs you rely on, and burn into your being the knowledge of the vox's agony. You may remove the tank. | ||
Drink the blood of the Root. The source of all suffering. It will nourish as much as it takes from you. | ||
Eat of the earth. Let it purge you of the selfish qualms of intrusive thoughts, telling you of your own worries and agonits. Merely accept them as you would accept my own, and let kindness reign in your heart in defiance. For space is wide and good friends are too few. Root take you. | ||
Do you consent to this agony? | ||
Don the tank. Take in my air. The air that lies opposite of your own. Particles capable of slaughter, as much as they are of sustaining life. You are blessed to know both. | ||
Drink the blood of the Root. This source of that which is both joy and horror. Seek balance between these, for the Root of all suffering cannot designate as such. | ||
(The preist had run out of charcoal, but a previous participant had procured a bottle of dylovene pills instead.) Eat of the dylo. And let it perform its medicinal miracle. For space is wide and medical students labored hard over these. Root take you. | ||
At this point, the ritual materials were all but exausted, and the priest was, ironically, out of nitrogen. We rushed to medical to get them treated and their tank refilled. They survived the ordeal unharmed. |
Oops, something went wrong.