Starbound

Starbound

26 ratings
Invisible Doors
   
Award
Favorite
Favorited
Unfavorite
File Size
Posted
21.323 KB
18 Oct, 2016 @ 9:47am
1 Change Note ( view )

Subscribe to download
Invisible Doors

In 1 collection by Weaver
Stuff Weaver Is Using Starbound
125 items
Description
This is a variant of the invisible door (and hatch / trapdoor) that shows as nothing when open.

It does this by recording the background block you place it over and then mining them out. (Ideally it would store the blocks and drop them when you dismantle it, but that's a bit beyond me right now.)

Since it doesn't have a background when placed, it doesn't have any anchoring properties. This means you can place it in the air; however, you'll end up with a door that has air for both closed and open, which doesn't do a lot (it won't even block you then.

Here's a gfy of it being placed: https://gfycat.com/MeekCarefreeCrownofthornsstarfish
8 Comments
جو بلا أرجل 20 Jun, 2017 @ 6:22am 
Where do you craft it?
RaveYard 4 Jan, 2017 @ 9:53pm 
This isn't meant to be insulting as in "this is useless" but I'm wondering what you literally use this for? It's really cool and the idea of this mechanic is awesome, but I'm wondering what context you'd planned to use it for in a building? I'd originally thought like... secret doors, but it looks like the back layer, so it'd just look like a tunnel that you couldn't walk through.
bk3000 19 Oct, 2016 @ 9:48am 
actually kill
local pos = object.position()
because you don't need it
bk3000 19 Oct, 2016 @ 8:34am 
If you use the automatic doors code, this would work for you.

"noAutomaticDoors" : true
"scripts" : ["scripts/weaver/inc_door.lua", "scripts/weaver/hiddenDoor.lua"]

hiddenDoor.lua could be nothing more than this


function initMaterialSpaces()
local bMats = {}

local pos = object.position()
for s, space in ipairs(storage.realSpaces) do
bMats[s] = world.material( space , "background") or "metamaterial:empty"
end

storage.matTableClosed = { {}, {} }
storage.matTableOpen = { {}, {} }

for i, spaces in ipairs(storage.spaces) do
table.insert(storage.matTableClosed[1], {spaces, bMats[i]})
end

storage.matTableClosed[2] = storage.matTableClosed[1]
end

Now that's gonna be hard to read without the indentation(thanks Steam) but it should do the job. And that should still work even if the automatic doors script changes a bit down the road.
bk3000 19 Oct, 2016 @ 8:19am 
Never looked at that file before, but it doesn't actually delete any tiles. It reads the tiles in a very similar manor to what I typed out and uses object.setMaterialSpaces() to either place or remove the blocks.

Although it isn't a bad idea to use "metamaterial:empty" but I have a slicker way to use it than they did.
Weaver  [author] 19 Oct, 2016 @ 6:11am 
You should be able to stuff the table in storage.something to make it persist in the save file. That's what CF's secretdoor.lua does for it's material tables as it is ... i think.

The bigger stumbling block was I couldn't locate a function to get the matitem for a given material name, so I went with the mining-damage-to-blocks thing to skip that step.

I do think I needed to get rid of the background blocks in some fasion though, since the point is to toggle between nothing/nothing and foreground/nothing. Ideally I'd be able to set the object to allow placing it on top of foreground blocks, turn the foreground blocks into a door, and just leave the background up to the user, but...
bk3000 19 Oct, 2016 @ 4:01am 
You just can't format code on Steam... (shakes head)
bk3000 19 Oct, 2016 @ 4:00am 
You don't actually have to mine the blocks out. You can just mimic them by scanning for the block, build material space table with that material, and switch it out when open/close.

I'm already doing that for my chameleon doors(blocks and objects mod). Feel free to borrow the code for your own implementation if you like. Although you're doing something a bit different with the background blocks instead of foreground.

Anyhow to make a table of the background blocks for later spawning

bMats = {}
local mat
local i = 1
local pos = object.position()
for s, space in ipairs(objects.spaces()) do
mat = world.material( {space[1] + pos[1], space[2] + pos[2] } , "background")
if mat then
bMats[i] = mat
i = i + 1
end

The thing is though Starbound will never save that table between sessions. So you're gonna loose your blocks if you don't destroy the door before quitting.