tobspr-games / shapez.io

shapez is an open source base building game on Steam inspired by factorio!
https://get.shapez.io/gh
GNU General Public License v3.0
6.42k stars 1.24k forks source link

[Feature Request] My Feature Request Dump #964

Closed Garr890354839 closed 2 years ago

Garr890354839 commented 4 years ago

T Compact Merger/Splitter: There are times in this game where I run into the need for one of these. This is a device where, in the case of the merger, the inputs are on opposite sides and the output is on the side adjacent to both of them. The same goes for the splitter, but with flipped input/output.

The above suggestion would be highly liked by the community, the below suggestions are all related to wiring.

Wire Crossings: I don't need wire crossings to cross wires of two different colors, they should naturally be able to be placed overlapping each other.

Extra Wire Colors: I can count on one hand the number of times having only 2 colors worked the first time around. The rest, I have to design around this fact, and sometimes that is simply impossible. Having just two colors is great for building simple, dumb machines. As soon as you throw any amount of brain into a machine in this game, the size of the brain grows practically exponentially. How many are needed? Seven, because you can cross wires.

Wire Values: For boolean sources, even if one source is a 1 and another is a 0 and they are outputting onto the same wire, the wire does not send anything out. It should output 1. This would remove the need for the OR-gate because wires act as or gates already. For shapes, the current behavior is fine, but booleans and shapes/paints need to be on different layers.

A Buffer Gate: This is a gate that delays the input by one tick and outputs it.

EmeraldBlock commented 4 years ago

My personal opinions on those wires things:

Wire Crossings are still useful when you cross the same-color wire, which can still come in pretty handy (for example, when you have to cross two adjacent wire lines). Placing two wires on the same tile would also be a completely new mechanic, which might be excessive, though the consequences may be neat.

