Page 51 of 445

Posted: Sat Aug 10, 2013 23:50
by Evergreen
Sam in all of his/her glory: (made by Jordach on the logoskyblock server)

Image

Posted: Sat Aug 10, 2013 23:55
by mauvebic
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.

Image
(still not finished)

Posted: Sun Aug 11, 2013 02:16
by Evergreen
Pretty hilarious screenshot I got while testing facedir in nyancat rainbows:
Image

Posted: Sun Aug 11, 2013 05:18
by paramat
Mauvebic that is beautiful.

Posted: Sun Aug 11, 2013 07:21
by Casimir
Image
Working on perlinore again.

Posted: Sun Aug 11, 2013 14:37
by mauvebic
Image
Windows are done (several 1K stacks lol) - still got fix internal walls in the "cloud" part, do the balconies and rooftop terraces with greenery, two stairwells and get rid of those shadows. The next project will be simpler :p

Posted: Mon Aug 12, 2013 06:26
by sfan5
Day 4 on LogoSkyBlock:
Image

Posted: Tue Aug 13, 2013 01:28
by mauvebic
3 hours and spare change to place all the lights
Image
Image

Posted: Tue Aug 13, 2013 05:58
by paramat
Beautiful.

Posted: Wed Aug 14, 2013 00:39
by paramat
I love that invert explosion. Not sure what the 3rd screenshot is. Are you going to nuke the meru tower?

Posted: Wed Aug 14, 2013 00:51
by PilzAdam
Hybrid Dog wrote:I edited the nuke mod and made a big hole with vm (it took ca. 8min) (r=120):
8 minutes? oO
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()
Make sure that c_air is defined.
Also the mapblock sending takes long, you are faster when you just rejoin the server (or restart singleplayer).

Posted: Wed Aug 14, 2013 01:46
by Shire
Image


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.

Posted: Wed Aug 14, 2013 03:38
by Inocudom
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.
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.

Your project looks like it could be interesting.

Posted: Wed Aug 14, 2013 04:01
by Shire
Inocudom wrote:
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.
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.

Your project looks like it could be interesting.
I'll look into updating and downloading that mod then as soon as possible.

Posted: Wed Aug 14, 2013 04:03
by Shire
Image
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.

Posted: Wed Aug 14, 2013 10:25
by vqrulane
My current city map.
Image

Posted: Wed Aug 14, 2013 11:09
by PilzAdam
Hybrid Dog wrote:
PilzAdam wrote:
Hybrid Dog wrote:I edited the nuke mod and made a big hole with vm (it took ca. 8min) (r=120):
8 minutes? oO
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()
Make sure that c_air is defined.
Also the mapblock sending takes long, you are faster when you just rejoin the server (or restart singleplayer).
this is my code:

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
So it's not necessary to set ignore everywhere?
You do have too much code in the time critical part.
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.

Posted: Wed Aug 14, 2013 12:40
by PilzAdam
Hybrid Dog wrote:
PilzAdam wrote:
Hybrid Dog wrote: this is my code:

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
So it's not necessary to set ignore everywhere?
You do have too much code in the time critical part.
Calling get_node() in there makes it a lot slower.
What does destroy_node() do?
It's used to preserve the items which would be dropped (I disabled it so it did nothing.):

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
Maybe math.random causes the lags.
Is it faster if I use PseudoRandom?
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.

Posted: Thu Aug 15, 2013 00:32
by mauvebic
Image
Image
Image

Posted: Thu Aug 15, 2013 13:53
by jojoa1997
Now that would be a good nether. Add a couple evels above it and put it underground and it would look like a real biome

Posted: Thu Aug 15, 2013 21:51
by paramat
Interesting structures and nice mese texture.

Posted: Fri Aug 16, 2013 16:00
by Inocudom
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
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
This nether is better than the other one.

Posted: Fri Aug 16, 2013 21:42
by Mossmanikin

Posted: Mon Aug 19, 2013 17:28
by Sokomine
Two sheep take a stroll at a beach, while an ostrich watches over another sheep:
Image

Posted: Mon Aug 19, 2013 18:53
by Mossmanikin
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
Cute. :)
That's the alternative to struggle for existence. ;)