From 157a4cf18cb9c098f465b8baecd7d2cd5705f2dd Mon Sep 17 00:00:00 2001 From: Kahrl Date: Sat, 21 Jan 2012 00:11:44 +0100 Subject: Node placement / mineral / serialization / iron freq / node_dig callback - Node placement code moved to Lua - Mineral system removed (added default:stone_with_coal and default:stone_with_iron). - MapBlock and MapNode serialization updated. - Mapgen: Frequency of iron increased. - node_dig callback and related changes. --- src/mapgen.cpp | 300 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 152 insertions(+), 148 deletions(-) (limited to 'src/mapgen.cpp') diff --git a/src/mapgen.cpp b/src/mapgen.cpp index c2256cedb..fe2ce13f5 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -22,7 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "noise.h" #include "mapblock.h" #include "map.h" -#include "mineral.h" //#include "serverobject.h" #include "content_sao.h" #include "nodedef.h" @@ -1652,15 +1651,20 @@ void make_block(BlockMakeData *data) MapNode n_##name(c_##name); CONTENT_VARIABLE(ndef, stone); - CONTENT_VARIABLE(ndef, water_source); CONTENT_VARIABLE(ndef, air); + CONTENT_VARIABLE(ndef, water_source); CONTENT_VARIABLE(ndef, dirt); CONTENT_VARIABLE(ndef, sand); CONTENT_VARIABLE(ndef, gravel); + CONTENT_VARIABLE(ndef, clay); CONTENT_VARIABLE(ndef, lava_source); CONTENT_VARIABLE(ndef, cobble); CONTENT_VARIABLE(ndef, mossycobble); CONTENT_VARIABLE(ndef, dirt_with_grass); + CONTENT_VARIABLE(ndef, junglegrass); + CONTENT_VARIABLE(ndef, stone_with_coal); + CONTENT_VARIABLE(ndef, stone_with_iron); + CONTENT_VARIABLE(ndef, mese); /* Make base ground level @@ -1702,139 +1706,6 @@ void make_block(BlockMakeData *data) } } - /* - Add minerals - */ - - { - PseudoRandom mineralrandom(blockseed); - - /* - Add meseblocks - */ - for(s16 i=0; i 0.0) - new_content = MapNode(LEGN(ndef, "CONTENT_STONE"), MINERAL_IRON); - /*if(noisebuf_ground_wetness.get(x,y,z) > 0.0) - vmanip.m_data[i] = MapNode(LEGN(ndef, "CONTENT_MUD")); - else - vmanip.m_data[i] = MapNode(LEGN(ndef, "CONTENT_SAND"));*/ - } - /*else if(noisebuf_ground_crumbleness.get(x,y,z) > 0.1) - { - }*/ - - if(new_content.getContent() != CONTENT_IGNORE) - { - for(u16 i=0; i<27; i++) - { - v3s16 p = v3s16(x,y,z) + g_27dirs[i]; - u32 vi = vmanip.m_area.index(p); - if(vmanip.m_data[vi].getContent() == base_content) - { - if(mineralrandom.next()%sparseness == 0) - vmanip.m_data[vi] = new_content; - } - } - } - } - } - /* - Add coal - */ - //for(s16 i=0; i < MYMAX(0, 50 - abs(node_min.Y+8 - (-30))); i++) - //for(s16 i=0; i<50; i++) - u16 coal_amount = 30; - u16 coal_rareness = 60 / coal_amount; - if(coal_rareness == 0) - coal_rareness = 1; - if(mineralrandom.next()%coal_rareness == 0) - { - u16 a = mineralrandom.next() % 16; - u16 amount = coal_amount * a*a*a / 1000; - for(s16 i=0; i 1.2) - vmanip.m_data[i].setContent(LEGN(ndef, "CONTENT_MUD")); + vmanip.m_data[i].setContent(c_dirt); }*/ data->vmanip->m_area.add_y(em, i, -1); } @@ -2077,23 +1948,23 @@ void make_block(BlockMakeData *data) ((claynoise > 0) && (claynoise < 0.12) && (current_depth == 1)) ); if (have_clay) - vmanip.m_data[i] = MapNode(LEGN(ndef, "CONTENT_CLAY")); + vmanip.m_data[i] = MapNode(c_clay); else - vmanip.m_data[i] = MapNode(LEGN(ndef, "CONTENT_SAND")); + vmanip.m_data[i] = MapNode(c_sand); } #if 1 else if(current_depth==0 && !water_detected && y >= WATER_LEVEL && air_detected) - vmanip.m_data[i] = MapNode(LEGN(ndef, "CONTENT_GRASS")); + vmanip.m_data[i] = MapNode(c_dirt_with_grass); #endif else - vmanip.m_data[i] = MapNode(LEGN(ndef, "CONTENT_MUD")); + vmanip.m_data[i] = MapNode(c_dirt); } else { - if(vmanip.m_data[i].getContent() == LEGN(ndef, "CONTENT_MUD") - || vmanip.m_data[i].getContent() == LEGN(ndef, "CONTENT_GRASS")) - vmanip.m_data[i] = MapNode(LEGN(ndef, "CONTENT_STONE")); + if(vmanip.m_data[i].getContent() == c_dirt + || vmanip.m_data[i].getContent() == c_dirt_with_grass) + vmanip.m_data[i] = MapNode(c_stone); } current_depth++; @@ -2171,7 +2042,7 @@ void make_block(BlockMakeData *data) make_papyrus(vmanip, p, ndef); } // Trees grow only on mud and grass, on land - else if((n->getContent() == c_dirt || n->getContent() == LEGN(ndef, "CONTENT_GRASS")) && y > WATER_LEVEL + 2) + else if((n->getContent() == c_dirt || n->getContent() == c_dirt_with_grass) && y > WATER_LEVEL + 2) { p.Y++; //if(surface_humidity_2d(data->seed, v2s16(x, y)) < 0.5) @@ -2238,10 +2109,10 @@ void make_block(BlockMakeData *data) continue; /*p.Y--; if(vmanip.m_area.contains(p)) - vmanip.m_data[vmanip.m_area.index(p)] = LEGN(ndef, "CONTENT_MUD"); + vmanip.m_data[vmanip.m_area.index(p)] = c_dirt; p.Y++;*/ if(vmanip.m_area.contains(p)) - vmanip.m_data[vmanip.m_area.index(p)] = LEGN(ndef, "CONTENT_JUNGLEGRASS"); + vmanip.m_data[vmanip.m_area.index(p)] = c_junglegrass; } } @@ -2269,7 +2140,7 @@ void make_block(BlockMakeData *data) /*{ u32 i = data->vmanip->m_area.index(v3s16(p)); MapNode *n = &data->vmanip->m_data[i]; - if(n->getContent() != LEGN(ndef, "CONTENT_MUD") && n->getContent() != LEGN(ndef, "CONTENT_GRASS")) + if(n->getContent() != c_dirt && n->getContent() != c_dirt_with_grass) continue; }*/ // Will be placed one higher @@ -2304,7 +2175,7 @@ void make_block(BlockMakeData *data) /*{ u32 i = data->vmanip->m_area.index(v3s16(p)); MapNode *n = &data->vmanip->m_data[i]; - if(n->getContent() != LEGN(ndef, "CONTENT_MUD") && n->getContent() != LEGN(ndef, "CONTENT_GRASS")) + if(n->getContent() != c_dirt && n->getContent() != c_dirt_with_grass) continue; }*/ // Will be placed one lower @@ -2315,6 +2186,139 @@ void make_block(BlockMakeData *data) #endif } + /* + Add minerals + */ + + { + PseudoRandom mineralrandom(blockseed); + + /* + Add meseblocks + */ + for(s16 i=0; i 0.0) + new_content = MapNode(c_stone_with_iron); + /*if(noisebuf_ground_wetness.get(x,y,z) > 0.0) + vmanip.m_data[i] = MapNode(c_dirt); + else + vmanip.m_data[i] = MapNode(c_sand);*/ + } + /*else if(noisebuf_ground_crumbleness.get(x,y,z) > 0.1) + { + }*/ + + if(new_content.getContent() != CONTENT_IGNORE) + { + for(u16 i=0; i<27; i++) + { + v3s16 p = v3s16(x,y,z) + g_27dirs[i]; + u32 vi = vmanip.m_area.index(p); + if(vmanip.m_data[vi].getContent() == base_content) + { + if(mineralrandom.next()%sparseness == 0) + vmanip.m_data[vi] = new_content; + } + } + } + } + } + /* + Add coal + */ + //for(s16 i=0; i < MYMAX(0, 50 - abs(node_min.Y+8 - (-30))); i++) + //for(s16 i=0; i<50; i++) + u16 coal_amount = 30; + u16 coal_rareness = 60 / coal_amount; + if(coal_rareness == 0) + coal_rareness = 1; + if(mineralrandom.next()%coal_rareness == 0) + { + u16 a = mineralrandom.next() % 16; + u16 amount = coal_amount * a*a*a / 1000; + for(s16 i=0; i