Ursprünglich hatte ich die Dörfer welche im Bild 1 zu sehen sind direkt über die Noise-Map generiert – die Noise-Map gibt eine Fläche, in welcher jede Position einen Wert von 0-1 hat-
Was zu Folge hatte, das die Dörfer nur am Rand der jeweiligen Region generiert wurden, und teilweise mehrere Dörfer nebeneinander erstellt wurden.
mit der Einbindung von Ruinen auf der Karte, hatte ich aber eine andere Art der Generierung erstellt.
Ich durchsuche das gesamte Map-Array, welches beim ersten generierungsdurchlauf erstellt wird nach der Jeweiligen Region (Bsp. LAND)
und ersetze zufällig einzelne Tiles mit den Dörfern.
Die Code-Zeile welches die Dörfer ersetzt wird vorher erstellt und mit einer Funktion hinterlegt, in meinem Fall direkt im Skript des Tile-Sets selbst.
Hier wird direkt auch noch das Map-Array Ge-Updated, damit an der Stelle auch ein Dorf definiert ist.
Der StadtGenerator() läuft die vorhin erwähnt durch das Array und sucht nach jeder Stelle in welcher „LAND“ steht
und führt die Funktion aus, welche das Tile und die Position im Array zu einem Dorf macht.
Es würfelt -in diesem Beispiel- für jede Position einen Hundertseitigen Würfel, und jedes mal wenn er auf der 1 landet, generiert er ein Dorf.
Als Fail-Save habe ich am ende noch diese Zeile geschrieben, welche sicher stellt, das jedes Dorf mindestens einmal auf der Karte ist, sonst geht er noch einmal drüber und macht neue Dörfer.
hier eine Rudimentäre Form des StadtGenerator()
falls du Fragen oder Ideen hast, oder generell über Fantasy oder Game- Development Themen reden möchtest,
tritt gerne unserem Discord bei:
func StadtGenerator():
for ReihenIndex in State.Map_Array.size():
for ZeilenIndex in State.Map_Array[ReihenIndex].size():
if State.Map_Array[ReihenIndex][ZeilenIndex] == "LAND":
var LanddorfRNG = randi_range(0, 100)
if LanddorfRNG == 1:
$"..".addDorfGrass(Vector2(ReihenIndex,ZeilenIndex))
DorfGrass = DorfGrass + 1
DorfCounter = DorfCounter + 1
else: pass
if DorfGrass == 0 or DorfWald == 0 or DorfMeer == 0 or DorfTiefSee == 0:
StadtGenerator()