Expand generated terrain with biome-driven props

This commit is contained in:
Alexander Sellite 2026-08-20 00:28:55 -04:00
parent e8888ed05a
commit 1e24fb0bfc
103 changed files with 5427 additions and 351 deletions

View file

@ -0,0 +1,20 @@
[gd_resource type="Resource" script_class="TerrainBiomeDefinition" load_steps=4 format=3]
[ext_resource type="Script" path="res://world/generation/terrain_biome_definition.gd" id="1_definition"]
[ext_resource type="Script" path="res://world/generation/terrain_biome_prop_rule.gd" id="2_rule"]
[sub_resource type="Resource" id="Rule_sand_tree"]
script = ExtResource("2_rule")
procedural_group = &"sand_tree"
placement_chance = 4200
adjacency_bonus = 1200
maximum_density = 5000
minimum_placements = 1
allowed_prop_ids = PackedStringArray("prop_palm")
[resource]
script = ExtResource("1_definition")
stable_id = &"biome_coast"
label = "coast"
required_chunk_tags = PackedStringArray("sand")
prop_rules = Array[ExtResource("2_rule")]([SubResource("Rule_sand_tree")])

View file

@ -0,0 +1,31 @@
[gd_resource type="Resource" script_class="TerrainBiomeDefinition" load_steps=5 format=3]
[ext_resource type="Script" path="res://world/generation/terrain_biome_definition.gd" id="1_definition"]
[ext_resource type="Script" path="res://world/generation/terrain_biome_prop_rule.gd" id="2_rule"]
[sub_resource type="Resource" id="Rule_grass_tree"]
script = ExtResource("2_rule")
procedural_group = &"grass_tree"
placement_chance = 9000
adjacency_bonus = 1000
maximum_density = 10000
minimum_placements = 2
allowed_prop_ids = PackedStringArray("prop_tree_1", "prop_tree_2", "prop_tree_3")
[sub_resource type="Resource" id="Rule_grass_detail"]
script = ExtResource("2_rule")
procedural_group = &"grass_detail"
placement_chance = 3500
adjacency_bonus = 1200
maximum_density = 5000
minimum_placements = 1
allowed_prop_ids = PackedStringArray("prop_log", "prop_mushroom")
[resource]
script = ExtResource("1_definition")
stable_id = &"biome_forest"
label = "forest"
required_chunk_tags = PackedStringArray("grass")
forbidden_chunk_tags = PackedStringArray("spawn")
region_weight = 1.4
prop_rules = Array[ExtResource("2_rule")]([SubResource("Rule_grass_tree"), SubResource("Rule_grass_detail")])

View file

@ -0,0 +1,31 @@
[gd_resource type="Resource" script_class="TerrainBiomeDefinition" load_steps=5 format=3]
[ext_resource type="Script" path="res://world/generation/terrain_biome_definition.gd" id="1_definition"]
[ext_resource type="Script" path="res://world/generation/terrain_biome_prop_rule.gd" id="2_rule"]
[sub_resource type="Resource" id="Rule_grass_tree"]
script = ExtResource("2_rule")
procedural_group = &"grass_tree"
placement_chance = 9000
adjacency_bonus = 1000
maximum_density = 10000
minimum_placements = 2
allowed_prop_ids = PackedStringArray("prop_pine")
[sub_resource type="Resource" id="Rule_grass_detail"]
script = ExtResource("2_rule")
procedural_group = &"grass_detail"
placement_chance = 2500
adjacency_bonus = 1000
maximum_density = 4000
minimum_placements = 1
allowed_prop_ids = PackedStringArray("prop_log", "prop_mushroom")
[resource]
script = ExtResource("1_definition")
stable_id = &"biome_pine_forest"
label = "pine forest"
required_chunk_tags = PackedStringArray("grass")
forbidden_chunk_tags = PackedStringArray("spawn")
region_weight = 1.2
prop_rules = Array[ExtResource("2_rule")]([SubResource("Rule_grass_tree"), SubResource("Rule_grass_detail")])

View file

@ -0,0 +1,28 @@
[gd_resource type="Resource" script_class="TerrainBiomeDefinition" load_steps=5 format=3]
[ext_resource type="Script" path="res://world/generation/terrain_biome_definition.gd" id="1_definition"]
[ext_resource type="Script" path="res://world/generation/terrain_biome_prop_rule.gd" id="2_rule"]
[sub_resource type="Resource" id="Rule_grass_tree"]
script = ExtResource("2_rule")
procedural_group = &"grass_tree"
placement_chance = 1600
adjacency_bonus = 900
maximum_density = 2200
allowed_prop_ids = PackedStringArray("prop_tree_1", "prop_tree_2", "prop_tree_3")
[sub_resource type="Resource" id="Rule_grass_detail"]
script = ExtResource("2_rule")
procedural_group = &"grass_detail"
placement_chance = 700
adjacency_bonus = 400
maximum_density = 1200
allowed_prop_ids = PackedStringArray("prop_log", "prop_mushroom")
[resource]
script = ExtResource("1_definition")
stable_id = &"biome_plains"
label = "plains"
required_chunk_tags = PackedStringArray("grass")
region_weight = 1.0
prop_rules = Array[ExtResource("2_rule")]([SubResource("Rule_grass_tree"), SubResource("Rule_grass_detail")])

View file

@ -0,0 +1,12 @@
[gd_resource type="Resource" script_class="TerrainBiomeCatalog" load_steps=7 format=3]
[ext_resource type="Script" path="res://world/generation/terrain_biome_catalog.gd" id="1_catalog"]
[ext_resource type="Resource" path="res://world/generation/biomes/definitions/biome_plains.tres" id="2_plains"]
[ext_resource type="Resource" path="res://world/generation/biomes/definitions/biome_forest.tres" id="3_forest"]
[ext_resource type="Resource" path="res://world/generation/biomes/definitions/biome_pine_forest.tres" id="4_pine"]
[ext_resource type="Resource" path="res://world/generation/biomes/definitions/biome_coast.tres" id="5_coast"]
[ext_resource type="Script" path="res://world/generation/terrain_biome_definition.gd" id="6_definition_script"]
[resource]
script = ExtResource("1_catalog")
definitions = Array[ExtResource("6_definition_script")]([ExtResource("2_plains"), ExtResource("3_forest"), ExtResource("4_pine"), ExtResource("5_coast")])