   other_water_height = other_sample.r;
   other_ground_height = other_sample.g;
   velocity_into_this_pixel_from_other = velocity.a;
-  vec4 up = calc_contribution2(ground_height,water_height,other_ground_height,other_water_height,velocity_into_this_pixel_from_other);
+  vec4 up = calc_contribution2(heightmap,other_sample,velocity_into_this_pixel_from_other);
+
+    other_biome = other_sample.b;
+  other_grass_heavy = in_range(other_biome,2.3f,3.f);
+  other_fire_heavy = in_range(other_biome,4.25f,5.f);
+  grass_seed_spread = 0.01f*is_very_wet_soil * other_grass_heavy;//adder
+
+  biome = biome + grass_seed_spread;
+    
+  //fire propagation:
+  fire_want_spread =  low_chance_true * other_fire_heavy * is_heavy_grass;
+  delta_to_fire_range = 4.f - biome;
+  fire_spread = fire_want_spread * delta_to_fire_range;//adder
+  
+  biome = biome + fire_spread;
+
+  is_grass = in_range(biome,2.f,3.f);
+  is_heavy_grass = in_range(biome,2.25f,3.f);
+  on_fire = in_range(biome,4.f,5.f);
+
+
+      //static iterations:
+
+    float fade_char_to_dirt = 0.01f*is_char_to_dirt;//adder
+    float fade_to_dry_soil = -0.01f*is_soil;//adder
+    float my_grass_grow = 0.01f*is_grass + 0.001f*is_very_wet_soil;//adder
+    float fire_intensify = 0.01f*on_fire;//adder
+    float fire_fade = 0.01f*fire_is_fading;//adder
+
+  
+    //if the fire has faded, reset to 0 char
+    float want_reset_to_char = float(biome>6.f);
+    float delta_to_char = biome;
+    float char_reset = want_reset_to_char*delta_to_char;//adder
+
+
+
+      //water over ground:
+
+    float is_underwater = float(water_height > ground_height);
+    float velocity_sum = velocity.r+velocity.g+velocity.b+velocity.a;
+    
+    //
+    float delta_to_wet_soil = 2.f-biome;
+    float reset_max_wet_soil = is_underwater*is_soil*delta_to_wet_soil;//adder
+
+    //
+    float delta_to_min_grass = 2.f-biome;
+    float erode_grass = is_underwater * is_grass * abs(velocity_sum) * delta_to_min_grass * -0.01f;//adder
+
+    //
+    float delta_to_dirt = 1.f-biome;    
+    float erode_char_to_dirt = is_underwater * is_char_to_dirt * abs(velocity_sum) * delta_to_dirt * 0.01f;//adder
+
+    //
+    float current_fire_intensity = clamp(biome-4.f,0.f,1.f);
+    float delta_to_extinguished_destination = delta_to_char + (0.25f*(1.f-current_fire_intensity));
+    float extinguish_flames = is_underwater* on_fire * delta_to_extinguished_destination;//adder
+
+    float extinguish_fading_flames = is_underwater*fire_is_fading*(-biome);//adder
+
+
+
+
+
+    float biome_result = biome + fade_char_to_dirt + fade_to_dry_soil + my_grass_grow + fire_intensify + fire_fade + 
+                          char_reset + reset_max_wet_soil + erode_grass + erode_char_to_dirt + extinguish_flames + 
+                          extinguish_fading_flames;
+
+
+
+
+
+
+
 
 
 

    return step(x,min_edge)*step(0,-(max_edge-x));
}

vec4 calc_contribution2(vec4 this_pixel,vec4 other_pixel, float velocity_into_this_pixel)
{
    float water_height = this_pixel.r;

  float other_water_height = other_sample.r;
  float other_ground_height = other_sample.g;
  float velocity_into_this_pixel_from_other = velocity.r;
  vec4 left = calc_contribution2(heightmap,other_sample,velocity_into_this_pixel_from_other);
  
  
  float other_biome = other_sample.b;
  float other_grass_heavy = in_range(other_biome,2.3f,3.f);
  float other_fire_heavy = in_range(other_biome,4.25f,5.f);
  float grass_seed_spread = 0.01f*is_very_wet_soil * other_grass_heavy;//adder

  biome = biome + grass_seed_spread;
    
  //fire propagation:
  float fire_want_spread =  low_chance_true * other_fire_heavy * is_heavy_grass;
  float delta_to_fire_range = 4.f - biome;
  float fire_spread = fire_want_spread * delta_to_fire_range;//adder
  
  biome = biome + fire_spread;

  is_grass = in_range(biome,2.f,3.f);
  is_heavy_grass = in_range(biome,2.25f,3.f);
  on_fire = in_range(biome,4.f,5.f);






  //right
