List of Schematic Brushes

2. We need to be able to define a distance spread for the blocks we are replacing with the schems. I can't for the life of me figure out how #surfacespread works, but I'm sure that would do the trick.
I ended up finding a solution to this issue using the WorldEdit //generate command with the following invocation:

Code:
//generate -o stone round(x%(VAR+random()))+round(z%(VAR+random()))==0
The '-o' flag uses the map's coordinate system as a reference (instead of the selection specific coordinate system from -1 .. 1 //generate would use without it).
If a modulo ('%') b = 0 then that a is divisible by b without rest, this helps me define a regular grid with an even distance between points, VAR = b is therefore the variable that determines the density of points along a grid in our selection.
Now, we jitter the points a little by allowing VAR to fluctuate randomly on the x- and z-Axis by the number between 0 and 1 returned by 'random()'

So this gives us the following output for VAR= [2,3,4,5,10,1.2] from left to right!
1841

This, frankly, is good enough for me now, since I wanted to only do this for a monoculture forest. Of course, this could be improved upon! As evident from the left-most panel, there are some nasty artifacts resulting from choosing a rigid grid before jittering. With several trees and thus differing minimal distances, another method would have to be found, one that takes a buffer parameter for each type of tree.

I gotta say, Iwan's solution up top using Perlin noise looks super convincing too (I have no idea how to get there though. nudge nudge wink wink @Iwan )

EDIT: Trying out a bunch of commands today I found that
Code:
//generate stone sin(random()*6*pi*x)+sin(random()*6*pi*z)>0.95
gave some mad patterns too! I can recommend playing around with these commands and the parameters if you want to expand your WE horizon!
Here's the expression syntax conserved for posterity: https://archive.is/JWqhP
 
Last edited:

Iwan

Lean forward and grab!
Admin
nudge nudge wink wink @Iwan )
  • 1) Generate a density/probability mask
    //generate 35:5 perlin(11111111, sin(random() * x), y, sin(random() * z), .35, 2, .0001)<.5
  • 2) Scatter single blocks, the mask defines where those blocks are more likely or less likely to occur.
    //gmask >35:5
    //generate 35:13 perlin(randint(10000), sin(random() * x), y, sin(random() * z), 50, 12, .1)<.15
perlin(seed, x, y, z, frequency, octaves, persistence)
 
Last edited:
Thanks for the guide @SerLoras !! That should be pinned imo its super important!

I've created the sets WillowSFreshPoll, WillowSOnePoll, and WillowSTwoPoll. First is freshly pollarded willows, second and third are one and two years after pollarding respectively. Added pics to the wikia! https://westeroscraft.fandom.com/wiki/SchemSets
Changed the willow leaves to palm leaves since their shape fits the shape of Salix Viminalis better, which is a tree that is frequently pollarded. I also added a coppiced variant WillowSCopp.
 
Here's the completed prototype of a specific single species forest at a low density. In this case the forest type is a cultivated, middle-european wetland forest, typically found around old meanders. It's called Driesch where I'm from and used as pasture for cattle and a source of decent timber. In real life the planted poplars were owned by the peasants from the surrounding villages and marked with paint accordingly:

Code:
//setbiome forest
$${WAIT(1)}$$|
//expand 5 u|
$${WAIT(1)}$$|
//replace $$[PlaceholderLand] wool:white
$${WAIT(2)}$$|
//gmask >[wool:white]
//generate -o [95:13] round(abs(x)%(4+random()))+round(abs(z)%(4+random()))==0
$${WAIT(5)}$$|
//gmask
//replace [95:13]&~[95:13][1][8] air
$${WAIT(1)}$$|
//replace <[95:13] wool:brown
$${WAIT(1)}$$|
//expand 15 n|
//expand 15 w|
$${WAIT(2)}$$|
//replace #offset[7][0][7][95:13] 41
$${WAIT(2)}$$|
//replace 41 20%[#fullcopy[PoplarM1][false][false]],20%[#fullcopy[PoplarM2][false][false]],20%[#fullcopy[PoplarM3][false][false]],10%[#fullcopy[PoplarM4][false][false]],10%[#fullcopy[PoplarM5][false][false]]
$${WAIT(4)}$$|
//replace 41 air
$${WAIT(2)}$$|
//replace [wool:white]&~[wool:brown][1][8] wool:red|
$${WAIT(1)}$$|
//replace [wool:white]&~[wool:red][1][8] wool:red,wool:white|
$${WAIT(1)}$$|
//replace [wool:white]&~[wool:red][1][8] wool:red,wool:white|
$${WAIT(1)}$$|
//rep wool:white #simplex[15][75%wool:white,35%wool:7]|
$${WAIT(1)}$$|
//rep wool:white 95%wool:white,5%wool:yellow|
$${WAIT(1)}$$|
//replace >[[wool:white]&![95]&~[95][1][8]] #simplex[4][50%95:0,35%95:1,15%95:2]|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:0][1][8] 95:0|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:0][1][8] 95:0|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:0][1][8] 95:0|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:1][1][8] 95:1|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:1][1][8] 95:1|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:1][1][8] 95:1|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:1][1][8] 95:1|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:2][1][8] 95:2|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:2][1][8] 95:2|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:1][1][8] 95:2,air|
$${WAIT(1)}$$|
//replace >[wool:white]&![95]&~[95:2][1][8] 95:2,air|
$${WAIT(1)}$$|
//replace >[95:0] #simplex[3][45%95:0,55%air]|
$${WAIT(1)}$$|
//replace >[95:1] #simplex[3][56%95:1,44%air]|
$${WAIT(1)}$$|
//replace >[95:2] #simplex[3][25%95:2,75%air]|
$${WAIT(1)}$$|
//replace >[wool:white]&[air] #simplex[23][25%95:6,75%95:4]|
$${WAIT(1)}$$|
//replace >[wool:4]&[air] [25%95:5,75%air]|
$${WAIT(1)}$$|
//replace wool:red 70%dirt,30%2033:3
$${WAIT(2)}$$|
//replace 35:7 2034:0
$${WAIT(1)}$$|
//replace wool:yellow gravel,dirt
$${WAIT(1)}$$|
//replace 95:6 80%2005:9,20%2059:15
$${WAIT(1)}$$|
//replace wool:white 85%grass,15%dirt
$${WAIT(1)}$$|
//replace 95:4 50%31:1,50%31:2,0.5%2006:5
$${WAIT(1)}$$|
//replace 95:0 18:3
$${WAIT(1)}$$|
//replace 95:1 2205:3
$${WAIT(1)}$$|
//replace 95:2 2205:1
$${WAIT(1)}$$|
//replace 95:5 2155:0
$${WAIT(1)}$$|
//replace wool:brown dirt
I'm planning to expand this script by adding a second type of tree: Salix viminalis, which naturally grows around the water but was planted there to provide kindling and material for making baskets.
 
Top