code:
# textdomain: df_mapitems

### castle_coral.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Castle Coral=Schlosskoralle
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Castle Coral Skeleton=Schlosskorallenskelett

### cave_coral.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Cave Coral=Höhlenkoralle

### cave_pearls.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Cave Pearls=Höhlenperlen

### crystals_mese.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Flawless Mese Block=Makelloser Mese Block
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Flawless Mese Crystal=Makelloser Mese-Kristall

### crystals_ruby.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Big Red Crystal=Großer roter Kristall
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Red Crystal=Riesiger roter Kristall
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Red Crystal Vein=Rote Kristallader

### crystals_salt.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Luminous Salt Crystal=Leuchtender Salzkristall
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Salty Cobble=Salziges Kopfsteinpflaster

### doc.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
A crystal of salt grown from water that percolated through the depths of the earth, picking up all manner of minerals as it went.=Ein Salzkristall aus Wasser, das durch die Tiefen der Erde sickerte und dabei alle möglichen Mineralien aufnahm.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
A highly aggressive form of lichen that eats into solid rock, turning its upper surfaces rough and a little spongy.=Eine sehr aggressive Form von Flechten, die sich in festes Gestein frisst und ihre oberen Oberflächen rau und ein wenig schwammig macht.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
A nasty kelp-like plant that grows in patches on the floor of the Sunless Sea. Its reflective patches draw in the unwary and then its prickly barbs catch and hold small creatures.=Eine böse Seetang-ähnliche Pflanze, die in Flecken auf dem Boden des sonnenlosen Meeres wächst. Seine reflektierenden Flecken ziehen Unachtsame an und dann fangen und halten seine stacheligen Widerhaken kleine Kreaturen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
A rare form of coral found only deep underground in the Sunless Sea, cave coral grows hanging from the ceilings of flooded caverns.=Eine seltene Form von Korallen, die nur tief unter der Erde im sonnenlosen Meer zu finden ist. Höhlenkorallen wachsen an den Decken überfluteter Höhlen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Although a strong mineral matrix remains, spongestone has enough organic content that it can be used as soil for farming.=Obwohl eine starke Mineralmatrix verbleibt, hat Schwammstein einen ausreichenden organischen Gehalt, um als Boden für die Landwirtschaft verwendet zu werden.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Although stalagmites are blunter than the stalactites above them, they can cause extra damage to the unwary caver who falls on them.=Obwohl Stalagmiten stumpfer sind als die Stalaktiten über ihnen, können sie dem unachtsamen Höhlenforscher, der auf sie fällt, zusätzlichen Schaden zufügen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from its aesthetic value this crystal has no particular use.=Abgesehen von seinem ästhetischen Wert hat dieser Kristall keine besondere Verwendung.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from its aesthetic value this rock has no particular use.=Abgesehen von seinem ästhetischen Wert hat dieser Stein keine besondere Verwendung.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from the aesthetic beauty of its formations flowstone has no special properties or uses.=Abgesehen von der ästhetischen Schönheit seiner Formationen hat Flowstone keine besonderen Eigenschaften oder Verwendungen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from their aesthetic beauty, cave corals can be harvested for simple building materials.=Neben ihrer ästhetischen Schönheit können Höhlenkorallen für einfache Baumaterialien geerntet werden.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from their soft glow and beauty, cave pearls have no practical use. Except perhaps as handholds for climbing.=Abgesehen von ihrem weichen Glanz und ihrer Schönheit haben Höhlenperlen keinen praktischen Nutzen. Außer vielleicht als Haltegriffe zum Klettern.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Attemping to mine this rock knocks the salt crust away, leaving only base stone.=Der Versuch, diesen Stein abzubauen, stößt die Salzkruste weg und hinterlässt nur Grundstein.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Castle Coral has little practical use aside from perhaps as a distinctive-looking building material.=Castle Coral hat wenig praktischen Nutzen, außer vielleicht als unverwechselbar aussehendes Baumaterial.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Cave moss has no known uses aside from the faint glow it emits. It dies when exposed to bright light sources such as the Sun.=Höhlenmoos hat keine bekannten Verwendungszwecke, abgesehen von dem schwachen Schein, den es ausstrahlt. Es stirbt, wenn es hellen Lichtquellen wie der Sonne ausgesetzt wird.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Cave moss is technically a form of mold, but fortunately a relatively benign one given its ubiquity. Its fibers form a tough but springy mat over the surface of any organic-rich soil that accumulates deep underground.=Höhlenmoos ist technisch gesehen eine Form von Schimmel, aber glücklicherweise eine relativ harmlose Form aufgrund seiner Allgegenwart. Seine Fasern bilden eine zähe, aber federnde Matte über der Oberfläche eines organisch reichen Bodens, der sich tief unter der Erde ansammelt.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Deep in the infernal conditions of the magma sea, over the course of millions of years, mese crystals grow into flawless blocks that glow bright with strange energies.=Tief in den höllischen Bedingungen des Magma-Meeres wachsen diese Kristalle im Laufe von Millionen von Jahren zu makellosen Blöcken, die vor seltsamen Energien hell leuchten.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Deep under the surface of the Sunless Sea are the rare and beautiful Castle Corals, so named due to their resemblance to small undersea castles.=Tief unter der Oberfläche des sonnenlosen Meeres befinden sich die seltenen und wunderschönen Burgkorallen, die aufgrund ihrer Ähnlichkeit mit kleinen Unterwasserschlössern so benannt wurden.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Falling onto an icicle is particularly damaging.=Das Fallen auf einen Eiszapfen ist besonders schädlich.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Floor fungus has no known uses. It can penetrate deeply into cobblestone constructions if an infestation gets hold, but it is difficult to transport and is inhibited by light so it hasn't spread beyond the deep caverns.=Bodenpilz hat keine bekannten Verwendungen. Es kann tief in Kopfsteinpflaster eindringen, wenn sich ein Befall festsetzt, ist jedoch schwer zu transportieren und wird durch Licht gehemmt, sodass es sich nicht über die tiefen Höhlen hinaus ausbreitet.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Floor fungus produces a thin, slick film that spreads through the cracks of broken rock. Its ability to subsist on the tiniest traces of nutrients means it's found in relatively harsh underground environments.=Bodenpilz erzeugt einen dünnen, glatten Film, der sich durch die Risse von gebrochenem Gestein ausbreitet. Aufgrund seiner Fähigkeit, sich von kleinsten Nährstoffspuren zu ernähren, ist es in relativ rauen unterirdischen Umgebungen anzutreffen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Flowstone is a carbonate-rich rock formation deposited by flowing water. It consists of minerals that the water dissolved earlier as it widens cracks and fissures into caves.=Flowstone ist eine karbonatreiche Gesteinsformation, die sich durch fließendes Wasser ablagert. Es besteht aus Mineralien, die das Wasser früher aufgelöst hat, als es Risse und Risse in Höhlen weitete.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Glistening strings of silk hang from the ceilings of some of the larger caverns, lit by the millions of tiny bioluminescent worms that spun them. Glow worms prey on the insects they lure and entangle with their faux starry sky - and sometimes the occasional bat or other larger flying beast.=Von den Decken einiger der größeren Höhlen hängen glitzernde Seidenfäden, die von den Millionen winziger biolumineszierender Würmer beleuchtet werden, die sie gesponnen haben. Glühwürmchen jagen den Insekten nach, die sie locken und mit ihrem künstlichen Sternenhimmel verwickeln - und manchmal auch gelegentlich Fledermäuse oder andere größere fliegende Tiere.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Glow worms can be harvested and used as a source of light but they die when exposed to light significantly brighter than themselves or when immersed in water. A colony of glow worms hung in a hospitable environment will undergo a modest amount of growth, allowing it to be divided and propagated.=Glühwürmchen können geerntet und als Lichtquelle verwendet werden. Sie sterben jedoch ab, wenn sie Licht ausgesetzt werden, das deutlich heller ist als sie selbst oder wenn sie in Wasser getaucht sind. Eine Kolonie von Glühwürmchen, die in einer gastfreundlichen Umgebung aufgehängt ist, wird ein bescheidenes Wachstum erfahren, so dass sie geteilt und vermehrt werden kann.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Hoar moss has no known use aside from providing a faint source of light.=Hoarmoos hat keine bekannte Verwendung, abgesehen von der Bereitstellung einer schwachen Lichtquelle.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Hoar moss is a strange glowing crust that sometimes forms on the surface of water flowing over ice.=Raureif ist eine seltsam leuchtende Kruste, die sich manchmal auf der Oberfläche von Wasser bildet, das über Eis fließt.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Ice formed by water dripping slowly into a cold environment, icicles tend to be exceptionally pure and clear.=Eis, das durch Wasser gebildet wird, das langsam in eine kalte Umgebung tropft. Eiszapfen sind in der Regel außergewöhnlich rein und klar.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Large, dry caverns deep underground are well suited to aeons-long processes that concentrate crystalline substances in their walls. This rock is riddled with veins of the stuff.=Große, trockene Kavernen tief unter der Erde eignen sich gut für Äonen lange Prozesse, bei denen kristalline Substanzen in ihren Wänden konzentriert werden. Dieser Felsen ist voller Adern.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Monolithic crystals of this size form only over extremely long periods deep underground, in large long-lived cavities that allow them room to grow. Water and the life it hosts tend to disrupt the formation process of these crystals so they're only found in dry environments.=Monolithische Kristalle dieser Größe bilden sich nur über extrem lange Zeiträume tief unter der Erde in großen, langlebigen Hohlräumen, in denen sie wachsen können. Wasser und das Leben, das es beherbergt, neigen dazu, den Bildungsprozess dieser Kristalle zu stören, sodass sie nur in trockenen Umgebungen vorkommen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Much water has seeped through the cracks in this rock and then quickly evaporated, leaving a crust of salt laced throughout.=Viel Wasser ist durch die Risse in diesem Felsen gesickert und dann schnell verdunstet, wobei eine Salzkruste zurückbleibt.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Organic material accumulates in the enlarged pores of rock rot, but not enough to be considered "soil" in the usable sense.=Organisches Material reichert sich in den vergrößerten Poren der Gesteinsfäule an, reicht jedoch nicht aus, um im verwendbaren Sinne als "Boden" betrachtet zu werden.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Pebble fungus grows in soil that is rich enough for farming.=Kieselpilz wächst in Böden, die reich genug für die Landwirtschaft sind.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Sand scum is a crust of algae that sometimes accumulates on wet sand deep underground, somehow managing to eke out a meager living from the phosphorescent light emitted by other organisms.=Sandschaum ist eine Algenkruste, die sich manchmal tief im Untergrund auf nassem Sand ansammelt und es irgendwie schafft, einen mageren Lebensunterhalt mit dem phosphoreszierenden Licht anderer Organismen zu verdienen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Sand scum is useless. You can get sand out of it, at least.=Sandschaum ist nutzlos. Zumindest kann man Sand herausholen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Snareweed has no practical use, its fibers disintegrate when they dry.=Snareweed hat keinen praktischen Nutzen, seine Fasern zerfallen beim Trocknen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Soil that is rich enough to support gigantic mushrooms can support innumerable smaller ones as well. Pebble fungus is a prolific form of mushroom that covers the soil in small spheroidal fruiting bodies.=Böden, die reich genug sind, um gigantische Pilze zu unterstützen, können auch unzählige kleinere Pilze unterstützen. Kieselpilz ist eine fruchtbare Form von Pilzen, die den Boden in kleinen kugelförmigen Fruchtkörpern bedeckt.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Spongestone is the result of advanced rock rot in its ultimate form. The stone has become so riddled with pores and cavities that it's no longer really stone.=Schwammstein ist das Ergebnis der fortgeschrittenen Steinfäule in ihrer ultimativen Form. Der Stein ist so voller Poren und Hohlräume, dass er nicht mehr wirklich Stein ist.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Stillworm grows in soil that is rich enough for farming.=Stillworm wächst auf Böden, die reich genug für die Landwirtschaft sind.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Stillworm is not actually a kind of worm, but a sort of fungus that looks uncannily like pale, motionless earthworms intertwined with the soil.=Stillworm ist eigentlich keine Art Wurm, sondern eine Art Pilz, der unheimlich aussieht wie blasse, bewegungslose Regenwürmer, die mit dem Boden verflochten sind.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The iconic stalactites and stalagmites found in caverns are composed of flowstone (or 'dripstone' in the case of these formations). Moist dripstone is still undergoing growth, whereas dry dripstone is found in 'dead' caverns once the source of water that created them ceases.=Die in Kavernen gefundenen ikonischen Stalaktiten und Stalagmiten bestehen aus Flussstein (oder bei diesen Formationen „Tropfstein“). Feuchter Tropfstein wächst immer noch, während trockener Tropfstein in „toten“ Höhlen gefunden wird, sobald die Wasserquelle, aus der sie entstanden sind, aufhört.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
These blocks can be broken down into a large number of mese crystals, but cannot be artificially reassembled.=Diese Blöcke können in eine große Anzahl dieser Kristalle zerlegt, aber nicht künstlich wieder zusammengesetzt werden.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
These nodules are actually calcified bacterial colonies.=Diese Knötchen sind tatsächlich verkalkte Bakterienkolonien.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Traces of Mese must have been dissolved by the water as this crystal has an inherent glow to it. Not enough Mese to be useful as a reagent, unfortunately.=Spuren von Mese müssen vom Wasser aufgelöst worden sein, da dieser Kristall einen inhärenten Glanz hat. Leider nicht genug, um als Reagenz nützlich zu sein.

