Page 1 of 1

Combinator scalability and maintainability

Posted: Sun Aug 16, 2020 5:07 pm
by Delicon
Problem: Combinator creations are large and difficult to maintain, discerning functionality is arduous when revisiting their design at a later time.
Suggestion: Break combinators into functional groups, a bit like functions or classes in software.

I LOVE Factorio, I have been playing for nearly 5 years and I am still learning new things. My friends and I start a new multiplayer game about once a year and try to solve problems that don't need to be solved, in really interesting ways. I am thrilled for the Wube team and the recent 1.0 release, but I am bummed as well. I feel like they are ready to move on and leave Factorio behind. I know the chance of any new content is pretty slim at this point given the release, recent Factorio Friday posts, and the shutting down of Factorio Friday, but I thought I would give it a try and make a suggestion.

Combinators are a large part of end game design. They have two critical issues, they don't scale well and they are difficult to maintain. I think it's important to address the issues in that order, the lack of scalability makes them harder to maintain.

The physical size of the combinator, although understandable from a UI perspective, becomes cumbersome from usability stand point. They take up a large portion of space for very little functionality. This necessitates more and more combinators to accomplish simple tasks.

Examples:
  • Filtering N signals out of a circuit - N+1 combinators.
  • Subtracting red from green - 2 combinators
  • Multiplying red and green - 5 combinators
  • Addressable memory cell - 3 combinators
It's not uncommon to build creations that are 20 - 50 combinators for memory banks, TDM communications, CSMA communications, warehouse order processing, or supply train control. As I develop complex circuits, I have logical groups spaced out so I can more easily understand their purpose. I can end up with a field full of combinator groups and electric poles everywhere to facilitate the signals between them. That type of layout is great for development, but to use it in a real game, all those combinators need to be packed together as tight as possible (which is it's own challenge). Then blueprinted, shared, and used in game.

When returning to that circuit to modify it a week later, it is faster to rebuild the thing from scratch than to try and make sense of the block of mashed together combinators. At this point, I suspect someone will suggest that I save each creation in it's own development session. It's a great idea and I do that, except you once again have to pack together combinators after making a change. Even with the incredible Picker Dollies mod (everyone should have this), packing combinators is a non trivial task. More often though I need to tweak something right there in a live game. Leaving the game, loading my development save, making changes, packing combinators, is all time I am not playing with my friends.

What I am suggesting is a way to 'compile' a group of combinators together that are then represented by a single combinator. This reduces the overall space needed for physical combinators. It also keeps things in logic groups with names, maybe in this case I create a memory cell. I can then take a bunch of memory cells and 'compile' them together to make a memory bank. Understanding the functional design becomes trivial and components are reusable, for the same reason functions and classes work for software. It maintains the spirit of the combinator idea that is unique to Factorio and I don't think the space reduction is cheating. These are logical functions not an assembler, belt, or inserter. I can fit 4800 Processing Units in a 1x1 chest, but I need 2x1 to divide iron plate by two (I know, not a fair comparison since a train car can hold 200 train cars!) But still, I think it maintains the spirit.

"But there are mods for this already Delicon, go home.", says the masses.

Nope, there are not. Just because a mod exists, doesn't mean it's functional and maintained. I know Factorissimo2 and Circuitissimo have this functionality to some degree. Factorissimo2 only allows a reduced signal set to be used, a quote from it's FAQ, "This design is intentional, since transferring signals is very UPS expensive for technical reasons." Circuitissimo is alpha at best and as with any mod, at the whim of the mod creator's attention span. I think the idea of Circuitissimo is a great partial solution but will not be able to nest designs without again worrying about space and smashing combinators together into a block.

"But Delicon, you could make/take over/expand a mod yourself", says the masses.

Nope, I can't do that. That isn't a passion for me, any more than building my house with my own hands.

I think combinators are a powerful, deep addition to Factorio that have been ignored for a very long; it's time for some love.

Re: Combinator scalability and maintainability

Posted: Mon Aug 17, 2020 5:43 am
by ssilk
Delicon wrote: Sun Aug 16, 2020 5:07 pm I think combinators are a powerful, deep addition to Factorio that have ignored for a very long; it's time for some love. Also it would be incredible if there was a combinator that used the red and green wires as separate operands, red divided by green or red % green, could you imagine the possibilities?!
So if that’s your suggestion then I need to join it with existing. :)

I make a golden bridge.

