Skip to content

Smoke particles on blocked pipe pistons - #1381

Open
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke
Open

Smoke particles on blocked pipe pistons#1381
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke

Conversation

@RasmusKD

Copy link
Copy Markdown
Contributor

A blocked pipe system is invisible from the outside: pulses arrive, nothing moves, and finding the stuck piston means watching every piston at the exact moment a pulse happens.

A pull that is refused everywhere now marks the piston blocked, and a repeating task (every 12 ticks) keeps it visibly smoking. The next pull that delivers anything clears the flag, and the flag is also dropped when the piston or its source container is removed. The pulse-time puff is throttled per piston so fast clocks read as a steady chimney rather than a particle storm.

Gated by 'full-pipe-smoke' (default on). Same pull-loop area as #1376/#1378/#1380, happy to rebase whichever lands last.

A blocked pipe system is invisible from the outside: pulses arrive,
nothing moves, and finding the stuck piston means watching every one of
them at the moment a pulse happens. A pull that is refused everywhere
now marks the piston blocked and a repeating task keeps it smoking, so
a stuck system can be found by looking at it. The next pull that
delivers clears the flag, and the flag is dropped when the piston or
its source container is removed. Gated by 'full-pipe-smoke' (default
on).
@me4502

me4502 commented Aug 19, 2026

Copy link
Copy Markdown
Member

How does this interact with the round robin PR? My assumption is that doing this round-robin would alleviate "stuck" pipes for the most part – so what "defines" stuck in those cases?

@RasmusKD

Copy link
Copy Markdown
Contributor Author

They compose pretty well. Blocked here means a pull happened and every item came back, and any delivering pull clears it. With round robin an unroutable stack only causes one refused pulse per rotation, so at most you get a short puff before the next delivery clears it. Steady smoke only happens when nothing in the container can go anywhere, outputs full or everything filtered out, which is exactly the case round robin can't help with.

If both land I can gate the persistent smoke on a full unproductive rotation instead of a single refused pull, so the one-slot case doesn't puff at all.

Emptying the container by hand left the piston smoking forever, since
the flag only cleared on a delivering pull. A pulse that finds nothing
to pull now clears it too, a pipe with nothing to move is not stuck.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants