aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorConstantin Wenger <constantin.wenger@googlemail.com>2011-07-22 20:53:29 +0200
committerConstantin Wenger <constantin.wenger@googlemail.com>2011-07-22 20:53:29 +0200
commit383698186f954f52b8a957ef741175c437bf2502 (patch)
treef56ab1050d20d24cccaf830f3029193d025edf21 /src
parentfb4c3ab4fbd29498a72a488199be58ead7505cc7 (diff)
parent7985d746f97ce1b37b6ca48a8a3e7ed70d02e4b0 (diff)
downloadminetest-383698186f954f52b8a957ef741175c437bf2502.tar.gz
minetest-383698186f954f52b8a957ef741175c437bf2502.tar.bz2
minetest-383698186f954f52b8a957ef741175c437bf2502.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src')
-rw-r--r--src/map.cpp68
-rw-r--r--src/mapgen.cpp2
-rw-r--r--src/mapnode.cpp42
-rw-r--r--src/test.cpp33
4 files changed, 101 insertions, 44 deletions
diff --git a/src/map.cpp b/src/map.cpp
index e47b1b212..e1769b8ef 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -2005,7 +2005,15 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos)
{
/*dstream<<"initBlockMake(): ("<<blockpos.X<<","<<blockpos.Y<<","
<<blockpos.Z<<")"<<std::endl;*/
-
+
+ // Do nothing if not inside limits (+-1 because of neighbors)
+ if(blockpos_over_limit(blockpos - v3s16(1,1,1)) ||
+ blockpos_over_limit(blockpos + v3s16(1,1,1)))
+ {
+ data->no_op = true;
+ return;
+ }
+
data->no_op = false;
data->seed = m_seed;
data->blockpos = blockpos;
@@ -2056,6 +2064,7 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos)
neighboring blocks
*/
+ // The area that contains this block and it's neighbors
v3s16 bigarea_blocks_min = blockpos - v3s16(1,1,1);
v3s16 bigarea_blocks_max = blockpos + v3s16(1,1,1);
@@ -2080,7 +2089,7 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data,
if(data->no_op)
{
- dstream<<"finishBlockMake(): no-op"<<std::endl;
+ //dstream<<"finishBlockMake(): no-op"<<std::endl;
return NULL;
}
@@ -2332,49 +2341,54 @@ MapBlock * ServerMap::generateBlock(
Get central block
*/
MapBlock *block = getBlockNoCreateNoEx(p);
- assert(block);
#if 0
/*
Check result
*/
- bool erroneus_content = false;
- for(s16 z0=0; z0<MAP_BLOCKSIZE; z0++)
- for(s16 y0=0; y0<MAP_BLOCKSIZE; y0++)
- for(s16 x0=0; x0<MAP_BLOCKSIZE; x0++)
+ if(block)
{
- v3s16 p(x0,y0,z0);
- MapNode n = block->getNode(p);
- if(n.d == CONTENT_IGNORE)
+ bool erroneus_content = false;
+ for(s16 z0=0; z0<MAP_BLOCKSIZE; z0++)
+ for(s16 y0=0; y0<MAP_BLOCKSIZE; y0++)
+ for(s16 x0=0; x0<MAP_BLOCKSIZE; x0++)
+ {
+ v3s16 p(x0,y0,z0);
+ MapNode n = block->getNode(p);
+ if(n.d == CONTENT_IGNORE)
+ {
+ dstream<<"CONTENT_IGNORE at "
+ <<"("<<p.X<<","<<p.Y<<","<<p.Z<<")"
+ <<std::endl;
+ erroneus_content = true;
+ assert(0);
+ }
+ }
+ if(erroneus_content)
{
- dstream<<"CONTENT_IGNORE at "
- <<"("<<p.X<<","<<p.Y<<","<<p.Z<<")"
- <<std::endl;
- erroneus_content = true;
assert(0);
}
}
- if(erroneus_content)
- {
- assert(0);
- }
#endif
#if 0
/*
Generate a completely empty block
*/
- for(s16 z0=0; z0<MAP_BLOCKSIZE; z0++)
- for(s16 x0=0; x0<MAP_BLOCKSIZE; x0++)
+ if(block)
{
- for(s16 y0=0; y0<MAP_BLOCKSIZE; y0++)
+ for(s16 z0=0; z0<MAP_BLOCKSIZE; z0++)
+ for(s16 x0=0; x0<MAP_BLOCKSIZE; x0++)
{
- MapNode n;
- if(y0%2==0)
- n.d = CONTENT_AIR;
- else
- n.d = CONTENT_STONE;
- block->setNode(v3s16(x0,y0,z0), n);
+ for(s16 y0=0; y0<MAP_BLOCKSIZE; y0++)
+ {
+ MapNode n;
+ if(y0%2==0)
+ n.d = CONTENT_AIR;
+ else
+ n.d = CONTENT_STONE;
+ block->setNode(v3s16(x0,y0,z0), n);
+ }
}
}
#endif
diff --git a/src/mapgen.cpp b/src/mapgen.cpp
index dfea862a5..8dda93c96 100644
--- a/src/mapgen.cpp
+++ b/src/mapgen.cpp
@@ -1331,7 +1331,7 @@ void make_block(BlockMakeData *data)
{
if(data->no_op)
{
- dstream<<"makeBlock: no-op"<<std::endl;
+ //dstream<<"makeBlock: no-op"<<std::endl;
return;
}
diff --git a/src/mapnode.cpp b/src/mapnode.cpp
index 391e593f9..1e9b64989 100644
--- a/src/mapnode.cpp
+++ b/src/mapnode.cpp
@@ -142,8 +142,10 @@ void init_mapnode()
Initially set every block to be shown as an unknown block.
Don't touch CONTENT_IGNORE or CONTENT_AIR.
*/
- for(u16 i=0; i<=253; i++)
+ for(u16 i=0; i<256; i++)
{
+ if(i == CONTENT_IGNORE || i == CONTENT_AIR)
+ continue;
ContentFeatures *f = &g_content_features[i];
f->setAllTextures("unknown_block.png");
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
@@ -265,10 +267,10 @@ void MapNode::serialize(u8 *dest, u8 version)
{
// In these versions, CONTENT_IGNORE and CONTENT_AIR
// are 255 and 254
- if(d == CONTENT_IGNORE)
- d = 255;
- else if(d == CONTENT_AIR)
- d = 254;
+ if(actual_d == CONTENT_IGNORE)
+ actual_d = 255;
+ else if(actual_d == CONTENT_AIR)
+ actual_d = 254;
}
if(version == 0)
@@ -315,17 +317,25 @@ void MapNode::deSerialize(u8 *source, u8 version)
d = source[0];
param = source[1];
param2 = source[2];
-
- // Convert from old version to new
- if(version <= 18)
- {
- // In these versions, CONTENT_IGNORE and CONTENT_AIR
- // are 255 and 254
- if(d == 255)
- d = CONTENT_IGNORE;
- else if(d == 254)
- d = CONTENT_AIR;
- }
+ }
+
+ // Convert from old version to new
+ if(version <= 18)
+ {
+ // In these versions, CONTENT_IGNORE and CONTENT_AIR
+ // are 255 and 254
+ if(d == 255)
+ d = CONTENT_IGNORE;
+ else if(d == 254)
+ d = CONTENT_AIR;
+ }
+ // version 19 is fucked up with sometimes the old values and sometimes not
+ if(version == 19)
+ {
+ if(d == 255)
+ d = CONTENT_IGNORE;
+ else if(d == 254)
+ d = CONTENT_AIR;
}
}
diff --git a/src/test.cpp b/src/test.cpp
index 7d71552a8..0487f1436 100644
--- a/src/test.cpp
+++ b/src/test.cpp
@@ -61,6 +61,38 @@ struct TestUtilities
assert(is_yes("FAlse") == false);
}
};
+
+struct TestSettings
+{
+ void Run()
+ {
+ Settings s;
+ // Test reading of settings
+ s.parseConfigLine("leet = 1337");
+ s.parseConfigLine("leetleet = 13371337");
+ s.parseConfigLine("leetleet_neg = -13371337");
+ s.parseConfigLine("floaty_thing = 1.1");
+ s.parseConfigLine("stringy_thing = asd /( ¤%&(/\" BLÖÄRP");
+ s.parseConfigLine("coord = (1, 2, 4.5)");
+ assert(s.getS32("leet") == 1337);
+ assert(s.getS16("leetleet") == 32767);
+ assert(s.getS16("leetleet_neg") == -32768);
+ // Not sure if 1.1 is an exact value as a float, but doesn't matter
+ assert(fabs(s.getFloat("floaty_thing") - 1.1) < 0.001);
+ assert(s.get("stringy_thing") == "asd /( ¤%&(/\" BLÖÄRP");
+ assert(fabs(s.getV3F("coord").X - 1.0) < 0.001);
+ assert(fabs(s.getV3F("coord").Y - 2.0) < 0.001);
+ assert(fabs(s.getV3F("coord").Z - 4.5) < 0.001);
+ // Test the setting of settings too
+ s.setFloat("floaty_thing_2", 1.2);
+ s.setV3F("coord2", v3f(1, 2, 3.3));
+ assert(s.get("floaty_thing_2").substr(0,3) == "1.2");
+ assert(fabs(s.getFloat("floaty_thing_2") - 1.2) < 0.001);
+ assert(fabs(s.getV3F("coord2").X - 1.0) < 0.001);
+ assert(fabs(s.getV3F("coord2").Y - 2.0) < 0.001);
+ assert(fabs(s.getV3F("coord2").Z - 3.3) < 0.001);
+ }
+};
struct TestCompress
{
@@ -1033,6 +1065,7 @@ void run_tests()
DSTACK(__FUNCTION_NAME);
dstream<<"run_tests() started"<<std::endl;
TEST(TestUtilities);
+ TEST(TestSettings);
TEST(TestCompress);
TEST(TestMapNode);
TEST(TestVoxelManipulator);