### flowstone.lua ###

Dry Dripstone=Trockener Tropfstein
Dry Flowstone=Trockener Fließstein
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Icicle=Eiszapfen
Wet Dripstone=Nasser Tropfstein
Wet Flowstone=Nasser Fließstein

### glow_worms.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Glow Worms=Glühwürmchen

### ground_cover.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Cobblestone with Floor Fungus=Kopfsteinpflaster mit Bodenpilz
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Cave Moss=Dreck mit Höhlenmoos
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Cave Moss and Footprint=Schmutz mit Höhlenmoos und Fußabdruck
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Pebble Fungus=Schmutz mit Kieselpilz
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Pebble Fungus and Footprint=Schmutz mit Kieselpilz und Fußabdruck
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Stillworm=Dreck mit Stillworm
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Stillworm and Footprint=Schmutz mit Stillworm und Footprint
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Ice with Hoar Moss=Eis mit Hoar Moss
Rock Rot=
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Sand Scum=Sandschaum
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Sand Scum with Footprint=Sandschaum mit Fußabdruck
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Spongestone=Schwammstein
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Spongestone with Footprint=Schwammstein mit Fußabdruck

### snareweed.lua ###

Snareweed=

### veinstone.lua ###

Veinstone=


code:
# textdomain: df_mapitems

### castle_coral.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Castle Coral=Castello di Coral
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Castle Coral Skeleton=Scheletro di corallo del castello

### cave_coral.lua ###

Cave Coral=Grano di caverna

### cave_pearls.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Cave Pearls=Perle di caverna

### crystals_mese.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Flawless Mese Block=Impeccabile Mese Block
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Flawless Mese Crystal=Cristallo di Mese impeccabile

### crystals_ruby.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Big Red Crystal=Grande cristallo rosso
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Red Crystal=Cristallo rosso gigante
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Red Crystal Vein=Vena di cristallo rossa

### crystals_salt.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Luminous Salt Crystal=Cristallo di sale luminoso
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Salty Cobble=Ciottoli salati

