tsunamayo / Starship-EVO

Welcome to Starship EVO bug tracking repo !
114 stars 17 forks source link

[Suggestion] Reverting limiting sequencers to one per mechanism or introducing an alterantive with similar capabilities. #2617

Open Tocks13 opened 4 years ago

Tocks13 commented 4 years ago

In the latest Update, 20w27c, there was a change, that limited mechanisms like rails, to only have sequencers. This seems to have been a bug, but everyone thought of it as a feature, since it enabled a vast amount of customisation to mechanisms, and limiting them to only being able to alternate between two states, would limit there usage quite a bit, and would probably be not well recieved, as the "Bugged" Version was vastly superior in its versitility and worked without creating any real problems so far.

I suggest that because of the advantages the bugged Version presents, that the bug should be turned into a feature.

The issue that is connected to this is #2540, and it might be a good idea, to discuss this a little bit further.

An alternative might be a way to dynamically change the values of an sequencer, like for example changing the value of a sequencer to that of a connected sequencer and allow multiple sequencers to be hooked to one sequencer.

-> represents a logic connection.

Button -> Sequencer A -> Sequencer B -> Rail. Switch --------------------------^

Before button Push: Sequencer A: Min 0, Max 0,5 Sequencer B: Min 0, Max 1 Switch: On Rail Position: 1

After button Push Sequencer A: Min 0, Max 0,5 Sequencer B: Min 0, Max 0,5 Update Rail Position on change. Switch: On Rail Position: (On the way to) 0,5

talrey commented 4 years ago

I've come up with a couple alternative paths forward here, because multiple sequence points is a necessity:

  1. Allow linking of Sequencers into Logic Gates: logic gates like OR are already the established way of resolving multiple input signals into one output, so it's natural. Downside: gate states remain as floats internally and can't be changed to boolean in future optimizations.

  2. Allow a Sequencer to change another Sequencer's ON state as suggested above: This allows for some interesting behaviors, especially if extended to adjusting Timers. Downside: it doesn't really "solve" the issue: people will just try to link multiple Sequencers into one Sequencer rather than the entity it controls.

  3. Allow multiple "steps" in a Sequencer's GUI: each "ON" pulse could move to the next entry in the list, looping back to the 0th entry when it hits the end. This fits more with the word "Sequencer", as it's a sequence of positions.

  4. Create a "velocity" type Sequencer: A concise way of stopping at intermediate points is to just set zero velocity. It also opens the door to controlling infinite-rotation Rotors once those return. Downside: this would require some careful timing from circuit designers.

  5. Do nothing: The simplest approach by far. Downside: People still want multiple positions with entities. To achieve that now, they'll need a grandchild entity per stage.

A common example here is an "elevator" with multiple "floors": a two floor elevator is one Rail or Piston. Under the old system, a ten floor elevator was also one Rail or Piston. With this "bug" patched, a ten floor elevator now requires at least three Rails or Pistons stacked on top of each other to act as a Binary Number. Most people don't think in binary, so a ten floor elevator might be built using up to nine stacked Rails. Is your collision system capable of handling grand-grand-grand-grand-grand-grand-grand-grand-child entities?

tsunamayo commented 4 years ago

Okay what are the use case beside elevator? How you make elevator in other game, ie SE, starmade, scrap mechanic and so on? Thanks

Xenoprophet-Nail commented 4 years ago

well for people that make Transforming ships the pieces may need more than one state to change shape properly.

esauftgz commented 4 years ago

@tsunamayo for me, multiple sequencers when I build transforming craft. Multiple sequencers allow me to have multiple "states" of craft, ie. fighter mode, semi-fighter mode, mecha mode, etc. Granted, it's a very aesthetic thing rather than a functional once, but being able to assign more than just two (ON/OFF) states to a mechanism does increase flexibility and choice when building.

Tocks13 commented 4 years ago

@tsunamayo

Okay what are the use case beside elevator?

These are only a selection I have without thinking too much about it and I am sure there are more things, that you could do. And I do agree with esauftgz, many if not most of these things might be aesthetic things, but isn't that one of the main reasons why mechanics are used?

