Adventure-Terraria-Server-Project / AdvancedCircuits-Plugin

Advanced Circuits Plugin for Terraria Server API and TShock.
GNU General Public License v3.0
8 stars 8 forks source link

Active / Inactive State for any Block #25

Closed CoderCow closed 11 years ago

CoderCow commented 12 years ago

I would like to implement something to allow any block to become active / inactive when powered just like Active / Inactive Stone, by using the original tile type for active, and just Inactive Stone for the inactive state (so no walls at all) but use metadata to preserve the original tile type. So if that inactive stone is then powered, the original tile will appear again - instead of regular Active Stone.

I have no good idea on how these should be wired though.. maybe any blocks that is placed horizontally or vertically between two special blocks should be considered as this special kind of Active / Inactive Stone? But this would suck because the point of having any tile "switchable" is that you can hide secret passages with any tile type, they wouldn't be that secret though if one knows that tiles between two special blocks are considered like Active / Inactive Stone. Maybe using special walls to indicate that the tiles over them should be threatened this way would do.. but I don't really like this approach either.

Ijwu commented 12 years ago

You can obviously change a tile to look like another, and preserve its original in metadata. Why not have the "between two special blocks vertically/horizontally" idea work, and change their looks to the block that should be active/inactive.

In these cases, and "activator block" is the special block that you described:

maybe any blocks that is placed horizontally or vertically between two special blocks should be considered as this special kind of Active / Inactive Stone?

Ex: Key: 1=Activator Block, 2=Block made into active block

1222221 1222221

Just as you imagined, I believe.

When active (solid), it would look like this: Key: X = Adamantite Block (Example), O = Activator

XXXXXXX XXXXXXX

But when inactive (not solid):

OXXXXXO OXXXXXO

To re-iterate and clear up any uncertainties: The activator blocks would look like themselves when they, and the blocks they add functionality to, are inactive. When active, the blocks will look like the blocks they give functionality to.

The activator blocks will automatically learn what block it is they need to disguise as, but I would like to recommend that they are required to be linked. Having automatic connections happen could result in trans-world active blocks.

CoderCow commented 12 years ago

Hmm yeah, not bad idea. Downside is that this would require an initi-phase where you put the solid blocks together with the activator blocks and let this execute at least one time. Also, the Activator blocks might still look ugly as the switchable blocks are inactive, if one wants to use them instead of Doors or regular Active Stone in their house for example.

So how about going even further: In an Advanced Circuit, if Inactive Stone is placed between two blocks of any but both of the same type, and a wire goes horizontally / vertically through all of these (including the two blocks, not only one of them), they will become the activator blocks for the Inactive Stone inbetween when signaled with 1, and thus the Inactive Stone will turn into the same type as the activator blocks. Because AC registered those blocks as activators and the blocks inbetween as "chameleon blocks", as they are signaled with 0, they will turn back to Inactive Stone. The only downside about this is that one might use this technique to "build" his home out of expensive materials easily by using a lot of Inactive Stone and then turns those to chameleon blocks. Of course, if he would try to harvest the chameleon blocks they would not drop theirselfes but Inactive Stone, also to make using this technique more expensive and inappropriate for building purposes, as the wire on the chameleon blocks is removed, they will also turn back to Inactive Stone. As the wire on or the acitvators theirselfes are removed, all chameleon will turn back. And don't allow any kind of block to be used as chameleon blocks, maybe only bricks.

Ijwu commented 12 years ago

And don't allow any kind of block to be used as chameleon blocks, maybe only bricks.

Maybe this bit is unnecessary. Players would, I think, only look to use this system to duplicate blocks that can make crafted goods. I don't think it would matter, on most servers, if they manage to build their house of "fool's gold". Even if they do, one toggle of the wiring and it's all turned into inactive stone, not a fun house to have.

zaqen commented 12 years ago

Wouldn't it be possible to make every block that the wire goes through be inactivated or activated after going through two specific blocks?

A = Special activation blocks U = Blocks which have a wire running through them and will change into inactive/active when a pulse goes through them. D = Default blocks

ADDDDD UUUUUU UUUUUU UUUUUU ADDDDD

So the wire goes from A to A and the 3x6 in between and inactives every type of block that it passes through. By doing this you can hide the activation blocks deep inside walls and still in-/activate big chunks of blocks without you knowing of it beforehand.

CoderCow commented 12 years ago

This would seem a bit inconvenient when used and might also produce unwanted results as one'd randomly place some activation blocks that happen to be wired in a straight line. Also, if you'd actually build a door with this and hide the activators deep inside the wall - if opened, door and walls until the activators would become inactive.

zaqen commented 12 years ago

is it possible to make it so that it won't inactivate a tile if it has a specific wall behind it? So for example if you put the Iridescent wall behind a tile, it won't inactivate it. This would make for a safe way to hide the activation blocks from sight and make it possible to inactivate large chunks without the players knowing how it was done.

It could also be possible to use a specific wall type to just do the reverse action to the tiles, so having Iridescent wall behind a tile would reverse a 1 action into a 0. If you made this, it could be possible to make it so that tiles with walls behind them reverse the action. That way you could make sure that walls will be unaffected by just removing the walls behind them.

I'm useless at explaining, so i'll show you a picture;

Activational Blocks

CoderCow commented 12 years ago

Hmm.. I've been thinking a lot about using walls again and but your suggestion about using walls PLUS a component filled in the missing kicker I've been searching for.

The problems with walls are that they can be seen, its just a small shadow with most block types before them, but you can still see if the wall tile behind a block is different from the one where no block is - this becomes more visible with block types like stone and of course glass.

But the main problem was that I didn't want to waste a wall type just for that, but using a new component to indicate that a specific wall indicates blocks that should be deactivatable is good idea indeed. But it could be even better: The wall doesn't have to be specific it can be dynamic, we just say that this component inbetween simply takes the wall placed behind itself as the indicator wall! This would even fix nearly any design issue as the blocks are inactive because any wall type could be used.

So as of your example picture, one would put iridicent brick wall behind the cobalt ore to indicate that any block with iridicent brick wall behind it signaled by that component should be de/activatable. A 0 signal would therefore register those blocks as "custom deactivated blocks" in AC and just let them "vanish" and a later 1 signal would "re-place" them back and deregister them.

zaqen commented 12 years ago

This is kind of a 'derp' response since the only thing i can say is; Awesome! This will make secret passages really easy to make and especially hide. Without any sort of indication for its existence we can now hide something completely!

I'll have to wait to finish my current project until after this part is completed since it will be insanely beneficial for me. Again, awesome and thanks for making such a great plugin!

CoderCow commented 12 years ago

Could take some time until the next release though and this issue was not even assigned to a milestone yet because I'm yet not sure if I'll assign this issue to 1.1 or 1.2.

Edit: Nevermind, Assigned to 1.1.