### doc.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
A crystal of salt grown from water that percolated through the depths of the earth, picking up all manner of minerals as it went.=Un cristallo di sale cresciuto dall'acqua che filtrava attraverso le profondità della terra, raccogliendo ogni sorta di minerali mentre procedeva.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
A highly aggressive form of lichen that eats into solid rock, turning its upper surfaces rough and a little spongy.=Una forma molto aggressiva di lichene che mangia la roccia solida, rendendo le sue superfici superiori ruvide e un po 'spugnose.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
A nasty kelp-like plant that grows in patches on the floor of the Sunless Sea. Its reflective patches draw in the unwary and then its prickly barbs catch and hold small creatures.=Una brutta pianta simile ad alghe che cresce a chiazze sul fondo del Mare senza sole. Le sue macchie riflettenti attirano gli incauti e poi le sue punte spinose catturano e trattengono piccole creature.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
A rare form of coral found only deep underground in the Sunless Sea, cave coral grows hanging from the ceilings of flooded caverns.=Una rara forma di corallo che si trova solo nel sottosuolo del Mare senza sole, il corallo delle caverne cresce appeso ai soffitti delle caverne allagate.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Although a strong mineral matrix remains, spongestone has enough organic content that it can be used as soil for farming.=Sebbene rimanga una forte matrice minerale, la spongestone ha un contenuto organico sufficiente da poter essere utilizzata come terreno per l'agricoltura.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Although stalagmites are blunter than the stalactites above them, they can cause extra damage to the unwary caver who falls on them.=Sebbene le stalagmiti siano più smussate delle stalattiti sopra di loro, possono causare danni extra allo speleologo incauto che cade su di loro.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from its aesthetic value this crystal has no particular use.=A parte il suo valore estetico questo cristallo non ha particolari utilizzi.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from its aesthetic value this rock has no particular use.=A parte il suo valore estetico questa roccia non ha particolari utilizzi.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from the aesthetic beauty of its formations flowstone has no special properties or uses.=A parte la bellezza estetica delle sue formazioni, il flowstone non ha proprietà o usi particolari.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from their aesthetic beauty, cave corals can be harvested for simple building materials.=A parte la loro bellezza estetica, i coralli delle caverne possono essere raccolti per semplici materiali da costruzione.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Aside from their soft glow and beauty, cave pearls have no practical use. Except perhaps as handholds for climbing.=A parte il loro bagliore tenue e la loro bellezza, le perle delle caverne non hanno alcun uso pratico. Tranne forse come appigli per arrampicarsi.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Attemping to mine this rock knocks the salt crust away, leaving only base stone.=Il tentativo di estrarre questa roccia spazza via la crosta di sale, lasciando solo la pietra di base.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Castle Coral has little practical use aside from perhaps as a distinctive-looking building material.=Castle Coral ha poco uso pratico a parte forse come materiale da costruzione dall'aspetto distintivo.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Cave moss has no known uses aside from the faint glow it emits. It dies when exposed to bright light sources such as the Sun.=Il muschio delle caverne non ha usi conosciuti a parte il debole bagliore che emette. Muore se esposto a sorgenti luminose intense come il sole.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Cave moss is technically a form of mold, but fortunately a relatively benign one given its ubiquity. Its fibers form a tough but springy mat over the surface of any organic-rich soil that accumulates deep underground.=Il muschio delle caverne è tecnicamente una forma di muffa, ma fortunatamente relativamente benigna data la sua ubiquità. Le sue fibre formano un tappeto resistente ma elastico sulla superficie di qualsiasi terreno ricco di sostanze organiche che si accumula in profondità nel sottosuolo.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Deep in the infernal conditions of the magma sea, over the course of millions of years, mese crystals grow into flawless blocks that glow bright with strange energies.=Nelle profondità delle condizioni infernali del mare di magma, nel corso di milioni di anni, i cristalli di mese crescono in blocchi impeccabili che brillano luminosi di strane energie.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Deep under the surface of the Sunless Sea are the rare and beautiful Castle Corals, so named due to their resemblance to small undersea castles.=In profondità sotto la superficie del Mare senza sole si trovano i rari e bellissimi Castle Corals, così chiamati per la loro somiglianza con i piccoli castelli sottomarini.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Falling onto an icicle is particularly damaging.=Cadere su un ghiacciolo è particolarmente dannoso.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Floor fungus has no known uses. It can penetrate deeply into cobblestone constructions if an infestation gets hold, but it is difficult to transport and is inhibited by light so it hasn't spread beyond the deep caverns.=Il fungo del pavimento non ha usi conosciuti. Può penetrare in profondità nelle costruzioni di ciottoli se un'infestazione si impadronisce, ma è difficile da trasportare ed è inibito dalla luce, quindi non si è diffuso oltre le profonde caverne.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Floor fungus produces a thin, slick film that spreads through the cracks of broken rock. Its ability to subsist on the tiniest traces of nutrients means it's found in relatively harsh underground environments.=Il fungo del pavimento produce una pellicola sottile e liscia che si diffonde attraverso le fessure della roccia frantumata. La sua capacità di sopravvivere alle più piccole tracce di sostanze nutritive significa che si trova in ambienti sotterranei relativamente difficili.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Flowstone is a carbonate-rich rock formation deposited by flowing water. It consists of minerals that the water dissolved earlier as it widens cracks and fissures into caves.=Flowstone è una formazione rocciosa ricca di carbonati depositata dall'acqua corrente. È costituito da minerali che l'acqua ha sciolto in precedenza mentre allarga crepe e fessure in grotte.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Glistening strings of silk hang from the ceilings of some of the larger caverns, lit by the millions of tiny bioluminescent worms that spun them. Glow worms prey on the insects they lure and entangle with their faux starry sky - and sometimes the occasional bat or other larger flying beast.=Luccicanti fili di seta pendono dai soffitti di alcune delle caverne più grandi, illuminati dai milioni di minuscoli vermi bioluminescenti che li fanno girare. I vermi luminosi predano gli insetti che attirano e intrappolano con il loro finto cielo stellato, e talvolta il pipistrello occasionale o altre bestie volanti più grandi.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Glow worms can be harvested and used as a source of light but they die when exposed to light significantly brighter than themselves or when immersed in water. A colony of glow worms hung in a hospitable environment will undergo a modest amount of growth, allowing it to be divided and propagated.=I lombrichi possono essere raccolti e usati come fonte di luce, ma muoiono se esposti a una luce significativamente più brillante di loro o quando vengono immersi nell'acqua. Una colonia di lucciole appese in un ambiente ospitale subirà una modesta crescita, che ne consentirà la divisione e la propagazione.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Hoar moss has no known use aside from providing a faint source of light.=Il muschio di Hoar non ha alcun uso noto a parte fornire una debole fonte di luce.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Hoar moss is a strange glowing crust that sometimes forms on the surface of water flowing over ice.=Il muschio è una strana crosta luminosa che a volte si forma sulla superficie dell'acqua che scorre sul ghiaccio.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Ice formed by water dripping slowly into a cold environment, icicles tend to be exceptionally pure and clear.=Ghiaccio formato dall'acqua che gocciola lentamente in un ambiente freddo, i ghiaccioli tendono ad essere eccezionalmente puri e limpidi.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Large, dry caverns deep underground are well suited to aeons-long processes that concentrate crystalline substances in their walls. This rock is riddled with veins of the stuff.=Grandi caverne asciutte nel sottosuolo ben si adattano a processi lunghi eoni che concentrano sostanze cristalline nelle loro pareti. Questa roccia è crivellata di vene del materiale.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Monolithic crystals of this size form only over extremely long periods deep underground, in large long-lived cavities that allow them room to grow. Water and the life it hosts tend to disrupt the formation process of these crystals so they're only found in dry environments.=Cristalli monolitici di queste dimensioni si formano solo per periodi estremamente lunghi nel sottosuolo, in grandi cavità longeve che consentono loro di crescere. L'acqua e la vita che ospita tendono a interrompere il processo di formazione di questi cristalli, quindi si trovano solo in ambienti asciutti.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Much water has seeped through the cracks in this rock and then quickly evaporated, leaving a crust of salt laced throughout.=Molta acqua è filtrata attraverso le fessure di questa roccia e poi è evaporata rapidamente, lasciando una crosta di sale allacciata.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Organic material accumulates in the enlarged pores of rock rot, but not enough to be considered "soil" in the usable sense.=Il materiale organico si accumula nei pori dilatati della putrefazione della roccia, ma non abbastanza per essere considerato "suolo" nel senso utilizzabile.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Pebble fungus grows in soil that is rich enough for farming.=Il fungo di ghiaia cresce in un terreno abbastanza ricco per l'agricoltura.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Sand scum is a crust of algae that sometimes accumulates on wet sand deep underground, somehow managing to eke out a meager living from the phosphorescent light emitted by other organisms.=La schiuma di sabbia è una crosta di alghe che a volte si accumula sulla sabbia bagnata in profondità nel sottosuolo, riuscendo in qualche modo a sopravvivere a una misera vita dalla luce fosforescente emessa da altri organismi.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Sand scum is useless. You can get sand out of it, at least.=La schiuma di sabbia è inutile. Almeno puoi tirar fuori la sabbia.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Snareweed has no practical use, its fibers disintegrate when they dry.=Snareweed non ha alcun uso pratico, le sue fibre si disintegrano quando si asciugano.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Soil that is rich enough to support gigantic mushrooms can support innumerable smaller ones as well. Pebble fungus is a prolific form of mushroom that covers the soil in small spheroidal fruiting bodies.=Un terreno abbastanza ricco da supportare funghi giganteschi può supportare anche innumerevoli funghi più piccoli. Il fungo di ghiaia è una forma prolifica di fungo che copre il terreno in piccoli corpi fruttiferi sferoidali.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Spongestone is the result of advanced rock rot in its ultimate form. The stone has become so riddled with pores and cavities that it's no longer really stone.=Spongestone è il risultato del marciume roccioso avanzato nella sua forma definitiva. La pietra è diventata così piena di pori e cavità che non è più veramente pietra.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Stillworm grows in soil that is rich enough for farming.=Il verme selvatico cresce in un terreno abbastanza ricco per l'agricoltura.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Stillworm is not actually a kind of worm, but a sort of fungus that looks uncannily like pale, motionless earthworms intertwined with the soil.=Il verme morto non è in realtà una specie di verme, ma una specie di fungo che assomiglia stranamente a lombrichi pallidi e immobili intrecciati con il terreno.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The iconic stalactites and stalagmites found in caverns are composed of flowstone (or 'dripstone' in the case of these formations). Moist dripstone is still undergoing growth, whereas dry dripstone is found in 'dead' caverns once the source of water that created them ceases.=Le iconiche stalattiti e stalagmiti trovate nelle caverne sono composte da pietrisco (o "gocciolatoio" nel caso di queste formazioni). La pietra gocciolante umida è ancora in fase di crescita, mentre la pietra gocciolante secca si trova nelle caverne "morte" una volta che la fonte d'acqua che le ha create cessa.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
These blocks can be broken down into a large number of mese crystals, but cannot be artificially reassembled.=Questi blocchi possono essere scomposti in un gran numero di cristalli mese, ma non possono essere riassemblati artificialmente.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
These nodules are actually calcified bacterial colonies.=Questi noduli sono in realtà colonie batteriche calcificate.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Traces of Mese must have been dissolved by the water as this crystal has an inherent glow to it. Not enough Mese to be useful as a reagent, unfortunately.=Tracce di Mese devono essere state sciolte dall'acqua poiché questo cristallo ha un bagliore intrinseco. Sfortunatamente, non abbastanza Mese per essere utile come reagente.

### flowstone.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dry Dripstone=Pietra gocciolante secca
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dry Flowstone=Flowstone secco
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Icicle=Ghiacciolo
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Wet Dripstone=Dripstone bagnato
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Wet Flowstone=Flowstone bagnato

### glow_worms.lua ###

Glow Worms=Vermi luminosi

### ground_cover.lua ###

Cobblestone with Floor Fungus=Ciottoli con funghi del terreno
Dirt with Cave Moss=Terra con muschio di caverna
Dirt with Cave Moss and Footprint=Terra con muschio di caverna
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Pebble Fungus=Sporcizia con funghi di ghiaia
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Pebble Fungus and Footprint=Sporcizia con funghi di ghiaia e impronta
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Stillworm=Sporcizia con Stillworm
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Stillworm and Footprint=Sporcizia con Stillworm e Footprint
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Ice with Hoar Moss=Ghiaccio con Hoar Moss
Rock Rot=
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Sand Scum=Feccia di sabbia
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Sand Scum with Footprint=Feccia di sabbia con impronta
Spongestone=
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Spongestone with Footprint=Pietra spugnosa con impronta