List of things that should be changed with circuits/combinators:
- possibility to handle red and green wires separated in combinator.
- enable moving combinators around (picker dollies)
- enable circuitissimo-like reduction of a number of circuits into one entity, while having more than just a comment on it, how it works
- a timer combinator; creates pulses every n ticks or turns off after n ticks when triggered.
- kind of debug-mode; reduce speed of a circuit, see values in wires/combinators changing
- get rid of red/green wire and power cable, they have zero game value and block your inventory, instead make them free and use with keyboard shortcuts.
( https://mods.factorio.com/mod/WireShortcuts )
- ... add own ideas ....

Re: Combinator scalability and maintainability

Posted: Mon Aug 17, 2020 5:52 am
by Delicon
ssilk wrote: Mon Aug 17, 2020 5:43 am
Delicon wrote: Sun Aug 16, 2020 5:07 pm I think combinators are a powerful, deep addition to Factorio that have ignored for a very long; it's time for some love. Also it would be incredible if there was a combinator that used the red and green wires as separate operands, red divided by green or red % green, could you imagine the possibilities?!
So if that’s your suggestion then I need to join it with existing. :)
I guess I should not have been cute with that last sentence. It was meant to be like, 'and if a developer wanted to throw in a bonus feature!' I guess people tend to remember the first and last thing they read, I will remove it so the focus stays on the real issues, scalability and maintainability.

Re: Combinator scalability and maintainability

Posted: Mon Aug 17, 2020 6:13 am
by ssilk
What I meant is, that this suggestion is not very clear. I leave it here, because it points to many more suggestions around combinators, wires and so on... :)

Re: Combinator scalability and maintainability

Posted: Mon Aug 17, 2020 7:50 pm
by Oscar
There is another discussion on a similar topic, could offer some interesting options that will solve at least some of the problems stated: viewtopic.php?f=6&t=79407

especially this mod which was mentioned in there: https://mods.factorio.com/mod/fcpu

Re: Combinator scalability and maintainability

Posted: Tue Aug 18, 2020 8:11 am
by Delicon
Oscar wrote: Mon Aug 17, 2020 7:50 pm There is another discussion on a similar topic, could offer some interesting options that will solve at least some of the problems stated: viewtopic.php?f=6&t=79407

especially this mod which was mentioned in there: https://mods.factorio.com/mod/fcpu
fCPU fundamentally changes circuits by adding a processor. Although that does help with scalability and maintainability, it breaks from the spirit of combinators.

There was a game called Robot Odyssey from The Learning Company, only the old and insane among us will remember. You can play it in your web browser here. Anyway, as part of its Innovation Lab (a basic sandbox), it had a prototype chip that you went inside and laid out logic circuits. After you got the circuit working the way you wanted, you could burn/compile it into a single reusable/copyable entity. You could then use that compiled circuit in other more complex circuits and burn/compile those.

This method would make discerning functionality with a glance instead of an hour of concentration. It also reduces the combinator field you currently need to put next to complex builds down to a couple custom compiled functional combinators you created.

Re: Combinator scalability and maintainability

Posted: Mon Sep 28, 2020 2:47 pm
by McDuff
An idea I had which would work to achieve this would be to let combinators have more than one operation. I had suggested a box layout similar to visual scripting languages before, but factorio already has a suitable kind of layout in the Rail Stop.

Below is a diagram of how it might look.
Untitled Diagram.png
Untitled Diagram.png (31.48 KiB) Viewed 5561 times

Re: Combinator scalability and maintainability

Posted: Mon Sep 28, 2020 5:25 pm
by eradicator
Delicon wrote: Tue Aug 18, 2020 8:11 am After you got the circuit working the way you wanted, you could burn/compile it into a single reusable/copyable entity. You could then use that compiled circuit in other more complex circuits and burn/compile those.
Isn't that exactly what vanilla blueprints do except for the "make it physically smaller part"? And isn't that "make it smaller" part exactly what blueprinting a Circutissimo does? So recursion is all that's missing?

Just trying to understand what exactly you say is missing here. I've made some drafts of my own for a menu-based multi-combinator. I just drafted it because it sounded interesting, but in the end decided it's not interesting enough to me to put in the hours to make it into a fully functional and polished mod. To put it in your words "It's not my passion". Also I have my doubts about how well a "menu based" approach fits into factorio.

Re: Combinator scalability and maintainability

Posted: Tue Sep 29, 2020 4:24 am
by ssilk
McDuff wrote: Mon Sep 28, 2020 2:47 pm An idea I had which would work to achieve this would be to let combinators have more than one operation. I had suggested a box layout similar to visual scripting languages before, but factorio already has a suitable kind of layout in the Rail Stop.

Below is a diagram of how it might look.

Untitled Diagram.png
McDuff, I like this idea, but I see that as not depending to this subject, it’s in my eyes completely different. Can you please make an extra suggestion out of it with a bit more explanation behind? :)

Re: Combinator scalability and maintainability

Posted: Sat Mar 13, 2021 5:01 pm
by Delicon
eradicator wrote: Mon Sep 28, 2020 5:25 pm Isn't that exactly what vanilla blueprints do except for the "make it physically smaller part"? And isn't that "make it smaller" part exactly what blueprinting a Circutissimo does? So recursion is all that's missing?
Recursion is part of it, but it's more about abstracting. It's why modern programming languages are human readable. We see a function called UpdateSteamLevelIndicator(). You don't need to understand the what the variables a, b, c, d, e, f, and g are doing in that function to understand what role it plays. If I did look in the function, there may be other functions like ReadSteamLevel() and ConvertSteamValueToPercentage(). Easy to understand what's happening there.

