Minor changes in Mapgens and HUD text pos

master
MoNTE48 2019-06-07 22:17:46 +02:00
parent 5b5ed93bc3
commit 73affb7b0c
6 changed files with 64 additions and 29 deletions

View File

@ -360,6 +360,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("mapgen_limit", "31000");
settings->setDefault("chunksize", "5");
settings->setDefault("mg_flags", "dungeons");
settings->setDefault("mgflat_spflags", "nocaves");
settings->setDefault("fixed_map_seed", "");
settings->setDefault("max_block_generate_distance", "8");
settings->setDefault("projecting_dungeons", "false");

View File

@ -331,17 +331,17 @@ void Hud::drawLuaElements(const v3s16 &camera_offset)
if (e->pos.X == 0.5) {
v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2),
#if defined(__ANDROID__)
(e->align.Y - 1.0) * (textsize.Height) * 4);
(e->align.Y - 1.0) * (textsize.Height) * 4);
#elif defined(__IOS__)
(e->align.Y - 1.0) * (textsize.Height) * 3);
(e->align.Y - 1.0) * (textsize.Height) * 3 * g_settings->getFloat("hud_scaling"));
#else
(e->align.Y - 1.0) * (textsize.Height / 2));
(e->align.Y - 1.0) * (textsize.Height / 2));
#endif
v2s32 offs(e->offset.X, e->offset.Y);
font->draw(text.c_str(), size + pos + offset + offs, color);
} else {
v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2),
(e->align.Y - 1.0) * (textsize.Height / 2));
(e->align.Y - 1.0) * (textsize.Height / 2));
v2s32 offs(e->offset.X, e->offset.Y);
font->draw(text.c_str(), size + pos + offset + offs, color);
}

View File

@ -28,8 +28,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/string.h"
#include "util/container.h"
#define MAPGEN_DEFAULT MAPGEN_V7
#define MAPGEN_DEFAULT_NAME "v7"
#define MAPGEN_DEFAULT MAPGEN_V7P
#define MAPGEN_DEFAULT_NAME "v7p"
/////////////////// Mapgen flags
#define MG_TREES 0x01 // Deprecated. Moved into mgv6 flags

View File

@ -42,6 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
FlagDesc flagdesc_mapgen_flat[] = {
{"lakes", MGFLAT_LAKES},
{"hills", MGFLAT_HILLS},
{"caves", MGFLAT_CAVES},
{NULL, 0}
};
@ -68,6 +69,10 @@ MapgenFlat::MapgenFlat(int mapgenid, MapgenFlatParams *params, EmergeManager *em
// 3D noise
MapgenBasic::np_cave1 = params->np_cave1;
MapgenBasic::np_cave2 = params->np_cave2;
bedrock_level = water_level - 64;
// Resolve additional nodes
c_bedrock = ndef->getId("mapgen_bedrock");
}
@ -83,7 +88,7 @@ MapgenFlat::~MapgenFlat()
MapgenFlatParams::MapgenFlatParams()
{
spflags = 0;
ground_level = 8;
ground_level = 2;
large_cave_depth = -33;
cave_width = 0.09;
lake_threshold = -0.45;
@ -187,35 +192,40 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
blockseed = getBlockSeed2(full_node_min, seed);
// Generate base terrain, mountains, and ridges with initial heightmaps
s16 stone_surface_max_y = generateTerrain();
if (node_max.Y <= bedrock_level) {
// Only generate bedrock
generateBedrock();
} else {
// Generate base and mountain terrain
s16 stone_surface_max_y = generateTerrain();
// Create heightmap
updateHeightmap(node_min, node_max);
// Create heightmap
updateHeightmap(node_min, node_max);
// Init biome generator, place biome-specific nodes, and build biomemap
biomegen->calcBiomeNoise(node_min);
MgStoneType stone_type = generateBiomes();
// Init biome generator, place biome-specific nodes, and build biomemap
biomegen->calcBiomeNoise(node_min);
MgStoneType stone_type = generateBiomes();
if (flags & MG_CAVES)
generateCaves(stone_surface_max_y, large_cave_depth);
if (flags & MGFLAT_CAVES)
generateCaves(stone_surface_max_y, large_cave_depth);
if (flags & MG_DUNGEONS)
generateDungeons(stone_surface_max_y, stone_type);
if (flags & MG_DUNGEONS)
generateDungeons(stone_surface_max_y, stone_type);
// Generate the registered decorations
if (flags & MG_DECORATIONS)
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
// Generate the registered decorations
if (flags & MG_DECORATIONS)
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
// Generate the registered ores
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
// Generate the registered ores
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
// Sprinkle some dust on top after everything else was generated
dustTopNodes();
// Sprinkle some dust on top after everything else was generated
dustTopNodes();
//printf("makeChunk: %dms\n", t.stop());
//printf("makeChunk: %dms\n", t.stop());
updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
}
if (flags & MG_LIGHT)
calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0),
@ -227,11 +237,26 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
this->generating = false;
}
void MapgenFlat::generateBedrock()
{
MapNode n_bedrock(c_bedrock);
for (s16 z = node_min.Z; z <= node_max.Z; z++)
for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
u32 vi = vm->m_area.index(node_min.X, y, z);
for (s16 x = node_min.X; x <= node_max.X; x++, vi++) {
if (vm->m_data[vi].getContent() == CONTENT_IGNORE)
vm->m_data[vi] = n_bedrock;
}
}
}
s16 MapgenFlat::generateTerrain()
{
MapNode n_air(CONTENT_AIR);
MapNode n_stone(c_stone);
MapNode n_bedrock(c_bedrock);
MapNode n_water(c_water_source);
v3s16 em = vm->m_area.getExtent();
@ -256,10 +281,14 @@ s16 MapgenFlat::generateTerrain()
}
u32 vi = vm->m_area.index(x, node_min.Y - 1, z);
for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
if (vm->m_data[vi].getContent() == CONTENT_IGNORE) {
if (y <= stone_level) {
vm->m_data[vi] = n_stone;
if (y <= bedrock_level)
vm->m_data[vi] = n_bedrock; // Bedrock
else
vm->m_data[vi] = n_stone; // Base and mountain terrain
if (y > stone_surface_max_y)
stone_surface_max_y = y;
} else if (y <= water_level) {

View File

@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/////// Mapgen Flat flags
#define MGFLAT_LAKES 0x01
#define MGFLAT_HILLS 0x02
#define MGFLAT_CAVES 0x04
class BiomeManager;
@ -63,6 +64,7 @@ public:
virtual void makeChunk(BlockMakeData *data);
int getSpawnLevelAtPoint(v2s16 p);
void generateBedrock();
s16 generateTerrain();
private:
@ -73,6 +75,9 @@ private:
float hill_threshold;
float hill_steepness;
Noise *noise_terrain;
s16 bedrock_level;
content_t c_bedrock;
};
#endif

View File

@ -168,7 +168,7 @@ int MapgenV7P::getSpawnLevelAtPoint(v2s16 p)
if (spflags & MGV7P_MOUNTAINS)
y = MYMAX(mountainLevelAtPoint(p.X, p.Y), y);
if (y < water_level || y > water_level + 16)
if (y <= water_level || y > water_level + 16)
return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
else
return y + 2; // +2 because surface is at y and due to biome 'dust'