### snareweed.lua ###

Snareweed=

### veinstone.lua ###

Veinstone=

repo_name: korkut/MeseCraft

license: mit


code:
# textdomain: df_mapitems

### castle_coral.lua ###

Castle Coral=
Castle Coral Skeleton=

### cave_coral.lua ###

Cave Coral=

### cave_pearls.lua ###

Cave Pearls=

### crystals_mese.lua ###

Flawless Mese Block=
Flawless Mese Crystal=

### crystals_ruby.lua ###

Big Red Crystal=
Giant Red Crystal=
Red Crystal Vein=

### crystals_salt.lua ###

Luminous Salt Crystal=
Salty Cobble=

### doc.lua ###

A crystal of salt grown from water that percolated through the depths of the earth, picking up all manner of minerals as it went.=

A highly aggressive form of lichen that eats into solid rock, turning its upper surfaces rough and a little spongy.=

A nasty kelp-like plant that grows in patches on the floor of the Sunless Sea. Its reflective patches draw in the unwary and then its prickly barbs catch and hold small creatures.=

A rare form of coral found only deep underground in the Sunless Sea, cave coral grows hanging from the ceilings of flooded caverns.=

Although a strong mineral matrix remains, spongestone has enough organic content that it can be used as soil for farming.=

Although stalagmites are blunter than the stalactites above them, they can cause extra damage to the unwary caver who falls on them.=

Aside from its aesthetic value this crystal has no particular use.=

Aside from its aesthetic value this rock has no particular use.=

Aside from the aesthetic beauty of its formations flowstone has no special properties or uses.=

Aside from their aesthetic beauty, cave corals can be harvested for simple building materials.=

Aside from their soft glow and beauty, cave pearls have no practical use. Except perhaps as handholds for climbing.=

Attemping to mine this rock knocks the salt crust away, leaving only base stone.=

Castle Coral has little practical use aside from perhaps as a distinctive-looking building material.=

Cave moss has no known uses aside from the faint glow it emits. It dies when exposed to bright light sources such as the Sun.=

Cave moss is technically a form of mold, but fortunately a relatively benign one given its ubiquity. Its fibers form a tough but springy mat over the surface of any organic-rich soil that accumulates deep underground.=

Deep in the infernal conditions of the magma sea, over the course of millions of years, mese crystals grow into flawless blocks that glow bright with strange energies.=

Deep under the surface of the Sunless Sea are the rare and beautiful Castle Corals, so named due to their resemblance to small undersea castles.=

Falling onto an icicle is particularly damaging.=

Floor fungus has no known uses. It can penetrate deeply into cobblestone constructions if an infestation gets hold, but it is difficult to transport and is inhibited by light so it hasn't spread beyond the deep caverns.=

Floor fungus produces a thin, slick film that spreads through the cracks of broken rock. Its ability to subsist on the tiniest traces of nutrients means it's found in relatively harsh underground environments.=

Flowstone is a carbonate-rich rock formation deposited by flowing water. It consists of minerals that the water dissolved earlier as it widens cracks and fissures into caves.=

Glistening strings of silk hang from the ceilings of some of the larger caverns, lit by the millions of tiny bioluminescent worms that spun them. Glow worms prey on the insects they lure and entangle with their faux starry sky - and sometimes the occasional bat or other larger flying beast.=

Glow worms can be harvested and used as a source of light but they die when exposed to light significantly brighter than themselves or when immersed in water. A colony of glow worms hung in a hospitable environment will undergo a modest amount of growth, allowing it to be divided and propagated.=

Hoar moss has no known use aside from providing a faint source of light.=

Hoar moss is a strange glowing crust that sometimes forms on the surface of water flowing over ice.=

Ice formed by water dripping slowly into a cold environment, icicles tend to be exceptionally pure and clear.=

Large, dry caverns deep underground are well suited to aeons-long processes that concentrate crystalline substances in their walls. This rock is riddled with veins of the stuff.=

Monolithic crystals of this size form only over extremely long periods deep underground, in large long-lived cavities that allow them room to grow. Water and the life it hosts tend to disrupt the formation process of these crystals so they're only found in dry environments.=

Much water has seeped through the cracks in this rock and then quickly evaporated, leaving a crust of salt laced throughout.=

Organic material accumulates in the enlarged pores of rock rot, but not enough to be considered "soil" in the usable sense.=

Pebble fungus grows in soil that is rich enough for farming.=

Sand scum is a crust of algae that sometimes accumulates on wet sand deep underground, somehow managing to eke out a meager living from the phosphorescent light emitted by other organisms.=

Sand scum is useless. You can get sand out of it, at least.=

Snareweed has no practical use, its fibers disintegrate when they dry.=

Soil that is rich enough to support gigantic mushrooms can support innumerable smaller ones as well. Pebble fungus is a prolific form of mushroom that covers the soil in small spheroidal fruiting bodies.=

Spongestone is the result of advanced rock rot in its ultimate form. The stone has become so riddled with pores and cavities that it's no longer really stone.=

Stillworm grows in soil that is rich enough for farming.=

Stillworm is not actually a kind of worm, but a sort of fungus that looks uncannily like pale, motionless earthworms intertwined with the soil.=

The iconic stalactites and stalagmites found in caverns are composed of flowstone (or 'dripstone' in the case of these formations). Moist dripstone is still undergoing growth, whereas dry dripstone is found in 'dead' caverns once the source of water that created them ceases.=

These blocks can be broken down into a large number of mese crystals, but cannot be artificially reassembled.=

These nodules are actually calcified bacterial colonies.=

Traces of Mese must have been dissolved by the water as this crystal has an inherent glow to it. Not enough Mese to be useful as a reagent, unfortunately.=

### flowstone.lua ###

Dry Dripstone=
Dry Flowstone=
Icicle=
Wet Dripstone=
Wet Flowstone=

### glow_worms.lua ###

Glow Worms=

### ground_cover.lua ###

Cobblestone with Floor Fungus=
Dirt with Cave Moss=
Dirt with Cave Moss and Footprint=
Dirt with Pebble Fungus=
Dirt with Pebble Fungus and Footprint=
Dirt with Stillworm=
Dirt with Stillworm and Footprint=
Ice with Hoar Moss=
Rock Rot=
Sand Scum=
Sand Scum with Footprint=
Spongestone=
Spongestone with Footprint=

### snareweed.lua ###

Snareweed=

### veinstone.lua ###

Veinstone=


code:
name = df_mapitems
description = Various node types used by the dfcaverns mapgen mod. Includes cave coral, flowstone, glowing crystals, glow worms, moss and fungi ground cover, and snare weed.
depends = df_dependencies, subterrane
optional_depends = df_farming, doc, radiant_damage, footprints


code:
#To disable glow worm growth, set this to 0.
dfcaverns_glow_worm_delay_multiplier (glow worm growth delay multiplier) float 10
dfcaverns_snareweed_damage (Snareweed causes damage to player) bool true
dfcaverns_invulnerable_slade (Slade cannot be damaged) bool true
dfcaverns_destructive_pit_plasma (Pit plasma destroys adjacent nodes) bool false


code:
local S = minetest.get_translator(minetest.get_current_modname())

minetest.register_node("df_mapitems:snareweed", {
	description = S("Snareweed"),
	_doc_items_longdesc = df_mapitems.doc.snareweed_desc,
	_doc_items_usagehelp = df_mapitems.doc.snareweed_usage,
	tiles = {df_dependencies.texture_dirt .. "^dfcaverns_snareweed_roots.png", df_dependencies.texture_dirt},
	drawtype="plantlike_rooted",
	paramtype2 = "leveled",
	special_tiles = {{name = "dfcaverns_snareweed.png", tileable_vertical = true}},
	is_ground_content = false,
	drop = df_dependencies.node_name_dirt,
	light_source = 6,
	groups = {crumbly = 3, soil = 1, handy=1,shovely=1, dirt=1,},
	sounds = df_dependencies.sound_dirt(),
	_mcl_blast_resistance = 0.5,
	_mcl_hardness = 0.6,
})

if df_mapitems.config.snareweed_damage then
	local timer = 0

	minetest.register_globalstep(function(dtime)
		timer = timer + dtime
		if timer >= 1 then
			timer = timer - 1
			for _, player in pairs(minetest.get_connected_players()) do
				local player_pos = player:get_pos() -- node player's feet are in this location.
				local rounded_pos = vector.round(player_pos)
				local nearby_nodes = minetest.find_nodes_in_area(vector.add(rounded_pos, {x=0, y= -8, z=0}), rounded_pos, {"df_mapitems:snareweed"})
				for _, node_pos in ipairs(nearby_nodes) do
					local node = minetest.get_node(node_pos)
					local distance = player_pos.y - node_pos.y
					if distance <= node.param2/16 then
						minetest.log("action", player:get_player_name() .. " takes 2 damage from snareweed at " .. minetest.pos_to_string(node_pos))
						player:set_hp(player:get_hp() - 2)
						break
					end
				end
			end
		end
	end)
end

local c_water = minetest.get_content_id(df_dependencies.node_name_water_source)
local c_dirt = minetest.get_content_id(df_dependencies.node_name_dirt)
local c_stone = minetest.get_content_id(df_dependencies.node_name_stone)
local c_snareweed = minetest.get_content_id("df_mapitems:snareweed")

