Post your screenshots!
- Evergreen
- Member
- Posts: 2135
- Joined: Sun Jan 06, 2013 01:22
- GitHub: 4Evergreen4
- IRC: EvergreenTree
- In-game: Evergreen
- Location: A forest in the midwest
- Contact:
I have to give points to MVRDV though, this is the most complicated thing i've built yet, I can't imagine what the real thing will be like to build.
(still not finished)
(still not finished)
Last edited by mauvebic on Sun Aug 11, 2013 01:45, edited 1 time in total.
- Evergreen
- Member
- Posts: 2135
- Joined: Sun Jan 06, 2013 01:22
- GitHub: 4Evergreen4
- IRC: EvergreenTree
- In-game: Evergreen
- Location: A forest in the midwest
- Contact:
- Casimir
- Member
- Posts: 1207
- Joined: Fri Aug 03, 2012 16:59
- GitHub: CasimirKaPazi
- PilzAdam
- Member
- Posts: 4026
- Joined: Fri Jul 20, 2012 16:19
- GitHub: PilzAdam
- IRC: PilzAdam
- Location: Germany
8 minutes? oOHybrid Dog wrote:I edited the nuke mod and made a big hole with vm (it took ca. 8min) (r=120):
I tried it myself and it took more like 20 seconds. Here is the relevant code:
Code: Select all
local vm = minetest.get_voxel_manip()
local p1, p2 = vm:read_from_map(
{x=-IRON_TNT_RANGE+pos.x, y=-IRON_TNT_RANGE+pos.y, z=-IRON_TNT_RANGE+pos.z},
{x=IRON_TNT_RANGE+pos.x, y=IRON_TNT_RANGE+pos.y, z=IRON_TNT_RANGE+pos.z}
)
local va = VoxelArea:new{MinEdge=p1, MaxEdge=p2}
local data = vm:get_data()
for x=-IRON_TNT_RANGE,IRON_TNT_RANGE do
for y=-IRON_TNT_RANGE,IRON_TNT_RANGE do
for z=-IRON_TNT_RANGE,IRON_TNT_RANGE do
if x*x+y*y+z*z <= IRON_TNT_RANGE * IRON_TNT_RANGE + IRON_TNT_RANGE then
local i = va:index(pos.x+x, pos.y+y, pos.z+z)
--activate_if_tnt(data[i], {x=pos.x+x,y=pos.y+y,z=pos.z+z}, pos, IRON_TNT_RANGE)
data[i] = c_air
end
end
end
end
vm:set_data(data)
vm:write_to_map()
vm:update_map()
Also the mapblock sending takes long, you are faster when you just rejoin the server (or restart singleplayer).
A "small" part to a much larger project that I hope to complete some time soon. EDIT! I've come to the conclusion that this'll take a week or so. There's going to be four towers, each comprised of seven layers and a glass roof. The seven layers will be as followed:
22 blocks
20 blocks
18 blocks
16 blocks
14 blocks
12 blocks
10 blocks
...And then each tower will be capped by triangular, obsidian glass roof. The four towers will be connected by halls that will be eighty-six blocks in length...at an unknown height of blocks. I have no idea what'll be in the center of this.
Last edited by Shire on Wed Aug 14, 2013 02:12, edited 1 time in total.
It looks like you are using the building_blocks mod. There is a newer version of it out than what you have. You might want to get it.Shire wrote:http://i1203.photobucket.com/albums/bb3 ... cf7d4c.png
A "small" part to a much larger project that I hope to complete some time soon. EDIT! I've come to the conclusion that this'll take a week or so. There's going to be four towers, each comprised of seven layers and a glass roof. The seven layers will be as followed:
22 blocks
20 blocks
18 blocks
16 blocks
14 blocks
12 blocks
10 blocks
...And then each tower will be capped by triangular, obsidian glass roof. The four towers will be connected by halls that will be eighty-six blocks in length...at an unknown height of blocks. I have no idea what'll be in the center of this.
Your project looks like it could be interesting.
Last edited by Inocudom on Wed Aug 14, 2013 03:40, edited 1 time in total.
[BitChute: https://www.bitchute.com/channel/fCcBQxrYQjNX/] [Rumble: https://rumble.com/user/HPoorHMagentaHChildH]
I'll look into updating and downloading that mod then as soon as possible.Inocudom wrote:It looks like you are using the building_blocks mod. There is a newer version of it out than what you have. You might want to get it.Shire wrote:http://i1203.photobucket.com/albums/bb3 ... cf7d4c.png
A "small" part to a much larger project that I hope to complete some time soon. EDIT! I've come to the conclusion that this'll take a week or so. There's going to be four towers, each comprised of seven layers and a glass roof. The seven layers will be as followed:
22 blocks
20 blocks
18 blocks
16 blocks
14 blocks
12 blocks
10 blocks
...And then each tower will be capped by triangular, obsidian glass roof. The four towers will be connected by halls that will be eighty-six blocks in length...at an unknown height of blocks. I have no idea what'll be in the center of this.
Your project looks like it could be interesting.
Last edited by Shire on Wed Aug 14, 2013 04:02, edited 1 time in total.
Due to it looking a bit thin, I think I'm going to bump it up to seven towers instead of the original four. This is just a skeleton of the first tower, just to give an idea of what it'll look like.
Last edited by Shire on Wed Aug 14, 2013 04:04, edited 1 time in total.
- PilzAdam
- Member
- Posts: 4026
- Joined: Fri Jul 20, 2012 16:19
- GitHub: PilzAdam
- IRC: PilzAdam
- Location: Germany
You do have too much code in the time critical part.Hybrid Dog wrote:this is my code:PilzAdam wrote:8 minutes? oOHybrid Dog wrote:I edited the nuke mod and made a big hole with vm (it took ca. 8min) (r=120):
I tried it myself and it took more like 20 seconds. Here is the relevant code:Make sure that c_air is defined.Code: Select all
local vm = minetest.get_voxel_manip() local p1, p2 = vm:read_from_map( {x=-IRON_TNT_RANGE+pos.x, y=-IRON_TNT_RANGE+pos.y, z=-IRON_TNT_RANGE+pos.z}, {x=IRON_TNT_RANGE+pos.x, y=IRON_TNT_RANGE+pos.y, z=IRON_TNT_RANGE+pos.z} ) local va = VoxelArea:new{MinEdge=p1, MaxEdge=p2} local data = vm:get_data() for x=-IRON_TNT_RANGE,IRON_TNT_RANGE do for y=-IRON_TNT_RANGE,IRON_TNT_RANGE do for z=-IRON_TNT_RANGE,IRON_TNT_RANGE do if x*x+y*y+z*z <= IRON_TNT_RANGE * IRON_TNT_RANGE + IRON_TNT_RANGE then local i = va:index(pos.x+x, pos.y+y, pos.z+z) --activate_if_tnt(data[i], {x=pos.x+x,y=pos.y+y,z=pos.z+z}, pos, IRON_TNT_RANGE) data[i] = c_air end end end end vm:set_data(data) vm:write_to_map() vm:update_map()
Also the mapblock sending takes long, you are faster when you just rejoin the server (or restart singleplayer).So it's not necessary to set ignore everywhere?Code: Select all
local function explode(pos, range) local t1 = os.clock() local manip = minetest.get_voxel_manip() local width = range+1 local emerged_pos1, emerged_pos2 = manip:read_from_map({x=pos.x-width, y=pos.y-width, z=pos.z-width}, {x=pos.x+width, y=pos.y+width, z=pos.z+width}) local area = VoxelArea:new({MinEdge=emerged_pos1, MaxEdge=emerged_pos2}) local nodes = {} local ignore = minetest.get_content_id("ignore") for i = 1, get_volume(emerged_pos1, emerged_pos2) do nodes[i] = ignore end local c_air = minetest.get_content_id("air") local radius = range^2 + range for x=-range,range do for y=-range,range do for z=-range,range do local r = x^2+y^2+z^2 if r <= radius then local np={x=pos.x+x, y=pos.y+y, z=pos.z+z} local n = minetest.env:get_node(np) if n.name ~= "air" and n.name ~= "default:chest" then -- and math.random(1,2^rad) < range*8 then if math.floor(math.sqrt(r) +0.5) > range-1 then if math.random(1,5) >= 2 then destroy_node(np) if minetest.env:get_node(np).name ~= "default:chest" then nodes[area:index(np.x, np.y, np.z)] = c_air end elseif math.random(1,10) == 1 then minetest.sound_play("default_glass_footstep", {pos = np, gain = 0.5, max_hear_distance = 4}) end else destroy_node(np) if minetest.env:get_node(np).name ~= "default:chest" then nodes[area:index(np.x, np.y, np.z)] = c_air end end --[[elseif n.name == "default:chest" then local p = np while minetest.env:get_node({x=p.x, y=p.y-1, z=p.z}).name == "air" do p.y=p.y-1 end minetest.env:add_node(p, {name="default:chest"}) -- copy_meta(np, p) minetest.env:remove_node(np) --minetest.env:get_meta(minetest.env:get_meta(pos))]] end activate_if_tnt(n.name, np, pos, range) end end end end manip:set_data(nodes) manip:write_to_map() print(string.format("[nuke] exploded in: %.2fs", os.clock() - t1)) local t1 = os.clock() manip:update_map() print(string.format("[nuke] map updated in: %.2fs", os.clock() - t1)) end
Calling get_node() in there makes it a lot slower.
What does destroy_node() do? If it removes the node at the position then its not needed at all. Setting another value in the data of the vmanip is enough to replace a node.
I dont know how sound_play() behaves, it might be too slow.
- PilzAdam
- Member
- Posts: 4026
- Joined: Fri Jul 20, 2012 16:19
- GitHub: PilzAdam
- IRC: PilzAdam
- Location: Germany
math.random() shouldnt be a problem, you should rather not use minetest.get_node() at all. You could instead check the content ID of the chest.Hybrid Dog wrote:It's used to preserve the items which would be dropped (I disabled it so it did nothing.):PilzAdam wrote:You do have too much code in the time critical part.Hybrid Dog wrote: this is my code:So it's not necessary to set ignore everywhere?Code: Select all
local function explode(pos, range) local t1 = os.clock() local manip = minetest.get_voxel_manip() local width = range+1 local emerged_pos1, emerged_pos2 = manip:read_from_map({x=pos.x-width, y=pos.y-width, z=pos.z-width}, {x=pos.x+width, y=pos.y+width, z=pos.z+width}) local area = VoxelArea:new({MinEdge=emerged_pos1, MaxEdge=emerged_pos2}) local nodes = {} local ignore = minetest.get_content_id("ignore") for i = 1, get_volume(emerged_pos1, emerged_pos2) do nodes[i] = ignore end local c_air = minetest.get_content_id("air") local radius = range^2 + range for x=-range,range do for y=-range,range do for z=-range,range do local r = x^2+y^2+z^2 if r <= radius then local np={x=pos.x+x, y=pos.y+y, z=pos.z+z} local n = minetest.env:get_node(np) if n.name ~= "air" and n.name ~= "default:chest" then -- and math.random(1,2^rad) < range*8 then if math.floor(math.sqrt(r) +0.5) > range-1 then if math.random(1,5) >= 2 then destroy_node(np) if minetest.env:get_node(np).name ~= "default:chest" then nodes[area:index(np.x, np.y, np.z)] = c_air end elseif math.random(1,10) == 1 then minetest.sound_play("default_glass_footstep", {pos = np, gain = 0.5, max_hear_distance = 4}) end else destroy_node(np) if minetest.env:get_node(np).name ~= "default:chest" then nodes[area:index(np.x, np.y, np.z)] = c_air end end --[[elseif n.name == "default:chest" then local p = np while minetest.env:get_node({x=p.x, y=p.y-1, z=p.z}).name == "air" do p.y=p.y-1 end minetest.env:add_node(p, {name="default:chest"}) -- copy_meta(np, p) minetest.env:remove_node(np) --minetest.env:get_meta(minetest.env:get_meta(pos))]] end activate_if_tnt(n.name, np, pos, range) end end end end manip:set_data(nodes) manip:write_to_map() print(string.format("[nuke] exploded in: %.2fs", os.clock() - t1)) local t1 = os.clock() manip:update_map() print(string.format("[nuke] map updated in: %.2fs", os.clock() - t1)) end
Calling get_node() in there makes it a lot slower.
What does destroy_node() do?Maybe math.random causes the lags.Code: Select all
local function describe_chest() if math.random(5) == 1 then return "You nuked. I HAVE NOT!" end if math.random(10) == 1 then return "Hehe, I'm the result of your explosion hee!" end if math.random(20) == 1 then return "Look into me, I'm fat!" end if math.random(30) == 1 then return "Please don't rob me. Else you are as evil as the other persons who took my inventoried stuff." end if math.random(300) == 1 then return "I'll follow you until I ate you. Like I did with the other objects here..." end return "Feel free to take the nuked items out of me!" end local function set_chest(p) --add a chest if the previous one is full local pos = p while minetest.env:get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "air" do pos.y=pos.y-1 end minetest.env:add_node(pos, {name="default:chest"}) local meta = minetest.get_meta(pos) meta:set_string("formspec",default.chest_formspec) meta:set_string("infotext", describe_chest()) local inve = meta:get_inventory() inve:set_size("main", 8*4) nuke_chestpos = pos end local function destroy_node(pos) if nuke_preserve_items then local drops = minetest.get_node_drops(minetest.env:get_node(pos).name) if nuke_drop_items then for _, item in ipairs(drops) do if item ~= "default:cobble" then minetest.env:add_item(pos, item) end end elseif nuke_puncher ~= nil then local inv = nuke_puncher:get_inventory() if inv then for _, item in ipairs(drops) do if inv:room_for_item("main", item) then inv:add_item("main", item) else if nuke_chestpos == nil then set_chest(pos) end local chestinv = minetest.get_meta(nuke_chestpos):get_inventory() if not chestinv:room_for_item("main", item) then set_chest(pos) end chestinv:add_item("main", item) end end end end end end
Is it faster if I use PseudoRandom?
Now that would be a good nether. Add a couple evels above it and put it underground and it would look like a real biomeHybrid Dog wrote:I tested the perlin noise for an edited nether mod:
http://ubuntuone.com/6UOfJ862eXWPPx8dHNIQN3
.
http://ubuntuone.com/5A6G7hcoFRJHVhFqYan63Q
Coding;
1X coding
3X debugging
12X tweaking to be just right
1X coding
3X debugging
12X tweaking to be just right
This nether is better than the other one.Hybrid Dog wrote:A chunk took ca. 3s to generate.
I had to use GIMP else it would bee too dark because the calc_lighting() and update_liquids() don't work for me.
Spoiler
if you swim up to an lavafall (if update_liquids() would work)
or if you use a pick (the shift elevator could be useful).
http://ubuntuone.com/410pvtgm17nk4CTcDvauNU
diving...
http://ubuntuone.com/7MTaeACpaBqn5D8pk2AIRr
[BitChute: https://www.bitchute.com/channel/fCcBQxrYQjNX/] [Rumble: https://rumble.com/user/HPoorHMagentaHChildH]
- Mossmanikin
- Member
- Posts: 599
- Joined: Sun May 19, 2013 16:26
- Location: where we don't speak english.
- Mossmanikin
- Member
- Posts: 599
- Joined: Sun May 19, 2013 16:26
- Location: where we don't speak english.
Cute.Sokomine wrote:Two sheep take a stroll at a beach, while an ostrich watches over another sheep:
http://mg.viewskew.com/mgoblin_media/me ... 470946.png
That's the alternative to struggle for existence.
Who is online
Users browsing this forum: No registered users and 3 guests