How you make elevator in other game, ie SE, starmade, scrap mechanic and so on?

Starmade: Starmade rails have the advantage that they are fully modular on a per block basis. You are able to change their directions to what ever you like via logic or disable movement for each block individually at anytime using a speedcontroller. Thus you could have a rail, which can be toggled to move up or down and then say, at this block for this floor the rail is deactivated and the moving entity stops, until this one block gets activated again.

Space Engineers: Quite limited due to wonky physics, no rails and no "simple" logic, but to my understanding it would be possible to do it either by a very wierd and clunky usage of piston groups, or by using LUA scripts which are nativly supported in SE. Or use a mod, there is at least one I know of. Alternativly there would be a two entity solution with sensors, for example a roverlike cabin that drives on a pole and sensors can read at each floor, where it is at, which only really works with stationary target and can be quite wacky to work with. Now that I think of it, it should be possible to do a sensor based system, because in space engineers you have the abillity to turn off Pistons and rotors so they stop moving via sensor inputs.

Scrap mechanic: No rails but pistons and simple logic like in SEVO. Haven't played it that much yet, so I only know of a multi/stacked piston setup, which you could pretty much copy 1to1 to stevo with pistons or rails. Basically for each floor you extend a specific set of pistons and retract all others. The more floors you want the more pistons you need to stack on top of each other. Or you could build a driving/climbing cabin like in Space Engineers with sensors, that should work aswell.

Other Building/logic games I can think of in my head: Main Assembly: Extreme amount of flexibility in the logic system, mathematic calculations inside the logic with float signals which the piston takes in and extends according to the value between 1 and 0.

Empyrion: No custom logic, but teleporters, which you can teleport between.

From the Depths: Has pistons, but I barely played it and I think you don't really have much control over them.

Trailmakers: Has pistons but can only extend and retract. It might actually possible to build something like a multi floor elevator with stacked pistons, since every piston layer could have its own hotkey.

My thoughts: My favorite system by far is the rail system from Starmade. Because of its modularity and its ability to finely control every move and even the possibility to dock/undock and therefor swap entities between rails via logic, gives it extreme amounts of flexibility.

The mechanics and logic System of SEVO are in that regard a little bit more limited, but they are a mix between Starmade and Scrap Mechanic. We have smooth float based movement, with logic that doesn't take up much space, like in Scrap Mechanic, but the rigid and block perfect movement of starmade, which is not physics based, so no flopping around.

I currently see the potential in SEVO's mechanic and logic System, to reach (surpass) the modularity of starmade, while maintaining the nice movement and ease of use in scrapmechanic. This is the reason why I see the limitation of only one sequencer and therefor limiting them to only two states, as a step backwards, since it limits the flexibility of a single mechanism quite significantly and forces those that like to do pretty complex moving effects to build some crazy Mutants of stacked rotors, rails and pistons of 10+ subentities and wierd dimensions.