df_mapitems.place_snareweed = function(area, data, bi, param2_data)
	local max_height = 0
	local index = bi + area.ystride
	while area:containsi(index) and data[index] == c_water and max_height <= 8*16 do
		index = index + area.ystride
		max_height = max_height + 16
	end
	if max_height > 0 then
		data[bi] = c_snareweed
		param2_data[bi] = math.min(math.random(3*16, 8*16), max_height)
	else
		data[bi] = c_dirt
	end
end

df_mapitems.place_snareweed_patch = function(area, data, bi, param2_data, radius)
	local pos = area:position(bi)
	for li in area:iterp(vector.add(pos, -radius), vector.add(pos, radius)) do
		local adjacent = li + area.ystride
		local node_type = data[li]
		if math.random() < 0.1  and (node_type == c_stone or node_type == c_dirt) and data[adjacent] == c_water then
			df_mapitems.place_snareweed(area, data, li, param2_data)
		end
	end
end


code:
-- Used by cave pearls and crystal clusters
-- These methods simulate "wallmounted" nodes using regular facedir, randomizing the rotation around the wallmounted direction.
-- Useful for naturalistic objects you want to have look irregular

df_mapitems.place_against_surface = function(itemstack, placer, pointed_thing)
	-- check if pointing at a node
	if not pointed_thing then
		return itemstack
	end
	if pointed_thing.type ~= "node" then
		return itemstack
	end

	local under_pos = pointed_thing.under
	local above_pos = pointed_thing.above

	local under_node = minetest.get_node(under_pos)
	local above_node = minetest.get_node(above_pos)

	if minetest.is_protected(above_pos, placer:get_player_name()) then
		minetest.record_protection_violation(above_pos, placer:get_player_name())
		return
	end

	local under_name = under_node.name
	local above_name = above_node.name
	local under_def = minetest.registered_nodes[under_name]
	local above_def = minetest.registered_nodes[above_name]

	-- return if any of the nodes is not registered
	if not under_def or not above_def then
		return itemstack
	end
	-- check if you can replace the node above the pointed node
	if not above_def.buildable_to then
		return itemstack
	end

	local dir = vector.subtract(under_pos, above_pos)
	local param2
	if dir.x > 0 then
		--facing +x: 16, 17, 18, 19,
		param2 = 15 + math.random(1,4)
	elseif dir.x < 0 then
		--facing -x: 12, 13, 14, 15
		param2 = 11 + math.random(1,4)
	elseif dir.z > 0 then
		--facing +z: 8, 9, 10, 11
		param2 = 7 + math.random(1,4)
	elseif dir.z < 0 then
		--facing -z: 4, 5, 6, 7
		param2 = 3 + math.random(1,4)
	elseif dir.y > 0 then
		--facing -y: 20, 21, 22, 23 (ceiling)
		param2 = 19 + math.random(1,4)
	else
		--facing +y: 0, 1, 2, 3 (floor)
		param2 = math.random(1,4) - 1
	end
	-- add the node and remove 1 item from the itemstack
	minetest.add_node(above_pos, {name = itemstack:get_name(), param2 = param2})
	if not minetest.is_creative_enabled(placer:get_player_name()) then
		itemstack:take_item()
	end
	return itemstack
end

-- Mapgen version of the above

local add_to_table = function(dest, source)
	for _, val in ipairs(source) do
		table.insert(dest, val)
	end
end

local valid_nodes = {} -- cache values
local is_valid_mounting_node = function(c_node)
	if valid_nodes[c_node] ~= nil then
		return valid_nodes[c_node]
	end
	local def = minetest.registered_nodes[minetest.get_name_from_content_id(c_node)]
	if def ~= nil
		and (def.drawtype == "normal" or def.drawtype == nil)
		and not def.buildable_to
		and not (def.groups and def.groups.falling_node) then
			valid_nodes[c_node] = true
			return true
	end
	valid_nodes[c_node] = false
	return false
end

--facing +x: 16, 17, 18, 19,
--facing -x: 12, 13, 14, 15
--facing +z: 8, 9, 10, 11
--facing -z: 4, 5, 6, 7
--facing -y: 20, 21, 22, 23, (ceiling)
--facing +y: 0, 1, 2, 3

local get_valid_facedirs_vm = function(vi, area, data)
	local dirs = {}
	local ystride = area.ystride
	local zstride = area.zstride
	if is_valid_mounting_node(data[vi+1]) then
		add_to_table(dirs, {16, 17, 18, 19})
	end
	if is_valid_mounting_node(data[vi-1]) then
		add_to_table(dirs, {12, 13, 14, 15})
	end
	if is_valid_mounting_node(data[vi-ystride]) then
		add_to_table(dirs, {0, 1, 2, 3})
	end
	if is_valid_mounting_node(data[vi+ystride]) then
		add_to_table(dirs, {20, 21, 22, 23})
	end
	if is_valid_mounting_node(data[vi+zstride]) then
		add_to_table(dirs, {8, 9, 10, 11})
	end
	if is_valid_mounting_node(data[vi-zstride]) then
		add_to_table(dirs, {4, 5, 6, 7})
	end
	return dirs
end

df_mapitems.place_against_surface_vm = function(c_node, vi, area, data, data_param2)
	local facedirs = get_valid_facedirs_vm(vi, area, data)
	local count = #facedirs
	if count > 0 then
		data[vi] = c_node
		data_param2[vi] = facedirs[math.random(1, count)]
	end
end


code:
local S = minetest.get_translator(minetest.get_current_modname())

-- overridden to trigger an achievement, without making achievements a dependency of this mod
df_mapitems.on_veinstone_punched = function()
end

minetest.register_node("df_mapitems:veinstone", {
	description = S("Veinstone"),
	_doc_items_longdesc = df_mapitems.doc.veinstone_desc,
	_doc_items_usagehelp = df_mapitems.doc.veinstone_usage,
	tiles = {df_dependencies.texture_stone .. "^dfcaverns_veins.png"},
	groups = {cracky = 3, stone = 1, lava_heatable = 1, pickaxey=1, building_block=1, material_stone=1},
	_magma_conduits_heats_to = df_dependencies.node_name_cobble,
	is_ground_content = false,
	light_source = 2,
	drop = "df_mapitems:veinstone",
	sounds = df_dependencies.sound_stone(),
	on_punch = function(pos, node, puncher, pointed_thing)
        minetest.node_punch(pos, node, puncher, pointed_thing)
		minetest.swap_node(pos, {name="df_mapitems:veinstone_pulse"})
		minetest.get_node_timer(pos):start(2)
		minetest.sound_play({name="dfcaverns_slow_heartbeat", gain=0.5}, {pos = pos})
		df_mapitems.on_veinstone_punched(pos, node, puncher, pointed_thing)
	end,
	_mcl_blast_resistance = 10,
	_mcl_hardness = 3,
})

minetest.register_node("df_mapitems:veinstone_pulse", {
	description = S("Veinstone"),
	_doc_items_longdesc = df_mapitems.doc.veinstone_desc,
	_doc_items_usagehelp = df_mapitems.doc.veinstone_usage,
	tiles = {df_dependencies.texture_stone .. "^dfcaverns_veins.png"},
	groups = {cracky = 3, stone = 1, lava_heatable = 1, not_in_creative_inventory = 1, pickaxey=1, building_block=1, material_stone=1},
	_magma_conduits_heats_to = df_dependencies.node_name_cobble,
	is_ground_content = false,
	light_source = 8,
	drop = "df_mapitems:veinstone",
	sounds = df_dependencies.sound_stone(),
	on_timer = function(pos, elapsed)
		local positions, count = minetest.find_nodes_in_area(vector.add(pos,1), vector.subtract(pos,1), "df_mapitems:veinstone")
		if count["df_mapitems:veinstone"] == 0 then
			positions, count = minetest.find_nodes_in_area(vector.add(pos,2), vector.subtract(pos,2), "df_mapitems:veinstone")
		end
		if count["df_mapitems:veinstone"] == 0 then
			positions = {[1] = minetest.find_node_near(pos, 3, "df_mapitems:veinstone")}
		end
		if positions[1] == nil then
			positions = {[1] = minetest.find_node_near(pos, 4, "df_mapitems:veinstone")}
		end
		if (positions[1] ~= nil) then
			minetest.sound_play({name="dfcaverns_slow_heartbeat", gain=0.5}, {pos = pos})
		end
		for _, neighbor_pos in pairs(positions) do
			minetest.swap_node(neighbor_pos, {name="df_mapitems:veinstone_pulse"})
			minetest.get_node_timer(neighbor_pos):start(2)
		end
		minetest.swap_node(pos, {name="df_mapitems:veinstone_refractory"})
		minetest.get_node_timer(pos):start(12)
	end,
	_mcl_blast_resistance = 10,
	_mcl_hardness = 3,
})

minetest.register_node("df_mapitems:veinstone_refractory", {
	description = S("Veinstone"),
	_doc_items_longdesc = df_mapitems.doc.veinstone_desc,
	_doc_items_usagehelp = df_mapitems.doc.veinstone_usage,
	tiles = {df_dependencies.texture_stone .. "^dfcaverns_veins.png"},
	groups = {cracky = 3, stone = 1, lava_heatable = 1, not_in_creative_inventory = 1, pickaxey=1, building_block=1, material_stone=1},
	_magma_conduits_heats_to = df_dependencies.node_name_cobble,
	is_ground_content = false,
	light_source = 1,
	drop = "df_mapitems:veinstone",
	sounds = df_dependencies.sound_stone(),
	on_timer = function(pos, elapsed)
		minetest.swap_node(pos, {name="df_mapitems:veinstone"})
	end,
	_mcl_blast_resistance = 10,
	_mcl_hardness = 3,
})


