diff --git a/world/src/block/mod.rs b/world/src/block/mod.rs index 3105554052..9484dbcfb5 100644 --- a/world/src/block/mod.rs +++ b/world/src/block/mod.rs @@ -294,8 +294,8 @@ impl<'a> BlockGen<'a> { StructureBlock::PalmLeaves => Block::new( 1, Lerp::lerp( - Rgb::new(30.0, 100.0, 30.0), - Rgb::new(120.0, 255.0, 0.0), + Rgb::new(25.0, 100.0, 30.0), + Rgb::new(75.0, 255.0, 0.0), lerp, ) .map(|e| e as u8), diff --git a/world/src/column/mod.rs b/world/src/column/mod.rs index 44836c72cb..3e2c818d5c 100644 --- a/world/src/column/mod.rs +++ b/world/src/column/mod.rs @@ -106,24 +106,28 @@ impl<'a> Sampler for ColumnGen<'a> { let desert_sand = Rgb::new(0.98, 0.8, 0.15); let snow = Rgb::broadcast(1.0); - let grass = Rgb::lerp(cold_grass, warm_grass, marble); - let sand = Rgb::lerp(beach_sand, desert_sand, marble); + let dirt = Lerp::lerp(Rgb::new(0.2, 0.1, 0.05), Rgb::new(0.4, 0.25, 0.0), marble); let cliff = Rgb::lerp(cold_stone, warm_stone, marble); - let dirt = Lerp::lerp(Rgb::new(0.2, 0.1, 0.05), Rgb::new(0.4, 0.25, 0.0), marble); + let grass = Rgb::lerp(cold_grass, warm_grass, marble); + let sand = Rgb::lerp(beach_sand, desert_sand, marble); - let turf = grass; + let tropical = Rgb::lerp( + grass, + Rgb::new(0.95, 0.85, 0.1), + marble_small.sub(0.5).mul(0.05).add(0.3), + ); let ground = Rgb::lerp( Rgb::lerp( snow, - turf, + grass, temp.sub(CONFIG.snow_temp) .sub((marble - 0.5) * 0.05) .mul(256.0), ), - sand, - temp.sub(CONFIG.desert_temp).mul(32.0), + Rgb::lerp(tropical, sand, temp.sub(CONFIG.desert_temp).mul(32.0)), + temp.sub(CONFIG.tropical_temp).mul(128.0), ); // Work out if we're on a path or near a town diff --git a/world/src/config.rs b/world/src/config.rs index 035b4c60d4..62d5db8837 100644 --- a/world/src/config.rs +++ b/world/src/config.rs @@ -2,6 +2,7 @@ pub struct Config { pub sea_level: f32, pub mountain_scale: f32, pub snow_temp: f32, + pub tropical_temp: f32, pub desert_temp: f32, } @@ -9,5 +10,6 @@ pub const CONFIG: Config = Config { sea_level: 140.0, mountain_scale: 1200.0, snow_temp: -0.4, - desert_temp: 0.4, + tropical_temp: 0.25, + desert_temp: 0.45, }; diff --git a/world/src/sim/mod.rs b/world/src/sim/mod.rs index 6014db6726..61413d1fe5 100644 --- a/world/src/sim/mod.rs +++ b/world/src/sim/mod.rs @@ -16,7 +16,7 @@ use common::{ }; use noise::{BasicMulti, HybridMulti, MultiFractal, NoiseFn, RidgedMulti, Seedable, SuperSimplex}; use rand::{prng::XorShiftRng, Rng, SeedableRng}; -use std::ops::{Add, Div, Mul, Sub}; +use std::ops::{Add, Div, Mul, Neg, Sub}; use vek::*; pub const WORLD_SIZE: Vec2 = Vec2 { x: 1024, y: 1024 }; @@ -353,6 +353,8 @@ impl SimChunk { .add(0.3) .max(0.0); + let temp = gen_ctx.temp_nz.get((wposf.div(15000.0)).into_array()) as f32; + let dryness = gen_ctx.dry_nz.get( (wposf .add(Vec2::new( @@ -375,6 +377,7 @@ impl SimChunk { .add(0.5) .min(1.0), ) + .mul(temp.mul(4.0).sub(1.0).neg().add(0.25).max(0.05).min(1.0)) .powf(1.5) .add(0.1 * hill); @@ -403,8 +406,6 @@ impl SimChunk { .mul(chaos) .mul(CONFIG.mountain_scale); - let temp = gen_ctx.temp_nz.get((wposf.div(8192.0)).into_array()) as f32; - let cliff = gen_ctx.cliff_nz.get((wposf.div(2048.0)).into_array()) as f32 + chaos * 0.2; Self {