Realistic Terrain Generation

Realistic Terrain Generation

3M Downloads

[suggest] Procedurally generated paths

leagris opened this issue · 1 comments

commented
Issue Description:

Add natural paths generation by RTG

Steps to produce paths
  1. Use Perlin Noise Terrain Elevation and, or, Biome Distribution data for path frequency and width to determine if x,z has a path run at y=surface
  2. Perform path rendering from blocks substitution rules.
Path blocks substitution Rules
Condition Surface Replacement Rule
block(y+1)=="air" && (
  block(y)=="grass" ||
  block(y)=="potzol" ||
  block(y)=="mycellium" )
block(y)="grass path";
block(y+1)="air";
block(y+1)=="air" &&
block(y-2)!="water" &&
block(y-2)!="flowing water" && (
  block(y)=="water" || block(y)=="flowing water" )
Draw a ford across shallow water
for( px=x-1; px==x+1; px+=1 ) {
  for( pz=z-1; pz==z+1; pz+=1 ) {
    if( block(px,y,pz)=="water") {
      block(px,y,pz)="flowing water";
    }
  }
}
block(y-1)="cobblestone";
if( Random.nextFloat()<.25f ) {
  block(y)="mossy cobblestone";
  block(y+1)="air";
}
( block(y+1)=="air" || block(y+1)=="snow" ) && (
  block(y)=="stone" )
block(y)="cobblestone";
      block(y+1)="air";
( block(y+1)=="air" || block(y+1)=="snow" ) && (
  block(y)=="cobblestone" )
block(y)="gravel";
      block(y+1)="air";
( block(y+1)=="air" || block(y+1)=="snow" ) && (
  block(y)=="gravel" )
block(y)="dirt";
      block(y+1)="air";
( block(y+1)=="air" || block(y+1)=="snow" ) && (
  block(y)=="dirt" )
block(y)="dry dirt";
      block(y+1)="air";
( block(y+1)=="air" || block(y+1)=="snow" ) && (
  block(y)=="sand" )
block(y)="sandstone";
      block(y+1)="air";
( block(y+1)=="air" || block(y+1)=="snow" ) && (
  block(y)=="sandstone" )
block(y)="hardened clay";
      block(y+1)="air";
( block(y+1)=="air" || block(y+1)=="snow" ) && (
  block(y)=="snow block" )
block(y)="ice";
      block(y+1)="air";
( block(y+1)=="air" || block(y+1)=="snow" ) && (
  block(y)=="snow block" )
block(y)="ice";
      block(y+1)="air";
commented

I think this is probably a little outside RTG's scope.