Skip to content

Separatory Funnel#4068

Open
SaintIWNL wants to merge 3 commits into
Monolith-Station:mainfrom
SaintIWNL:Separatory-Funnel
Open

Separatory Funnel#4068
SaintIWNL wants to merge 3 commits into
Monolith-Station:mainfrom
SaintIWNL:Separatory-Funnel

Conversation

@SaintIWNL

@SaintIWNL SaintIWNL commented May 27, 2026

Copy link
Copy Markdown
Contributor

Allows players a low level method of separating chemicals, selects the lowest amount of chemicals first and filters it to selected beaker.

About the PR

New item to help chemical creation

Why / Balance

Chemical mechanic PR

Media

https://streamable.com/9ce6nk

Requirements

  • I have read relevant guidelines/documentation to this PR found on our devwiki.
  • I have added media to this PR or it does not require an ingame showcase.
  • I can confirm this PR contains either no AI-generated content, or AI-generated content that meets our guidelines.

How to test

Breaking changes

Changelog

Allows players a low level method of separating chemicals, selects the lowest amount of chemicals first and filters it to selected beaker.
@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

RSI Diff Bot; head commit be1985f merging into 3f32752
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/_Mono/Objects/Misc/beakerfilter.rsi

State Old New Status
funnel Added

Edit: diff updated after be1985f

Comment on lines +13 to +18
[RegisterComponent]
public sealed partial class SeparatoryFunnelComponent : Component
{
[DataField("delay")]
public float Delay = 2.5f;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be its own file, and use just [DataField] + add [NetworkedComponent]

[Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = null!;
[Dependency] private readonly SharedDoAfterSystem _doAfter = null!;
[Dependency] private readonly SharedPopupSystem _popup = null!;
[Dependency] private readonly TagSystem _tag = null!;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove readonly from all dependencies

Comment on lines +44 to +48
private void OnMapInit(EntityUid uid, SeparatoryFunnelComponent component, MapInitEvent args)
{
// Prevents players from using a finished funnel to craft ANOTHER funnel
_tag.RemoveTag(uid, "GlassBeaker");
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't, just have it not have the beaker tag
currently tagcomp is non-inheriting so you can do - type: Tag\ntags: [] on it

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move to _Mono and properly name it as SeparatoryFunnelSystem.cs

Comment on lines +97 to +107
// Dump all of that specific reagent
var transferAmount = FixedPoint2.Min(lowestReagent.Quantity, targetSolution.AvailableVolume);

if (transferAmount <= FixedPoint2.Zero)
{
_popup.PopupClient("That container is full!", target, user);
return;
}

_solutionContainer.RemoveReagent(funnelSolutionEnt.Value, lowestReagent.Reagent.Prototype, transferAmount);
_solutionContainer.TryAddReagent(targetSolutionEnt.Value, lowestReagent.Reagent.Prototype, transferAmount, out _);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use SolutionTransferSystem

Comment on lines +57 to +59
// Stop chemicals from disappearing when used on player
if (HasComp<MobStateComponent>(target) || !_solutionContainer.TryGetInjectableSolution(target, out _, out _))
return;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do what SolutionTransferSystem does instead of checking for specifically mobstate, here and below
specifically, check for RefillableSolution on target

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants