[Mod] Perlin-noise based ore generation [perlinore]

User avatar
Casimir
Member
 
Posts: 1101
Joined: Fri Aug 03, 2012 16:59

[Mod] Perlin-noise based ore generation [perlinore]

by Casimir » Fri Jan 11, 2013 00:37

http://ompldr.org/vaTVoeQ/perlinore_20130419.tar.gz <--- latest
http://ompldr.org/vaDJvcg/perlinore%2020130114.zip
http://ompldr.org/vaDB2cw/perlinore_20130111.zip

This is not intended to be a working mod. It makes mapgen slow and is unbalanced. It just shows how it could be possible.

This mod is additional to the default generation. So you will get much more ores. Turn the values in the default mapgen down if you don't want that.

It makes ore generation less random. There are some areas you will find very much of some kind of ore. You could have one ironmine somewhere and a coalmine somewhere else.

A visualisation of how the ores are distributed:
Image
Last edited by Casimir on Fri Apr 19, 2013 20:57, edited 1 time in total.
 

User avatar
jojoa1997
Member
 
Posts: 2890
Joined: Thu Dec 13, 2012 05:11

by jojoa1997 » Fri Jan 11, 2013 00:43

does it go in the air normally
Coding;
1X coding
3X debugging
12X tweaking to be just right
 

User avatar
Casimir
Member
 
Posts: 1101
Joined: Fri Aug 03, 2012 16:59

by Casimir » Fri Jan 11, 2013 00:48

No. I just made this picture to show what you don't see underground.
 

User avatar
SegFault22
Member
 
Posts: 870
Joined: Mon May 21, 2012 03:17

by SegFault22 » Sat Jan 12, 2013 00:39

Awesome! Not even Minecraft has this!
Resources are abundant; only money is scarce. People should not have to work hard and remain poor just to pay for the needs of survival.
Society can thrive without money - but only if productive members of society are rewarded for being productive.
 

User avatar
jojoa1997
Member
 
Posts: 2890
Joined: Thu Dec 13, 2012 05:11

by jojoa1997 » Sat Jan 12, 2013 00:48

This will be perfect for mines
Coding;
1X coding
3X debugging
12X tweaking to be just right
 

User avatar
NakedFury
Member
 
Posts: 151
Joined: Thu Dec 08, 2011 03:55

by NakedFury » Sat Jan 12, 2013 03:55

If you are looking for different ore generation process then I would suggest trying to make this one from a Minecraft mod:
http://www.minecraftforum.net/topic/1107057-146v2-custom-ore-generation-updated-jan-5th/

I would like to see the Veins generation.
 

Nore
Member
 
Posts: 468
Joined: Wed Nov 28, 2012 11:35
GitHub: Ekdohibs

by Nore » Mon Jan 14, 2013 17:12

An idea to accelerate mapgen: instead of perlin noise for each node, use perlin noise for each block (16x16x16), and use it to change the frequency of mineral in that block.
 

User avatar
Casimir
Member
 
Posts: 1101
Joined: Fri Aug 03, 2012 16:59

by Casimir » Mon Jan 14, 2013 19:32

Much faster and balanced* version:
http://ompldr.org/vaDJvcg/perlinore%2020130114.zip

*Recommended settings for default oregeneration:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
    -- Generate regular ores
    default.generate_ore("default:stone_with_iron", "default:stone", minp, maxp, seed+2, 1/15/15/15,    3, 5,    -63, 2)
    default.generate_ore("default:stone_with_iron", "default:stone", minp, maxp, seed+3, 1/12/12/12,    3, 5, -31000, -64)
   
    default.generate_ore("default:stone_with_mese", "default:stone", minp, maxp, seed+4, 1/32/32/32, 2, 3,   -127,  -64)
    default.generate_ore("default:stone_with_mese", "default:stone", minp, maxp, seed+5, 1/18/18/18,    3, 5, -31000, -128)
    default.generate_ore("default:mese",            "default:stone", minp, maxp, seed+8, 1/16/16/16, 2, 3, -31000,-1024)


At the moment it looks like this:
Image
Grey is coal, red is iron, yellow mese (crystal).

One bug: It seems to use the same seed for all the ores - sometimes, not always. So one is included into the other. In this screenshot you can see is better:
Image

@Nore
Included. Thank you.

@NakedFury
In reality veins appear to be one-dimensional strings. But in fact they are two-dimensional planes. I did the second thing for coal. So when there is a vein visible in the wall you can start following it, just like in a real mine. (see screenshot)

p.s. I don't know how much this affects the speed of the mapgen because my pc is running on 100% with and without the perlinore ;)

edit: Why is this in release?
Last edited by Casimir on Mon Jan 14, 2013 20:45, edited 1 time in total.
 

User avatar
jojoa1997
Member
 
Posts: 2890
Joined: Thu Dec 13, 2012 05:11

by jojoa1997 » Mon Jan 14, 2013 20:21

What do you mean by vine?
Coding;
1X coding
3X debugging
12X tweaking to be just right
 

User avatar
Casimir
Member
 
Posts: 1101
Joined: Fri Aug 03, 2012 16:59

by Casimir » Mon Jan 14, 2013 20:44

jojoa1997 wrote:What do you mean by vine?

Vein. Like those in the mentioned minecraft mod.
 

User avatar
jojoa1997
Member
 
Posts: 2890
Joined: Thu Dec 13, 2012 05:11

by jojoa1997 » Mon Jan 14, 2013 20:45

so like the pics with the wool
Coding;
1X coding
3X debugging
12X tweaking to be just right
 

Spots
Member
 
Posts: 124
Joined: Tue Jul 24, 2012 12:12

by Spots » Mon Jan 14, 2013 22:15

i love the idea of ore veins that way you can make different mines and not have to keep running all over to find what you need, kinna like irl with coal mines , gold mines and salt mines there are veins so you can keep mining in one area
 

Nore
Member
 
Posts: 468
Joined: Wed Nov 28, 2012 11:35
GitHub: Ekdohibs

by Nore » Wed Jan 30, 2013 09:05

I have made code that will do an highly-configurable vein generation:
License: WTFPL

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
function in_cuboid(pos, minp, maxp)
    return (pos.x>=minp.x and pos.y>= minp.y and pos.z>=minp.z and pos.x<=maxp.x and pos.y<=maxp.y and pos.z<=maxp.z)
end

function round_pos(p)
    return {x=math.floor(p.x+0.5),y=math.floor(p.y+0.5),z=math.floor(p.z+0.5)}
end

function place_segment(name, wherein, pos1, pos2, minp, maxp)
    local d={x=pos2.x-pos1.x, y=pos2.y-pos1.y, z=pos2.z-pos1.z}
    local N=math.max(math.abs(d.x),math.abs(d.y),math.abs(d.z))
    local s={x=d.x/N,y=d.y/N,z=d.z/N}
    local p=pos1
    if minetest.env:get_node(pos1).name == wherein then
        minetest.env:set_node(pos1,{name=name})
    end
    for i=1,N do
        p={x=p.x+s.x,y=p.y+s.y,z=p.z+s.z}
        p0=round_pos(p)
        if not in_cuboid(p0, minp, maxp) then return end
        if minetest.env:get_node(p0).name == wherein then
            minetest.env:set_node(p0,{name=name})
        end
    end
end

function generate_vein_segment(name, wherein, minp, maxp, pr, pos, angle, rem_size, options)
    if rem_size<=0 then return end
    local Ln=options.seglenghtn
    local Ldev=options.seglenghtdev
    local L=pr:next(Ln-Ldev,Ln+Ldev)
    local incln=options.segincln*100
    local incldev=options.segincldev*100
    local incl=pr:next(incln-incldev,incln+incldev)/100
    local turnangle=options.turnangle
    local forkturnangle=options.forkturnangle
    local fork_chance=options.fork_chance*100
    local forkmultn=options.forkmultn*100
    local forkmultdev=options.forkmultdev*100

    local end_pos={x=pos.x+L*math.cos(angle), y=pos.y-L*incl, z=pos.z+L*math.sin(angle)}
    place_segment(name, wherein, round_pos(pos), round_pos(end_pos), minp, maxp)
    if not in_cuboid(end_pos, minp, maxp) then return end
    local new_angle=(math.pi*pr:next(-turnangle,turnangle)/180)+angle
    generate_vein_segment(name, wherein, minp, maxp, pr, end_pos, new_angle, rem_size-L, options)
   
    local numforks=math.floor(fork_chance/100)+1
    fork_chance=fork_chance/numforks
    if pr:next(1,100)<=fork_chance then
        for f=1,numforks do
            local new_angle=(math.pi*pr:next(-forkturnangle,forkturnangle)/180)+angle
            local forkmult=pr:next(forkmultn-forkmultdev, forkmultn+forkmultdev)/100
            if forkmult>1 then forkmult=1 end
            generate_vein_segment(name, wherein, minp, maxp, pr, end_pos, new_angle, forkmult*(rem_size-L), options)
        end
    end
end

function generate_vein(name, wherein, minp, maxp, seed, options, second_call)
    options=get_or_default(options)
    pr = PseudoRandom(seed)
   
    local numperblock=options.numperblock*1000
    local maxhdistance=options.maxhdistance
    local maxvdistance=options.maxvdistance
    local numbranchesn=options.numbranchesn
    local numbranchesdev=options.numbranchesdev
    local numbranches=pr:next(numbranchesn-numbranchesdev,numbranchesn+numbranchesdev)
    local sizen=options.sizen
    local sizedev=options.sizedev
   
    if second_call==nil then
        local hblocks=math.floor(maxhdistance/80)+1
        local vblocks=math.floor(maxvdistance/80)+1
        for xblocksdiff=-hblocks,hblocks do
        for yblocksdiff=-vblocks,vblocks do
        for zblocksdiff=-hblocks,hblocks do
            if xblocksdiff~=0 or yblocksdiff~=0 or zblocksdiff~=0 then
                new_seed=seed+80*23*xblocksdiff+80*42123*yblocksdiff+80*38134234*zblocksdiff
                new_minp={x=minp.x+xblocksdiff*80,y=minp.y+yblocksdiff*80,z=minp.z+zblocksdiff*80}
                new_maxp={x=maxp.x+xblocksdiff*80,y=maxp.y+yblocksdiff*80,z=maxp.z+zblocksdiff*80}
                generate_vein(name, wherein, new_minp, new_maxp, new_seed, options, true)
            end
        end
        end
        end
    end
   
    local numveins=math.floor(numperblock/1000)+1
    numperblock=numperblock/numveins
   
    if pr:next(1,1000)<=numperblock then
        for v=1,numveins do
            local vein_pos={x=pr:next(minp.x,maxp.x),y=pr:next(minp.y,maxp.y),z=pr:next(minp.z,maxp.z)}
       
            local minpos = {x=vein_pos.x-maxhdistance,y=vein_pos.y-maxvdistance,x=vein_pos.z-maxhdistance}
            local maxpos = {x=vein_pos.x+maxhdistance,y=vein_pos.y+maxvdistance,x=vein_pos.z+maxhdistance}
       
            for i=1,numbranches do
                local start_angle=math.pi*pr:next(0,359)/180
                    local size=pr:next(sizen-sizedev,sizen+sizedev)
                generate_vein_segment(name, wherein, minp, maxp, pr, vein_pos, start_angle, size, options)
            end
        end
    end
end

function get_or_default(options)
    if options.numperblock==nil then options.numperblock=0.3 end
    if options.maxhdistance==nil then options.maxhdistance=32 end
    if options.maxvdistance==nil then options.maxvdistance=32 end
    if options.numbranchesn==nil then options.numbranchesn=3 end
    if options.numbranchesdev==nil then options.numbranchesdev=2 end
    if options.sizen==nil then options.sizen=120 end
    if options.sizedev==nil then options.sizedev=60 end
    if options.seglenghtn==nil then options.seglenghtn=6 end
    if options.seglenghtdev==nil then options.seglenghtdev=2 end
    if options.segincln==nil then options.segincln=0.2 end
    if options.segincldev==nil then options.segincldev=0.1 end
    if options.turnangle==nil then options.turnangle=20 end
    if options.forkturnangle==nil then options.forkturnangle=90 end
    if options.fork_chance==nil then options.fork_chance=0.2 end
    if options.forkmultn==nil then options.forkmultn=0.75 end
    if options.forkmultdev==nil then options.forkmultdev=0.25 end
    return options
end

minetest.register_on_generated(function(minp, maxp, seed)
    generate_vein("default:mese","air",minp,maxp,seed, {})
end)


I didn't add max height yet, and it will only generate mese in the air for testing for now.
 

User avatar
Casimir
Member
 
Posts: 1101
Joined: Fri Aug 03, 2012 16:59

by Casimir » Thu Jan 31, 2013 10:40

Looks great.
Image

