Pipes and pipe items now have a pipe_layer var which controls which layer they're on.
Current pipes now only connect to other pipes on the same layer as them, and it is possible to stack multiple pipes on a tile.
The layer of a pipe item can be changed by using a pipe planner, aligning with a built pipe using the RPD or a pipe item, or setting the alignment on the pipe dispenser.
Added the isConnectable() proc for OOP way of checking if two pipes can do the do.
Added the layer manifold - this pipe has 5 connectors on one side, and one on the other. It acts as a layer converter.
Pipes change their pixel_x and pixel_y according to their pipe layer.
Applies datum pooling to pipelines and pipenetwork for major performance improvements in their deletion.
These improvements should be especially noticeable in anything that deletes pipelines/networks once per tick, ie singulo narsie and supermatter
Removes the wires qdel, just why
The last time I dealt with mirrors, the implementation got fudged. Some were flipped but had the same dirs, some were flipped and had the opposite dirs, etc.
This fixes all that by making all mirrors have the same dirs, but different node positions.
Fixes#3140.
Tanks are now unaries, not pipes.
Portable connectors are now unaries, not their own type.
Valves are now binaries, T-Valves are now trinaries.
Pipes as much as possible now use the general attackby code.
Slight changes to pooling code.
Removed loads of duplicate code that existed for no real reason.
T-Valves now come in manual and digital and mirrored under those types, not the other way around.
Mirrored connecting sprites for T-Valves should show up properly now.
Never again.
* Make airlock control computers and vents configurable with multitools. Harder than it looks.
* Refactor the clusterfuck of redundant bullshit in pipe construction.