Extra Wire Colors feel like too much. A third wire might be beneficial, but anything past that just clutters the wires variants. They might have potential for their own system, but I feel the current wires system is pretty unique and interesting (or maybe not, I don't know much about other games). Wire insulators used to be a thing (just a single pipe of a wire crossing), and they enabled for some pretty great designs even with only one wire color, as was the case back then. I think 2/3 wires plus wire insulators and crossings would make for a simple, yet powerful set. More colors may be useful for color-coding, but there are likely better alternatives (like a separate marker building, maybe?).

Wire Values are quite cool and powerful as-is, and your suggestion takes out a lot of the nuance of the system. Conflicts are, in my opinion, super cool, and are a mechanism I doubt you'd find elsewhere. The same goes for the distinction between 0 and null, and both let you design a lot of unique machines. I assume you want to treat 0 as null, but will null still be a separate thing? If null is gone, filters will not be able to be "force jammed", which makes them stop entirely. Also, moving booleans and items to two separate layers both makes things unnecessarily complicated and harder to use.

A Buffer Gate is most definitely something I want, though and IF with a 1 for a side input does just the same (with an additional tile), so maybe if the gate allowed for arbitrary delay? Not too sure on that one.

darkwater4213 commented 4 years ago

I would like all of these.

Garr890354839 commented 4 years ago

Well, to answer your value point emerald block, "0" becomes the new null, because that makes sense. If there is no output on a wire, then by default it becomes 0. It makes absolutely no sense to even have a null state in the first place because real life logic wiring (and I am aware that logic gates require power to function) does not have a separate null state, it is either high or low. What the voltage is, that is irrelevant as it differs between applications. Filters being "force locked" would be impossible, yes, but there are simple ways to design around that.

EmeraldBlock commented 4 years ago

Firstly, I would like to point out that this is a video game (when did redstone ever make any real-life sense? for example). And the low state is still not the same as no power at all, too. I reiterate that the distinction between 0 and null is one major reason why shapez.io wires are so unique, and personally, I don't recall a case where I felt this made things much harder for me.

Garr890354839 commented 4 years ago

I was not thinking about filters at the time of the suggestion. But the way I design makes all filters not force-locked. In fact, the main point of that suggestion is to make wires have multiple values, similar to aux cables.

For wiring, yeah, I may be asking for too much now but if I am given less than that I will still somehow find a need for more (for example, in the desktop version of Terraria they give you 4 wire colors, and I have run into the need for 5). Three is almost necessary. Besides, the keybind could easily be removed and you can click the variants under the tooltip.

For wire crossing, I didn't say, "we don't need them at all", I said, "we don't need them for different colored wires" (which is consequently one of the only things I use them for).

For the buffer point, it appears that you can change wire colors with NOT gates/transistors. The problem is that, although simple to implement in theory, in practice it is far harder to implement.

EmeraldBlock commented 4 years ago

A thought that I (and a few others) had was for wire insulators/crossings to let you change wire colors, which would honestly be pretty handy and cool. I still feel the same about the wires things, though

edorfaus commented 3 years ago

Just a comment regarding real life logic wiring not having a separate null state, and allowing 0 to be overridden by 1: this is not really true, at least not in the most common case.

Modern logic gates usually pull both up and down strongly, meaning they are close to being a short to either the power rail or the ground rail (for high or low logic output respectively). Therefore, if you connect the outputs of two gates together, and one is high while the other is low, then you essentially have a short between power and ground, which is not something you want. I think this is a fairly close analog to a conflict - I think it's actually termed "bus conflict" when it happens on a real-life data bus.

You can also get gates that use what is called "tristate logic", which basically means they have a separate input for "turning off" the outputs, so that they don't pull either up or down. This is a close analog to having a separate null state. In fact, you can easily get chips that are nothing more than tristate buffers - to interface chips without such outputs to a bus that expects them - which says something about how common this is.

Alternatively, you can get gates with what is called "open collector" or "open drain" outputs, which I think is closest to what you were saying - when low, they pull strongly down, but when high, they don't pull up. Thus you can connect the outputs of several together, with a common pull-up resistor, and if any of the gates are low then the line is low. (Note that this is the opposite of what you said, but generally equivalent.) I think this is usually used more for interfacing between different voltage levels than for implementing your own ORs though.

I can't remember encountering gates that are open the other way - actively pulling up but not down - but it wouldn't surprise me if that also exists. I don't think it's as common as the other variants though.


That out of the way - I tend to agree that it's sometimes annoying to get a null instead of a 0, and that the behavior of machines with null inputs is sometimes less than useful, but at the same time having those values distinct is sometimes useful. Also, it's part of the challenge - I haven't yet found a scenario where I couldn't get what I wanted fairly easily. But then, I'm used to handling nulls while programming, so that might be part of it for me. I could probably find a way to do most of it even if they were merged like that. (Excluding things that would become impossible, like outright blocking the filter.)

Separately, I have to disagree with the idea of "solving" the problem of too many variants by removing the keybinding and using the mouse to select instead. In my opinion, that "solution" would just make the problem worse, since using the mouse is slower and less convenient (at least for me), and takes the focus away from the area I'm working on. If you want to use the mouse instead of the keyboard, that's fine (and you can already do that), but that doesn't mean that everyone should have to.

I do agree that it's somewhat limiting to only have two wire colors though - I have so far managed anyway, though sometimes only by recoloring several sections of wire, and spreading things out a bit (making it less compact). However, I don't think the potential need for recoloring could really be avoided even given an arbitrarily high number of colors, so I'm inclined to dismiss that point. The four-color theorem suggests more than 4 is not ever necessary even without spreading out, except I'm not sure it applies since crossings are available. I don't think I've encountered a scenario where I'd need more than 3 though.

On the other hand, at least to me, this is just another one of those artificial restrictions that are part of the challenge of the game. However much I might wish for more wire colors sometimes. If I wanted things to be easy, I could do something simpler.

dengr1065 commented 2 years ago

All of that is available in mods, such as shapez Industries and Wires+.