So in the next version we will (hopefully) have different types of oregenerators:
- Default random
- Blobs 3D (see iron above)
- Membranes 2D (see coal above)
- Veins 1D (thanks to Nore)
- Clusters (like Blobs but without sharp borders)
- Replace (I'm working on it, but it is extremely slow)
 

Nore
Member
 
Posts: 468
Joined: Wed Nov 28, 2012 11:35
GitHub: Ekdohibs

by Nore » Thu Jan 31, 2013 11:17

New version:

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
function in_cuboid(pos, minp, maxp)
    return (pos.x>=minp.x and pos.y>= minp.y and pos.z>=minp.z and pos.x<=maxp.x and pos.y<=maxp.y and pos.z<=maxp.z)
end

function round_pos(p)
    return {x=math.floor(p.x+0.5),y=math.floor(p.y+0.5),z=math.floor(p.z+0.5)}
end

function draw_sphere(name, wherein, center, radius)
    local rad2=radius*radius
    pos0={}
    for x=-radius, radius do
    pos0.x=center.x+x
    for y=-radius, radius do
    pos0.y=center.y+y
    for z=-radius, radius do
        pos0.z=center.z+z
        if x*x+y*y+z*z<=rad2 and minetest.env:get_node(pos0).name==wherein then
            minetest.env:set_node(pos0,{name=name})
        end
    end
    end
    end
end

function place_segment(name, wherein, pos1, pos2, minp, maxp, radius)
    local d={x=pos2.x-pos1.x, y=pos2.y-pos1.y, z=pos2.z-pos1.z}
    local N=math.max(math.abs(d.x),math.abs(d.y),math.abs(d.z))
    local s={x=d.x/N,y=d.y/N,z=d.z/N}
    local p=pos1
    if minetest.env:get_node(pos1).name == wherein then
        minetest.env:set_node(pos1,{name=name})
    end
    for i=1,N do
        p={x=p.x+s.x,y=p.y+s.y,z=p.z+s.z}
        p0=round_pos(p)
        if not in_cuboid(p0, minp, maxp) then return end
        draw_sphere(name,wherein,p0,radius)
    end
end

function generate_vein_segment(name, wherein, minp, maxp, pr, pos, angle, rem_size, options)
    if rem_size<=0 then return end
    local Ln=options.seglenghtn
    local Ldev=options.seglenghtdev
    local L=pr:next(Ln-Ldev,Ln+Ldev)
    local incln=options.segincln*100
    local incldev=options.segincldev*100
    local incl=pr:next(incln-incldev,incln+incldev)/100
    local turnangle=options.turnangle
    local forkturnangle=options.forkturnangle
    local fork_chance=options.fork_chance*100
    local forkmultn=options.forkmultn*100
    local forkmultdev=options.forkmultdev*100
    local radius=options.radius

    local end_pos={x=pos.x+L*math.cos(angle), y=pos.y-L*incl, z=pos.z+L*math.sin(angle)}
    place_segment(name, wherein, round_pos(pos), round_pos(end_pos), minp, maxp, radius)
    if not in_cuboid(end_pos, minp, maxp) then return end
    local new_angle=(math.pi*pr:next(-turnangle,turnangle)/180)+angle
    generate_vein_segment(name, wherein, minp, maxp, pr, end_pos, new_angle, rem_size-L, options)
   
    local numforks=math.floor(fork_chance/100)+1
    fork_chance=fork_chance/numforks
    if pr:next(1,100)<=fork_chance then
        for f=1,numforks do
            local new_angle=(math.pi*pr:next(-forkturnangle,forkturnangle)/180)+angle
            local forkmult=pr:next(forkmultn-forkmultdev, forkmultn+forkmultdev)/100
            if forkmult>1 then forkmult=1 end
            generate_vein_segment(name, wherein, minp, maxp, pr, end_pos, new_angle, forkmult*(rem_size-L), options)
        end
    end
end

function generate_vein(name, wherein, minp, maxp, seed, options, second_call)
    while seed<0 do
        seed=seed+4294967296 --2^32
    end
    while seed>=4294967296 do
        seed=seed-4294967296
    end
   
    options=get_or_default(options)
   
    local numperblock=options.numperblock*1000
    local maxhdistance=options.maxhdistance
    local maxvdistance=options.maxvdistance
    local numbranchesn=options.numbranchesn
    local numbranchesdev=options.numbranchesdev
    local mothersizen=options.mothersizen*10
    local mothersizedev=options.mothersizedev*10
    local sizen=options.sizen
    local sizedev=options.sizedev
   
    if second_call==nil then
        local hblocks=math.floor(maxhdistance/80)+1
        local vblocks=math.floor(maxvdistance/80)+1
        for xblocksdiff=-hblocks,hblocks do
        for yblocksdiff=-vblocks,vblocks do
        for zblocksdiff=-hblocks,hblocks do
            if xblocksdiff~=0 or yblocksdiff~=0 or zblocksdiff~=0 then
                new_seed=seed+80*23*xblocksdiff+80*42123*yblocksdiff+80*38134234*zblocksdiff
                while new_seed<0 do
                    new_seed=new_seed+4294967296 --2^32
                end
                while new_seed>=4294967296 do
                    new_seed=new_seed-4294967296
                end
                new_minp={x=minp.x+xblocksdiff*80,y=minp.y+yblocksdiff*80,z=minp.z+zblocksdiff*80}
                new_maxp={x=maxp.x+xblocksdiff*80,y=maxp.y+yblocksdiff*80,z=maxp.z+zblocksdiff*80}
                generate_vein(name, wherein, new_minp, new_maxp, new_seed, options, true)
            end
        end
        end
        end
    end
   
    --local pr = PseudoRandom(seed)
    local pr={}
    function pr:next(min,max)
        return math.random(min,max)
    end
    math.randomseed(seed)
   
    for i=1,1000 do pr:next(1,1) end
    local numveins=math.floor(numperblock/1000)
    numperblock=numperblock-1000*numveins
    if pr:next(1,1000)<=numperblock then
        numveins=numveins+1
    end
    if numveins>0 then
        local min_y=math.max(options.minheight,minp.y)
        local max_y=math.min(options.maxheight,maxp.y)
        if min_y>max_y then return end
        for v=1,numveins do
            local vein_pos={x=pr:next(minp.x,maxp.x),y=pr:next(min_y,max_y),z=pr:next(minp.z,maxp.z)}
            local numbranches=pr:next(numbranchesn-numbranchesdev,numbranchesn+numbranchesdev)
            local mothersize=pr:next(mothersizen-mothersizedev,mothersizen+mothersizedev)/10
   
            draw_sphere(name, wherein,vein_pos, mothersize)
       
            local minpos = {x=vein_pos.x-maxhdistance,y=vein_pos.y-maxvdistance,z=vein_pos.z-maxhdistance}
            local maxpos = {x=vein_pos.x+maxhdistance,y=vein_pos.y+maxvdistance,z=vein_pos.z+maxhdistance}
       
            for i=1,numbranches do
                local start_angle=math.pi*pr:next(0,359)/180
                    local size=pr:next(sizen-sizedev,sizen+sizedev)
                generate_vein_segment(name, wherein, minpos, maxpos, pr, vein_pos, start_angle, size, options)
            end
        end
    end
end

function get_or_default(options)
    if options.numperblock==nil then options.numperblock=0.3 end
    if options.maxhdistance==nil then options.maxhdistance=32 end
    if options.maxvdistance==nil then options.maxvdistance=32 end
    if options.numbranchesn==nil then options.numbranchesn=3 end
    if options.numbranchesdev==nil then options.numbranchesdev=2 end
    if options.mothersizen==nil then options.mothersizen=1 end
    if options.mothersizedev==nil then options.mothersizedev=0.5 end
    if options.sizen==nil then options.sizen=120 end
    if options.sizedev==nil then options.sizedev=60 end
    if options.seglenghtn==nil then options.seglenghtn=6 end
    if options.seglenghtdev==nil then options.seglenghtdev=2 end
    if options.segincln==nil then options.segincln=0.2 end
    if options.segincldev==nil then options.segincldev=0.1 end
    if options.turnangle==nil then options.turnangle=20 end
    if options.forkturnangle==nil then options.forkturnangle=90 end
    if options.fork_chance==nil then options.fork_chance=0.2 end
    if options.forkmultn==nil then options.forkmultn=0.75 end
    if options.forkmultdev==nil then options.forkmultdev=0.25 end
    if options.minheight==nil then options.minheight=-31000 end
    if options.maxheight==nil then options.maxheight=31000 end
    if options.radius==nil then options.radius=0 end
    return options
end

minetest.register_on_generated(function(minp, maxp, seed)
    generate_vein("default:stone_with_iron","default:stone",minp,maxp,seed, {maxvdistance=10.5, maxheight=-16,
        seglenghtn=15, seglenghtdev=6, segincln=0, segincldev=0.6, turnangle=57, forkturnangle=57, numperblock=2.5})
    generate_vein("default:stone_with_coal","default:stone",minp,maxp,seed+1, {maxvdistance=10, sizen=54, sizedev=27, maxheight=64,
        seglenghtn=15, seglenghtdev=6, segincln=0, segincldev=0.36, turnangle=57, forkturnangle=57, radius=1,numperblock=6})
    generate_vein("default:stone_with_mese","default:stone",minp,maxp,seed+2, {maxvdistance=50, sizen=7, sizedev=3, maxheight=-128,
        seglenghtn=2, seglenghtdev=1, segincln=4, segincldev=1, turnangle=57, forkturnangle=57,numperblock=0.8,
        numbranchesn=2, numbranchesdev=1, fork_chance=0.1, mothersizen=0, mothersizedev=0})
    generate_vein("default:mese","default:stone",minp,maxp,seed+3, {maxvdistance=50, sizen=7, sizedev=3, maxheight=-1024,
        seglenghtn=2, seglenghtdev=1, segincln=4, segincldev=1, turnangle=57, forkturnangle=57,
        numbranchesn=2, numbranchesdev=1, fork_chance=0.1, radius=1})
    generate_vein("default:lava_source","default:mese",minp,maxp,seed+3, {maxvdistance=50, sizen=7, sizedev=3, maxheight=-1024,
        seglenghtn=2, seglenghtdev=1, segincln=4, segincldev=1, turnangle=57, forkturnangle=57,
        numbranchesn=2, numbranchesdev=1, fork_chance=0.1, mothersizen=0, mothersizedev=0})
end)


I could be good to add support for moreores, technic and other mods with ores (perhaps detect if they are installed, and if so, replace their ores with stone and then generate our ores. It will then need to be executed last (using minetest.after)).
Last edited by Nore on Thu Jan 31, 2013 11:19, edited 1 time in total.
 

BZab
Member
 
Posts: 126
Joined: Mon Jan 28, 2013 10:04

by BZab » Thu Jan 31, 2013 12:25

Tell me when it will be finished :D It will be rly good and usefull mod :D +1
 

rarkenin
Member
 
Posts: 668
Joined: Tue Nov 20, 2012 20:48

by rarkenin » Thu Jan 31, 2013 15:23

Very nice!
Admin pro tempore on 0gb.us:30000. Ask me if you have a problem, or just want help.
This is a signature virus. Add me to your signature so that I can multiply.
Now working on my own clone, Mosstest.
I guess I'm back for some time.
 

User avatar
Bas080
Member
 
Posts: 398
Joined: Mon May 21, 2012 15:54
GitHub: bas080
IRC: bas080
In-game: bas080

by Bas080 » Fri Feb 01, 2013 06:20

To make the api easier to use you could put the " minetest.register_on_generated(function(minp, maxp, seed) " within the function. Simpeler for the one using your api/mod
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all

function perlinore.generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, height_min, height_max, noise_min, noise_max)
  minetest.register_on_generated(function(minp, maxp, seed)
...the code
  end)