Another solution for this dilema in SEVO right now would be to "abuse" the collision mechanics, which is problamatic, since bricks on rails don't really collide (yet?), and pistons don't stop Pixel perfect on collision (and seem to be a little bugged right now, I'll write a issue later), and it would inflate the subentity count and might look rather unpleasant.

While a sensor setup might be an option aswell, currently sensors don't detect entities on the same ship like a subentity, like for example in space engineers or srap mechanic.

I will do a Suggegstion Issue in the near future about my Ideas for mechanic parts, and how they could be tweaked, to enable more flexibility.

Kadzar commented 4 years ago

I kind of wonder how all this does/will interact with sliders, because I know I have a ship that uses sliders to adjust the range of different landing gears to try to level out on uneven terrain, and it's not the best since they don't synchronize with the sequencer activation, but it might be a nice system if it did actually work properly.

Tocks13 commented 4 years ago

@Kadzar Not sure what problem you have specifically, but with the "old bugged" Version you could have hooked up a sequencer with 0 Min/Max for example. whenever it is activated, the rail would go to 0 to be "resetted" and it would then after a timer use the normal sequence to retract. or do you mean that the landing gears should remember their extension on lowering? That would have been possible using a rail, where before lowering the gear, the position of a rail, which is controlled by the slider, is used with a little logic to use a sequencer for that state.

Either way, both solutions which would have worked before, are not possible anymore, since both require the multi sequencer bug.

thecosmonaut4 commented 4 years ago

I use elevators extensively in my multi deck ships and this change was a pretty big blow to that. Given that we don't even have a basic stair block and ladders don't really work, that severely limits my options building these ships. In SE, if you want to build an elevator you can write a C# script to adjust piston position, or use a series of timer blocks triggered by buttons.. I don't know much about the other games. Perhaps you could use the rail extensions as a way of enabling multiple positions on the rail? (Have them linkable to buttons, pushing button 3 would bring you to the beginning position of the 3rd rail addon in the chain, ect?)

Xerma commented 4 years ago

Here is an image of how Starmade elevators look normally. It usually takes a ton of logic to get it setup but with allowing multiple sequencers into one mechanism, it is vastly easier to do in Starship EVO.

image

I'm unaware of how scrap mechanic does it because I have hardly touched the game at all but in Space Engineers, for a proper elevator you would typically need to get a mod for that because it's physics based so a few options there are to build a pole into the sky and try to fit wheels around it and pilot the "elevator" (car) up the pole and lock it in place later or use pistons and a set of button panels to set their extending length. And here is an image of sort of device that could be used as a "crawler elevator" that essentially acts like a worm crawling up or down the pole and one end locks while the other extends:

20200420201808_1

talrey commented 4 years ago

Okay what are the use case beside elevator? How you make elevator in other game, ie SE, starmade, scrap mechanic and so on? Thanks

I'll admit I haven't played many of those games myself, so I can't speak to how people make elevators there.

As for use cases besides elevators:

Majikmonster commented 4 years ago

Okay what are the use case beside elevator?

  • rotating barrels for custom laser gatling setups (3+ barrels and variable rotation speeds/barrel switching)
  • custom thruster throttle 'gears' (rather than sliders because you can use hotkeys)
  • multi-length extensions on crane arms (again, used in place of sliders for use while piloting) How you make elevator in other game, ie SE, starmade, scrap mechanic and so on?
  • In Minecraft, the mechanical elevators involve more than a few pistons depending on how far you need to go. This is similar to Space Engineers piston-stacking, and SE also allows scissor lifts made with a few rotors and bars.
Rhoiss commented 4 years ago

I don't know how you play StarMade but the way i make elevators is actually quite simple. This here is the logic you need for 4 floors where you can choose which floor to go to. image

The only problem i have with StarMade's logic is that everything is the size of a block while in SEVO the parts are small so you can make smaller more intricate mechanisms. I don't have experience in creating complex mechanisms in SEVO so far but from what i can tell it really is a bit more limited than the logic system in StarMade, where you can even rotate rails sideways and since the docked entity keeps moving untill you stop it you can make it move in different directions on a single chain of rails.

gflegos commented 4 years ago

Okay what are the use case beside elevator?

I had a system on my ship that would fold up the ventral turrets for landing, using the same hinge as the one used to control the elevation of the gun. Since I can't link both the turret computer and the sequencer to the hinge, this no longer works.

ProPeach commented 4 years ago

This also means that we can't link a sequencer to a rotor that is also part of a turret. This is very frustrating, as it means we have no way to reset the position of a turret with logic, or build retractable turrets that use the turret rotors as part of the mechanism.

Rexxios commented 4 years ago

Also, we cannot link screens to mechanisms now because of this change

Xenoprophet-Nail commented 4 years ago

Oof, well that breaks my cryopods

https://imgur.com/a/sfd9qyq

Because I was monitoring my Slider Rail for my "freeze" percentage

BrickMacklin commented 4 years ago

@tsunamayo Regarding multiple linked entities this is what I used it for. Half of my turrets were grandfathered with them before their removal while the over half do not. On the side that does after they are finished firing I can press a button on the bridge to restore them to their static position. Gif shows this below. https://imgur.com/a/4X5O6QT

However for all the other turrets that now lack this ability they will forever be locked to their previous firing position. This looks silly for ships to fly around with their turrets all over the place. It would help us to be able to use this ability to set a static position on our entities. image