Circuitissimo accomplishes the same thing by packaging complex native functionality into a smaller unit, no new functionality being added. That unit can then be duplicated and incorporated into other designs. From a simulation stand point, nothing would change, it would be the same as if the combinators were laid out across a large field. The problem with Circuitissimo is that it appears to be abandoned and is a bit of a kludge because of the limitations of mods. That is not a criticism of the mod maker. I am the same way, something sparks my interest, I work on it until I can solve it, then it bores me.

Combinators are the best feature of Factorio, I also believe the worst. Scaling a combinator design is a nightmare, just look at any of the insane things folks have posted, FactoRayO v2.0 and First functioning programmable computer! for example. I know these are extreme examples, but I am sure everyone has a design that they came back to, even after a week, and found it easier to spend the time remaking it with a new feature than figure out what's going on with the old design.

Re: Combinator scalability and maintainability

Posted: Sun Mar 14, 2021 4:22 am
by ssilk
Yes, that’s true. Building with wires/combinators is one of the big issues in Factorio.

The main reason for that is, that the readability of that stuff is really bad.

- in narrow places it’s often unclear, where a wire goes in/out, because of all the overlapping with poles and other wires
- if there are more than two combinators, then it is really quickly quite complicated to find out the functionality
- you easily make errors, because you cannot test what you build, especially
— timings
— behavior in low power mode
— behavior with strange input
- you cannot get a simple overview of what a complex circuit is doing...

And a lot of smaller things more.

I’ve made a suggestion about that: viewtopic.php?f=6&t=41176 Improve Basic Circuit Overview

And I mention it here, because I think this two things (overview/simple reading and grouping of components) are tightly hanging together.

Re: Combinator scalability and maintainability

Posted: Sun Mar 14, 2021 2:25 pm
by Optera
I kinda agree yet totally disagree since the examples presented are so simplistic to me.

A timer or clock only takes 1 CC and 1 DC.
Filtering only positive N signals takes 5 combinators, positive and negative takes 7: viewtopic.php?p=447487#p447487

What combinators need is the ability to edit them from map view including changing up wiring.
Currently you have two options: go there yourself or cut-paste it next to you, change things, cut-paste it back (and figure out you missed copying one power pole essential to the rewiring).

Re: Combinator scalability and maintainability

Posted: Sun Mar 14, 2021 2:30 pm
by ptx0
Delicon wrote: Tue Aug 18, 2020 8:11 am fCPU fundamentally changes circuits by adding a processor. Although that does help with scalability and maintainability, it breaks from the spirit of combinators.
that's what your suggestion does, too, imo.

don't let perfection stand in the way of good enough.

Re: Combinator scalability and maintainability

Posted: Sun Mar 14, 2021 9:11 pm
by Delicon
ptx0 wrote: Sun Mar 14, 2021 2:30 pm that's what your suggestion does, too, imo.
Fair enough. But this suggestion doesn't alter the mechanics of the game. It will not improve performance of your PC. No new feature would be added that you didn't have before. It would basically package groups of combinators into a single unit and allow them to be named. The only thing that would actually change is the amount of real estate the combinators consume.
Optera wrote: Sun Mar 14, 2021 2:25 pm I kinda agree yet totally disagree since the examples presented are so simplistic to me.

A timer or clock only takes 1 CC and 1 DC.
Filtering only positive N signals takes 5 combinators, positive and negative takes 7: viewtopic.php?p=447487#p447487
Individually, sure, they are simple. But in a grid of 10x10 combinators, it's not so easy to suss out meaning.

Re: Combinator scalability and maintainability

Posted: Sun Mar 14, 2021 10:44 pm
by ptx0
well, i don't want to be negative, but i don't think this idea will be implemented - ever.

however, we can see how close we can approximate it with mods and then you could open a mod interface request if something is not doable.

https://mods.factorio.com/mod/ImprovedCombinator

https://mods.factorio.com/mod/advanced-combinator

Re: Combinator scalability and maintainability

Posted: Mon Mar 15, 2021 12:07 am
by Delicon
ptx0 wrote: Sun Mar 14, 2021 10:44 pm well, i don't want to be negative, but i don't think this idea will be implemented - ever.
You and I both, but we can hope something comes along to make it better.

Re: Combinator scalability and maintainability

Posted: Sat Oct 05, 2024 10:45 am
by Calid
I was going to suggest the same idea, thankfully, found this topic.

Factorio needs circuit abstraction.

Huge bump.

Re: Combinator scalability and maintainability

Posted: Sat Oct 05, 2024 12:29 pm
by robot256
Combinators in 2.0 will have a "comment" field that is saved in blueprints. They also support operations on more than one signal at a time (not just with the wildcard signals). I'm really looking forward to documenting my spaghetti.

And we have mods like https://mods.factorio.com/mod/circuitissimo yet

Re: Combinator scalability and maintainability

Posted: Sun Oct 06, 2024 1:14 am
by DarkShadow44
As mods go, I like Compact Circuits the most.