end


I like the idea and wil try it out soon!
 

prestidigitator
Member
 
Posts: 632
Joined: Thu Feb 21, 2013 23:54

by prestidigitator » Tue Apr 09, 2013 08:33

Hmm. Why not use the L-system tree functionality to generate veins? Might be able to use some core C++ engine functionality for something cool that it was never intended for. Hacking at its finest. ;-)
 

User avatar
kotolegokot
Member
 
Posts: 131
Joined: Mon Jul 02, 2012 17:03

by kotolegokot » Mon Apr 15, 2013 11:14

The link is not working.
I'm creator of these mods: Locked sign, Locked furnace, Money. And I'm a developer of The RealTest Game.
 

noobly
Member
 
Posts: 29
Joined: Fri Apr 19, 2013 15:47

by noobly » Fri Apr 19, 2013 19:39

SegFault22 wrote:Awesome! Not even Minecraft has this!


+1
 

User avatar
Casimir
Member
 
Posts: 1101
Joined: Fri Aug 03, 2012 16:59

by Casimir » Fri Apr 19, 2013 21:04

kotolegokot wrote:The link is not working.

New link in first post.
Note: This is a new version, still very experimental, includes Nores vines, not using the new "generate ore" function.
I don't have the motivation, and don't have the time to continue this. So don't expect any updates from me.

edit: To prevent misunderstandings: It includes the vines code, but it is not used.
Last edited by Casimir on Fri Apr 19, 2013 23:24, edited 1 time in total.
 

User avatar
12Me21
Member
 
Posts: 826
Joined: Tue Mar 05, 2013 00:36

by 12Me21 » Fri Apr 19, 2013 21:37

Cool!!!
I was wondering, is it possible to make a node generate only once in the whole map?
This is a signature virus. Add me to your signature so that I can multiply.
Don't ever save anything as a JPEG.
 


Return to WIP Mods

Who is online

Users browsing this forum: No registered users and 18 guests

cron