Proposal to fix: the pulse function on inserters (+belts?) is inconsistent under low power.
Posted: Sun Nov 15, 2020 12:55 am
In this topic I demonstrated an inconsistency between inserters and combinators under low power conditions, (namely that the pulses from inserters do not slow down under low power like those from combinators do,) thinking it was a bug.
I was told it's not a bug, but it's still inconsistent behavior, so I made another topic on the inconsistency itself, and argued that it should be alleviated by making all logic devices behave consistently under the same low power conditions. Over the course of the topic, I hashed out a potential solution, which I present in its most refined form at the end of this post, as "The proposal". Unfortunately, there were two major objections that mired down the thread and ultimately resulted in it being locked without a clear resolution. To hopefully prevent the same here, I will address them first:
Objection 1, the direct cause of the previous thread's demise, was, as most charitably interpreted, that the inconsistency would only be encountered under 50% power satisfaction, and therefore wasn't worth addressing, either because it represented a problem to be solved, or because it would not be encountered enough to matter. (I will note, however, that the language from certain parties suggested something much closer to "LOL u sux just git mor power & git gud n00b".)
Superficially, I can immediately point out that these two justifications are mutually exclusive; a problem to be solved is a poor problem indeed if it is not encountered enough to matter.
To refute them more directly, though, this inconsistency disproportionately targets less experienced players who are not as familiar with or not as diligent about managing electricity, and yet requires very thorough understanding of certain internal game implementations (namely the behavior of combinator energy buffers) otherwise irrelevant to gameplay in order to even hope to diagnose. Due to the nature of energy buffer cycling, the problem only rears its head intermittently (when the pulses are out of sync), and worse still, the conditions required for it to occur may themselves be intermittent (since power may only occasionally be dipping below 50% due to bot use or biter attacks), making it very difficult to reproduce. Worst of all, the symptoms may manifest as literally anything, given the Turing completeness of combinator logic.
If inflicting a highly intermittent problem with high diagnostic knowledge requirements and practically unlimited potential consequences on players in inverse proportion to their experience level isn't atrocious game design, it must be sadism.
Finally, in addendum, the behavior is nonetheless inconsistent, which, of itself, should be sufficient cause for action.
Objection 2, from boskid, was that the proposal would result in implementation problems for logic interactions across different electrical networks. I and others replied that leaving such cases as is would be sufficient, (owing to the diagnostic aid of knowing that different electric networks are involved,) but did not receive any response before the thread was terminated. Consider this an open invitation to challenge such specifics of the proposal.
To provide additional perspective on the problem, and an alternate solution in case the proposal ultimately proves unfeasible, for this thread I've prepared a less preferable (Edit for clarity: this means here for discussion purposes; see proposal below for actual implementation), but ridiculously simple "easy fix":
Remove the pulse function from inserters (and maybe belts).
I see no reason unsuspecting players should be lured into using a flawed implementation of a pulse function with potentially disastrous consequences when they could instead be encouraged to reproduce a reliable version so trivially: If at all possible, however, the following proposal would be superior, as it includes the side benefit of helping optimize the game's performance, especially for complex and interesting logic creations like Facto-RayO:
I was told it's not a bug, but it's still inconsistent behavior, so I made another topic on the inconsistency itself, and argued that it should be alleviated by making all logic devices behave consistently under the same low power conditions. Over the course of the topic, I hashed out a potential solution, which I present in its most refined form at the end of this post, as "The proposal". Unfortunately, there were two major objections that mired down the thread and ultimately resulted in it being locked without a clear resolution. To hopefully prevent the same here, I will address them first:
Objection 1, the direct cause of the previous thread's demise, was, as most charitably interpreted, that the inconsistency would only be encountered under 50% power satisfaction, and therefore wasn't worth addressing, either because it represented a problem to be solved, or because it would not be encountered enough to matter. (I will note, however, that the language from certain parties suggested something much closer to "LOL u sux just git mor power & git gud n00b".)
Superficially, I can immediately point out that these two justifications are mutually exclusive; a problem to be solved is a poor problem indeed if it is not encountered enough to matter.
To refute them more directly, though, this inconsistency disproportionately targets less experienced players who are not as familiar with or not as diligent about managing electricity, and yet requires very thorough understanding of certain internal game implementations (namely the behavior of combinator energy buffers) otherwise irrelevant to gameplay in order to even hope to diagnose. Due to the nature of energy buffer cycling, the problem only rears its head intermittently (when the pulses are out of sync), and worse still, the conditions required for it to occur may themselves be intermittent (since power may only occasionally be dipping below 50% due to bot use or biter attacks), making it very difficult to reproduce. Worst of all, the symptoms may manifest as literally anything, given the Turing completeness of combinator logic.
If inflicting a highly intermittent problem with high diagnostic knowledge requirements and practically unlimited potential consequences on players in inverse proportion to their experience level isn't atrocious game design, it must be sadism.
Finally, in addendum, the behavior is nonetheless inconsistent, which, of itself, should be sufficient cause for action.
Objection 2, from boskid, was that the proposal would result in implementation problems for logic interactions across different electrical networks. I and others replied that leaving such cases as is would be sufficient, (owing to the diagnostic aid of knowing that different electric networks are involved,) but did not receive any response before the thread was terminated. Consider this an open invitation to challenge such specifics of the proposal.
To provide additional perspective on the problem, and an alternate solution in case the proposal ultimately proves unfeasible, for this thread I've prepared a less preferable (Edit for clarity: this means here for discussion purposes; see proposal below for actual implementation), but ridiculously simple "easy fix":
Remove the pulse function from inserters (and maybe belts).
I see no reason unsuspecting players should be lured into using a flawed implementation of a pulse function with potentially disastrous consequences when they could instead be encouraged to reproduce a reliable version so trivially: If at all possible, however, the following proposal would be superior, as it includes the side benefit of helping optimize the game's performance, especially for complex and interesting logic creations like Facto-RayO:
The proposal
- Remove the energy buffer from dedicated logic devices (combinators).
- Install corresponding buffers/"logic clocks" on each electrical network instead
- Redirect combinator UI elements that previously showed energy buffer levels to the electric network satisfaction level
- Consolidate calculation of power drain for logic devices on each power network (similar to solar panels)
- Increment the "logic clock" for each network each tick according to the power drain calculation, and use it to determine whether or not logic devices that drew power from that network have power to do logic that tick
- Cause all logic devices that are unable to perform logic due to the "logic clock" state to repeat their previous signals (as combinators do now)
- Optional: consistently apply an additional 1W logic power requirement (to be calculated as described above) to all devices that graphically acquire extra apparatus when linked to a logic circuit