code:
local S = minetest.get_translator(minetest.get_current_modname())

---------------------------------------------------------------------------------------
-- Glownode and stalk

minetest.register_node("df_primordial_items:glownode", {
	description = S("Primordial Fungal Lantern"),
	_doc_items_longdesc = df_primordial_items.doc.glownode_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glownode_usage,
	drawtype = "glasslike",
	tiles = {"dfcaverns_mush_glownode.png"},
	paramtype = "light",
	sunlight_propagates = true,
	is_ground_content = false,
	groups = {cracky = 3, oddly_breakable_by_hand = 3, handy=1, glass=1, building_block=1, material_glass=1},
	sounds = df_dependencies.sound_glass(),
	light_source = minetest.LIGHT_MAX,
	_mcl_blast_resistance = 0.3,
	_mcl_hardness = 0.3,
})

minetest.register_node("df_primordial_items:glownode_stalk", {
	description = S("Primordial Fungal Lantern Stalk"),
	_doc_items_longdesc = df_primordial_items.doc.glownode_stalk_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glownode_stalk_usage,
	tiles = {"dfcaverns_mush_stalk_top.png", "dfcaverns_mush_stalk_top.png", "dfcaverns_mush_stalk_side.png"},
	paramtype2 = "facedir",
	is_ground_content = false,
	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, handy=1,axey=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	sounds = df_dependencies.sound_wood(),
	on_place = minetest.rotate_node,
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
})

