I have been using 3dveins for a long time, it being my favourite plugin.
It has gotten so bad that I can't almost bother playing on a map without it. I love Geology, and DF is one of those games which has great potential in representing geology in an interesting way, that is why I wish to address some hickups with 3dveins, mostly regarding its stability.
Usually, several parameters dictate if 3dveins will be able to complete or not, if a faulty parameter is detected, the plugin terminates, such as with the code below.
Foward Vein Placement:
for (size_t i = 0; i < info->vein_mat.size(); i++)
{
int parent_id = info->vein_nested_in[i];
if (parent_id >= (int)refs.size())
{
out.printerr("Forward vein reference in biome %d.\n", biome->info.geo_index);
return false;
}
[...]
I am wondering what this does? is it that the vein extends or originates in tiles outside of the map?
If I for example add the tag in bold, 3dveins will terminate pre completion. Removing [SOIL] works, but then the layer will act as a rock in purposes for digging and will produce boulders.
[INORGANIC:CLAY]
[USE_MATERIAL_TEMPLATE:SOIL_TEMPLATE]
[STATE_NAME_ADJ:ALL_SOLID:clay][DISPLAY_COLOR:7:7:0][TILE:23]
[SOIL][b][ENVIRONMENT:SOIL:CLUSTER:100][/b]
[SOLID_DENSITY:1210] SCS = 20/60/20
[MATERIAL_REACTION_PRODUCT:FIRED_MAT:INORGANIC:CERAMIC_EARTHENWARE]
[DISPLAY_UNGLAZED]
3dveins will not run since Inorganic->Soil is not viable for veins(and clusters) according to this line. Is there a way to circumvent this. How about just removing the line, would that work?
if (!isStoneInorganic(key.first))
{
out.printerr(
"Invalid vein material: %s\n",
MaterialInfo(0, key.first).getToken().c_str()
);
return false;
}
Lastly, when using a map with extreme mineral frequency, the "Parent vein not placed" usually terminates 3dveins.
I'm not familiar with the -> markers, but I believe that it says if QUEUE[j] has parent and the QUEUE[j] parent is not placed.
for (size_t j = 0; j < queue.size(); j++)
{
if (queue[j]->parent && !queue[j]->parent->placed)
{
out.printerr(
"\nParent vein not placed for %s %s.\n",
MaterialInfo(0,queue[j]->vein.first).getToken().c_str(),
ENUM_KEY_STR(inclusion_type, queue[j]->vein.second).c_str()
);
return false;
}
[...]
I would like to know what makes a parent vein not placed? I'm guessing it is somewhere in void "VeinExtent::place_tiles()"