minetest.register_node("df_primordial_items:glow_orb_hanging", {
	description = S("Primordial Fungal Orb"),
	_doc_items_longdesc = df_primordial_items.doc.glow_orb_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glow_orb_usage,
	tiles = {"dfcaverns_mush_orb_vert.png"},
	inventory_image = "dfcaverns_mush_orb_vert.png",
	wield_image = "dfcaverns_mush_orb_vert.png",
	groups = {snappy = 3, flammable = 1, attached_node = 1, plant = 1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
	paramtype = "light",
	paramtype2 = "degrotate",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	light_source = 6,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

local c_stalk = minetest.get_content_id("df_primordial_items:glownode_stalk")
local c_node = minetest.get_content_id("df_primordial_items:glownode")
local c_air = minetest.get_content_id("air")

df_primordial_items.spawn_ceiling_spire_vm = function(vi, area, data)
	local spire_height = math.random(1,10)

	local ystride = area.ystride
	local zstride = area.zstride

	for i = 0, spire_height do
		if data[vi-i*ystride] == c_air then
			data[vi-i*ystride] = c_stalk
		end
	end
	local bottom = vi - (spire_height +1) * ystride
	if data[bottom] == c_air then
		data[bottom] = c_node
	end

	if spire_height > 4 then -- thicken it all up
		for i = 0, math.floor(spire_height/2) do
			local current_vi = vi-i*ystride
			if data[current_vi+1] == c_air then
				data[current_vi+1] = c_stalk
			end
			if data[current_vi-1] == c_air then
				data[current_vi-1] = c_stalk
			end
			if data[current_vi+zstride] == c_air then
				data[current_vi+zstride] = c_stalk
			end
			if data[current_vi-zstride] == c_air then
				data[current_vi-zstride] = c_stalk
			end
		end

		if spire_height > 7 then
			bottom = bottom-ystride
			if data[bottom] == c_air then
				data[bottom] = c_node
			end
			if data[bottom-ystride] == c_air then
				data[bottom-ystride] = c_node
			end
			if data[bottom+1] == c_air then
				data[bottom+1] = c_node
			end
			if data[bottom-1] == c_air then
				data[bottom-1] = c_node
			end
			if data[bottom+zstride] == c_air then
				data[bottom+zstride] = c_node
			end
			if data[bottom-zstride] == c_air then
				data[bottom-zstride] = c_node
			end
		end
	end
end


code:
if not minetest.get_modpath("doc") then
	return
end

local S = minetest.get_translator(minetest.get_current_modname())

df_primordial_items.doc.big_mushroom_desc = S("Compared to the behemoths found elsewhere in the deep places of the world, the giant mushrooms of the primordial jungles are on the smaller side - often overwhelmed by the green plants that grow in the mysterious light below. Still, they can become substantial resources.")
df_primordial_items.doc.big_mushroom_usage = S("The soft flesh of these large mushrooms is much less woody than other giant mushrooms, making it ill-suited to structural use. This makes it rather more nutritious, however.")

df_primordial_items.doc.dirt_with_jungle_grass_desc = S("The soil of the primordial jungle is rife with strange life at every scale.")
df_primordial_items.doc.dirt_with_jungle_grass_usage = S("When left uncultivated primordial jungle soil will sprout all manner of strange wild plants.")
df_primordial_items.doc.dirt_with_mycelium_desc = S("Fungal fibers have infiltrated the ground in a spongy mass, making the soil half mineral and half living matter.")
df_primordial_items.doc.dirt_with_mycelium_usage = S("When left uncultivated mycelial soil will sprout all manner of strange wild fungi.")

df_primordial_items.doc.fern_desc = S("The dark-leaved ferns of the primordial jungle harken back to an earlier era of life in the world.")
--df_primordial_items.doc.fern_usage =
df_primordial_items.doc.grass_desc = S("These fibrous plants that grow in the deep appear similar to grass at a glance, but they are more closely related to horsetails - a form of vegetation from before the advent of modern plant forms. Ironically, pale cave wheat is more kin to surface grass than this is.")
--df_primordial_items.doc.grass_usage =

df_primordial_items.doc.ivy_desc = S("Tangled weaves of ivy hang from the ceiling where there are wide enough gaps between the bright sources of light.")
df_primordial_items.doc.ivy_usage = S("Ivy is climbable, if it hangs close enough to the ground it can serve as a path between floor and ceiling.")
df_primordial_items.doc.roots_desc = S("Somewhere above an enormous plant has wedged its roots down through the rock and emerged from the ceiling of another cavern.")
df_primordial_items.doc.roots_usage = S("These hanging roots are climbable.")

df_primordial_items.doc.fungal_grass_desc = S("Questing fibers of fungal mycelium sometimes erupt from the soil and reach upward, driven by chemical cues to seek out nourishment above. They look a lot like white grass, at a glance.")
--df_primordial_items.doc.fungal_grass_usage =

df_primordial_items.doc.tree_desc = S("The large woody plants of the primordial jungle are similar in appearance to the jungle trees of the surface, but are a result of convergent evolution from ancient cycad plants toward a common form.")
df_primordial_items.doc.tree_usage = S("Like wood of the surface world, primordial jungle trees can be chopped and carved as building material or as fuel.")
df_primordial_items.doc.tree_glowing_desc = S("The cracks in the bark of some primordial jungle trees become host to phosphorescent veins of symbiotic fungus.")
df_primordial_items.doc.tree_glowing_usage = S("The glowing bark fungus doesn't extend into the wood of the trunk, resulting in surprisingly mundane building material when hewn.")
--df_primordial_items.doc.leaves_desc =
--df_primordial_items.doc.leaves_usage =
df_primordial_items.doc.glowing_leaves_desc = S("Some fronds of primordial jungle trees also become host to the phosphorescent fungus that creeps through cracks in the bark.")
--df_primordial_items.doc.glowing_leaves_usage =

df_primordial_items.doc.giant_fern_desc = S("The still air of these ancient caverns have allowed ferns to grow to prodigious sizes, where storms and rain would normally tear their weaker fronds off on the surface of the world.")
df_primordial_items.doc.giant_fern_usage = S("When a fern grows to such sizes its stem becomes dense enough to be used as a form of wood.")

df_primordial_items.doc.giant_hyphae_desc = S("Fungus in its purest form, these gigantic rope-like hyphae creep over the surface of soil and burrow in to feed wherever nutrients are sensed.")
df_primordial_items.doc.giant_hyphae_usage = S("Much like a rope, hyphae have fibers inside that can be unraveled and used for a variety of crafts.")
df_primordial_items.doc.mycelial_fibers_desc = S("Fibers extracted from gigantic fungal hyphae.")
--df_primordial_items.doc.mycelial_fibers_usage =
df_primordial_items.doc.mycelial_thread_desc = df_primordial_items.doc.mycelial_fibers_desc
--df_primordial_items.doc.mycelial_thread_usage =

df_primordial_items.doc.giant_mushroom_desc = S("The grandest of the great mushroom species can be found in the deepest primordial caverns. Their broad caps have hanging gills.")
df_primordial_items.doc.giant_mushroom_usage = S("Much like the giant mushrooms of higher cavern layers, these can be carved into woody material for use as fuel or for building things. The grain of these primordial mushrooms is knurled.")
--df_primordial_items.doc.gills_desc =
--df_primordial_items.doc.gills_usage =

--df_primordial_items.doc.glow_orb_desc =
--df_primordial_items.doc.glow_orb_usage =
--df_primordial_items.doc.glow_plant_desc =
--df_primordial_items.doc.glow_plant_usage =
--df_primordial_items.doc.glow_pod_desc =
--df_primordial_items.doc.glow_pod_usage =

-- The giant hanging fungal structures from the ceiling
--df_primordial_items.doc.glownode_desc =
--df_primordial_items.doc.glownode_usage =
--df_primordial_items.doc.glownode_stalk_desc =
--df_primordial_items.doc.glownode_stalk_usage =

df_primordial_items.doc.packed_roots_desc = S("The steady light and unchanging growing conditions of the primordial caverns have led to great mountainous masses of plant material growing in particularly fertile spots, hardly identifiable as individual organisms.")
df_primordial_items.doc.packed_roots_usage = S("The gnarled interwoven root-like foundations of this plant material is not useful as building material, but can serve as a fuel source.")
df_primordial_items.doc.plant_matter_desc = df_primordial_items.doc.packed_roots_desc
df_primordial_items.doc.plant_matter_usage = df_primordial_items.doc.packed_roots_usage

--df_primordial_items.doc.small_mushroom_desc =
--df_primordial_items.doc.small_mushroom_usage =
--
--df_primordial_items.doc.thorn_desc =
--df_primordial_items.doc.thorn_usage =

df_primordial_items.doc.primordial_fruit_desc = S("This strange fruit from the depths has absorbed healthful energies.")
df_primordial_items.doc.primordial_fruit_usage = S("Eating this fruit will improve your vitality.")

df_primordial_items.doc.glowtato_desc = S("A strangely glowing starchy nodule from a plant that grew deeper than any plant has a right to.")
df_primordial_items.doc.glowtato_usage = S("Much energy is contained in this tuber. It tastes surprisingly good, too. You could cook with it but any change in its pure state would only reduce its value.")


code:
local S = minetest.get_translator(minetest.get_current_modname())

minetest.register_craftitem("df_primordial_items:primordial_fruit", {
	description = S("Primordial Fruit"),
	_doc_items_longdesc = df_primordial_items.doc.primordial_fruit_desc,
	_doc_items_usagehelp = df_primordial_items.doc.primordial_fruit_usage,
	inventory_image = "dfcaverns_primordial_fruit.png",
	groups = {food = 8, eatable=8, plant=1},
	sound = {eat = {name = "df_farming_gummy_chew", gain = 1.0}},
	on_use = minetest.item_eat(8),
	_hunger_ng = {heals = 8},
	_mcl_saturation = 12,
})

minetest.register_craftitem("df_primordial_items:glowtato", {
	description = S("Glowtato"),
	_doc_items_longdesc = df_primordial_items.doc.glowtato_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glowtato_usage,
	inventory_image = "dfcaverns_glowtato.png",
	sound = {eat = {name = "df_farming_chomp_crunch", gain = 1.0}},
	groups = {food = 8, dfcaverns_cookable = 1, eatable=8, plant=1},
	on_use = minetest.item_eat(8),
	_hunger_ng = {satiates = 8},
	_mcl_saturation = 8,
})


code:
local S = minetest.get_translator(minetest.get_current_modname())

-----------------------------------------------------------------------------------------------
-- Plants

-- Grass

minetest.register_node("df_primordial_items:fungal_grass_1", {
	description = S("Primordial Fungal Grass"),
	_doc_items_longdesc = df_primordial_items.doc.fungal_grass_desc,
	_doc_items_usagehelp = df_primordial_items.doc.fungal_grass_usage,
	tiles = {"dfcaverns_mush_grass_01.png"},
	inventory_image = "dfcaverns_mush_grass_01.png",
	wield_image = "dfcaverns_mush_grass_01.png",
	groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 11, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:fungal_grass_2", {
	description = S("Primordial Fungal Grass"),
	_doc_items_longdesc = df_primordial_items.doc.fungal_grass_desc,
	_doc_items_usagehelp = df_primordial_items.doc.fungal_grass_usage,
	tiles = {"dfcaverns_mush_grass_02.png"},
	inventory_image = "dfcaverns_mush_grass_02.png",
	wield_image = "dfcaverns_mush_grass_02.png",
	groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 11, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	place_param2 = 3,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

-- Glowing

minetest.register_node("df_primordial_items:glow_orb", {
	description = S("Primordial Fungal Orb"),
	_doc_items_longdesc = df_primordial_items.doc.glow_orb_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glow_orb_usage,
	tiles = {"dfcaverns_mush_orb.png"},
	inventory_image = "dfcaverns_mush_orb.png",
	wield_image = "dfcaverns_mush_orb.png",
	groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 13, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	light_source = 9,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:glow_orb_stalks", {
	description = S("Primordial Fungal Orb"),
	_doc_items_longdesc = df_primordial_items.doc.glow_orb_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glow_orb_usage,
	tiles = {"dfcaverns_mush_stalks.png"},
	inventory_image = "dfcaverns_mush_stalks.png",
	wield_image = "dfcaverns_mush_stalks.png",
	groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 13, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	light_source = 6,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:glow_pods", {
	description = S("Primordial Fungal Pod"),
	_doc_items_longdesc = df_primordial_items.doc.glow_pod_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glow_pod_usage,
	tiles = {"dfcaverns_mush_pods.png"},
	inventory_image = "dfcaverns_mush_pods.png",
	wield_image = "dfcaverns_mush_pods.png",
	groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 13, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
	paramtype = "light",
	drawtype = "plantlike",
	drop = {
		max_items = 2,
		items = {
			{
				rarity = 3,
				items = {"df_primordial_items:primordial_fruit"},
			},
			{
				rarity = 3,
				items = {"df_primordial_items:primordial_fruit"},
			},
		},
	},
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	light_source = 6,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

------------------------------------------------------------------------------------
-- Dirt

minetest.register_node("df_primordial_items:dirt_with_mycelium", {
	description = S("Dirt with Primordial Mycelium"),
	_doc_items_longdesc = df_primordial_items.doc.dirt_with_mycelium_desc,
	_doc_items_usagehelp = df_primordial_items.doc.dirt_with_mycelium_usage,
	tiles = {"dfcaverns_mush_soil.png"},
	groups = {crumbly = 3, soil = 1, light_sensitive_fungus = 13, handy=1,shovely=1, dirt=2, building_block=1, opaque=1},
	_dfcaverns_dead_node = df_dependencies.node_name_dirt,
	is_ground_content = false,
	paramtype = "light",
	drop = df_dependencies.node_name_dirt,
	sounds = df_dependencies.sound_dirt(),
	light_source = 3,
	_mcl_blast_resistance = 0.5,
	_mcl_hardness = 0.6,
})

minetest.register_abm{
	label = "df_primordial_items:dirt_with_mycelium_spread",
	nodenames = {df_dependencies.node_name_dirt},
	neighbors = {"df_primordial_items:dirt_with_mycelium"},
	interval = 60,
	chance = 50,
	catch_up = true,
	action = function(pos)
		minetest.swap_node(pos, {name="df_primordial_items:dirt_with_mycelium"})
	end,
}

if minetest.get_modpath("footprints") then
	local HARDPACK_PROBABILITY = minetest.settings:get("footprints_hardpack_probability") or 0.9 -- Chance walked dirt/grass is worn and compacted to footprints:trail.
	local HARDPACK_COUNT = minetest.settings:get("footprints_hardpack_count") or 10 -- Number of times the above chance needs to be passed for soil to compact.

	footprints.register_trample_node("df_primordial_items:dirt_with_mycelium", {
		trampled_node_def_override = {description = S("Dirt with Primordial Mycelium and Footprint"),},
		footprint_opacity = 196,
		hard_pack_node_name = "footprints:trail",
		hard_pack_probability = HARDPACK_PROBABILITY,
		hard_pack_count = HARDPACK_COUNT,
	})
end


code:
local S = minetest.get_translator(minetest.get_current_modname())

------------------------------------------------------------------------------------
-- Nodes

minetest.register_node("df_primordial_items:giant_fern_tree", {
	description = S("Giant Fern Stem"),
	_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
	_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
	tiles = {"dfcaverns_jungle_fern_stem.png","dfcaverns_jungle_fern_stem.png","dfcaverns_jungle_fern_bark.png",},
	groups = {tree=1, choppy=2, oddly_breakable_by_hand=1, flammable= 2, fern_stem = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	is_ground_content = false,
	paramtype = "light",
	paramtype2 = "facedir",
	sounds = df_dependencies.sound_wood(),
	sunlight_propagates = true,
	on_place = minetest.rotate_node,
	_mcl_blast_resistance = 2,
	_mcl_hardness = 1,
})

minetest.register_node("df_primordial_items:giant_fern_tree_slant_bottom", {
	description = S("Giant Fern Stem"),
	_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
	_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
	tiles = {
		"dfcaverns_jungle_fern_stem.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_stem.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_bark.png",
	},
	paramtype2 = "facedir",
	drawtype = "mesh",
	mesh = "dfcaverns_fern_slant.obj",
	paramtype = "light",
	drop = "df_primordial_items:giant_fern_tree",
	groups = {choppy = 2, tree = 1, oddly_breakable_by_hand=1, flammable = 2, fern_stem = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	sounds = df_dependencies.sound_wood(),
	is_ground_content = false,
	on_place = minetest.rotate_node,
	selection_box = {
		type = "fixed",
		fixed = {
			{-0.5, -0.5, -0.625, 0.5, 0.0, 0.375},
			{-0.5, 0.0, -0.875, 0.5, 0.5, 0.125},
		},
	},
	collision_box = {
		type = "fixed",
		fixed = {
			{-0.5, -0.5, -0.625, 0.5, 0.0, 0.375},
			{-0.5, 0.0, -0.875, 0.5, 0.5, 0.125},
		},
	},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 1,
})

minetest.register_node("df_primordial_items:giant_fern_tree_slant_top", {
	description = S("Giant Fern Stem"),
	_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
	_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
	tiles = {
		"dfcaverns_jungle_fern_stem.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_stem.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_bark.png",
	},
	paramtype2 = "facedir",
	drawtype = "mesh",
	mesh = "dfcaverns_fern_slant_2.obj",
	paramtype = "light",
	drop = "df_primordial_items:giant_fern_tree",
	groups = {choppy = 2, tree = 1, oddly_breakable_by_hand=1, flammable = 2, fern_stem = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	sounds = df_dependencies.sound_wood(),
	is_ground_content = false,
	on_place = minetest.rotate_node,
	selection_box = {
		type = "fixed",
		fixed = {
			{-0.5, -0.5, -0.125, 0.5, 0.0, 0.875},
			{-0.5, 0.0, -0.375, 0.5, 0.5, 0.625},
		},
	},
	collision_box = {
		type = "fixed",
		fixed = {
			{-0.5, -0.5, -0.125, 0.5, 0.0, 0.875},
			{-0.5, 0.0, -0.375, 0.5, 0.5, 0.625},
		},
	},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 1,
})

minetest.register_node("df_primordial_items:giant_fern_tree_slant_full", {
	description = S("Giant Fern Stem"),
	_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
	_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
	tiles = {
		"dfcaverns_jungle_fern_stem.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_bark.png",
		"dfcaverns_jungle_fern_bark.png",
	},
	paramtype2 = "facedir",
	drawtype = "mesh",
	mesh = "dfcaverns_fern_slant_full.obj",
	paramtype = "light",
	drop = "df_primordial_items:giant_fern_tree",
	groups = {choppy = 2, tree = 1, oddly_breakable_by_hand=1, flammable = 2, fern_stem = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	sounds = df_dependencies.sound_wood(),
	is_ground_content = false,
	on_place = minetest.rotate_node,
	selection_box = {
		type = "fixed",
		fixed = {
			{-0.5, -0.5, -0.75, 0.5, 0, 0.25},
			{-0.5, 0, -1.25, 0.5, 0.5, -0.25},
		},
	},
	collision_box = {
		type = "fixed",
		fixed = {
			{-0.5, -0.5, -0.75, 0.5, 0, 0.25},
			{-0.5, 0, -1.25, 0.5, 0.5, -0.25},
		},
	},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 1,
})

minetest.register_node("df_primordial_items:fern_wood", {
	description = S("Fern Wood"),
	_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
	_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
	paramtype2 = "facedir",
	tiles = {df_dependencies.texture_wood .. "^[multiply:#10FF10"},
	is_ground_content = false,
	groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=10},
	sounds = df_dependencies.sound_wood(),
	_mcl_blast_resistance = 3,
	_mcl_hardness = 1,
})

minetest.register_craft({
	output = "df_primordial_items:fern_wood 4",
	recipe = {
		{"group:fern_stem"},
	}
})

df_dependencies.register_all_stairs_and_fences("fern_wood", {burntime=7})

minetest.register_node("df_primordial_items:giant_fern_leaves", {
	description = S("Giant Fern Leaves"),
	_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
	_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
	tiles = {"dfcaverns_jungle_fern_leaves_01.png"},
	visual_scale = 1.41,
	inventory_image = "dfcaverns_jungle_fern_leaves_01.png",
	wield_image = "dfcaverns_jungle_fern_leaves_01.png",
	groups = {snappy = 3, leafdecay = 2, flammable = 2, leaves = 1, handy=1, hoey=1, shearsy=1, swordy=1, deco_block=1, dig_by_piston=1, fire_encouragement=15, fire_flammability=30, compostability=30},
	is_ground_content = false,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	walkable = false,
	waving = 2,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	after_place_node = df_dependencies.after_place_leaves,
	place_param2 = 1, -- Prevent leafdecay for placed nodes
	drop = {
		max_items = 1,
		items = {
			{
				-- player will get sapling with 1/10 chance
				items = {"df_primordial_items:fern_sapling"},
				rarity = 10,
			},
			{
				items = {"df_primordial_items:giant_fern_leaves"},
			}
		}
	},
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

df_dependencies.register_leafdecay({
	trunks = {"df_primordial_items:giant_fern_tree_slant_full", "df_primordial_items:giant_fern_tree_slant_top", "df_primordial_items:giant_fern_tree_slant_bottom", "df_primordial_items:giant_fern_tree"},
	leaves = {"df_primordial_items:giant_fern_leaves"},
	radius = 2,
})

minetest.register_craft({
	type = "fuel",
	recipe = "df_primordial_items:fern_wood",
	burntime = 7,
})
minetest.register_craft({
	type = "fuel",
	recipe = "group:fern_stem",
	burntime = 28,
})
minetest.register_craft({
	type = "fuel",
	recipe = "df_primordial_items:giant_fern_leaves",
	burntime = 2,
})
minetest.register_craft({
	type = "fuel",
	recipe = "df_primordial_items:fern_sapling",
	burntime = 2,
})
------------------------------------------------------------------------------------
-- Schematics

local n1 = { name = "air", prob = 0 }
local n2 = { name = "df_primordial_items:giant_fern_leaves" }
local n3 = { name = "df_primordial_items:giant_fern_tree_slant_top" }
local n4 = { name = "df_primordial_items:giant_fern_tree_slant_full" }
local n5 = { name = "df_primordial_items:giant_fern_tree" }
local n6 = { name = "df_primordial_items:giant_fern_tree_slant_bottom" }

local fern_4_nodes_tall = {
	size = {y = 4, x = 3, z = 4},
	center_pos = {y = 0, x = 1, z = 3},
	data = {
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1,
		n1, n2, n1, n2, n1, n1, n1, n1, n1, n1, n2, n3, n2, n1, n4, n1, n1,
		n1, n1, n1, n6, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
	}
}

local fern_5_nodes_tall = {
	size = {y = 5, x = 3, z = 4},
	center_pos = {y = 0, x = 1, z = 3},
	data = {
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n2, n1, n2, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n2, n3, n2, n1, n4, n1, n1, n1, n1, n1, n5, n1, n2, n6, n2,
		n1, n1, n1, n1, n1, n1, n1, n1, n1,
	}
}

local fern_6_nodes_tall = {
	size = {y = 6, x = 5, z = 4},
	center_pos = {y = 0, x = 2, z = 3},
	data = {
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n2, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n2, n2, n3, n2, n2, n1, n1, n4, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n2, n5, n2, n1, n2, n2,
		n6, n2, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1,
	}
}

local fern_9_nodes_tall = {
	size = {y = 9, x = 5, z = 5},
	center_pos = {y = 0, x = 2, z = 4},
	data = {
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n2, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n2, n2, n3, n2, n2, n1, n1, n4, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n2, n2, n3, n2, n2, n2, n2, n6, n2, n2, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1,
		n5, n1, n1, n1, n2, n5, n2, n1, n1, n2, n6, n2, n1, n1, n1, n1, n1,
		n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
		n1, n1, n1, n1,
	}
}

local ferns = {fern_4_nodes_tall, fern_5_nodes_tall, fern_6_nodes_tall, fern_9_nodes_tall}
local rotations = {0, 90, 180, 270}

df_primordial_items.get_fern_schematic = function()
	return ferns[math.random(1,4)]
end

minetest.register_node("df_primordial_items:fern_sapling", {
	description = S("Giant Fern Sapling"),
	_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
	_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
	tiles = {"dfcaverns_jungle_fern_03.png"},
	inventory_image = "dfcaverns_jungle_fern_03.png",
	wield_image = "dfcaverns_jungle_fern_03.png",
	groups = {snappy = 3, attached_node = 1, flammable = 1, sapling = 1, light_sensitive_fungus = 13, attached_node=1,dig_by_piston=1,destroy_by_lava_flow=1,deco_block=1, compostability=30,dig_immediate=3},
	_dfcaverns_dead_node = df_dependencies.node_name_dry_shrub,
	selection_box = {
		type = "fixed",
		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
	},
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
	on_construct = function(pos)
		if df_primordial_items.giant_fern_growth_permitted(pos) then
			minetest.get_node_timer(pos):start(math.random(
				df_trees.config.tree_min_growth_delay,
				df_trees.config.tree_max_growth_delay))
		end
	end,
	on_destruct = function(pos)
		minetest.get_node_timer(pos):stop()
	end,
	on_timer = function(pos, elapsed)
		if df_farming and df_farming.kill_if_sunlit(pos) then
			return
		end

		if minetest.get_node_light(pos) > 6 then
			df_primordial_items.spawn_giant_fern(pos)
		else
			minetest.get_node_timer(pos):start(df_trees.config.tree_min_growth_delay)
		end
	end,
})

df_primordial_items.spawn_giant_fern = function(pos)
	local fern = df_primordial_items.get_fern_schematic()
	local rotation = rotations[math.random(1,#rotations)]
	minetest.set_node(pos, {name="air"}) -- clear sapling so fern can replace it
	mapgen_helper.place_schematic(pos, fern, rotation)
end