# MakeUp & E-LITE shaders - shader.properties

#Profiles
profile.no_effects=        !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=0 AO=0 AOSTEPS=2.0 AA_TYPE=0 REFRACTION=0 WAVING=0 CLOUD_STEPS_AVG=3 BLOOM_SAMPLES=2.0 !BLOOM VOL_LIGHT=0 !CLOUD_REFLECTION !COLORED_SHADOW MATERIAL_GLOSS=0 V_CLOUDS=-1 SUN_REFLECTION=0 !SHADOW_ENTITIES !EMISSIVE_ORE !EMISSIVE_MATERIAL !MOTION_BLUR ACERCADE=1 !CIRRUS !BIOME_SKY !BIOME_FOG !SANDSTORM STAR_SLIDER=1 MOTION_BLUR_SAMPLES=3.0 !FXAA
profile.very_low=          SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=0 AO=0 AOSTEPS=2.0 AA_TYPE=0 REFRACTION=0 WAVING=0 CLOUD_STEPS_AVG=3 BLOOM_SAMPLES=2.0 !BLOOM VOL_LIGHT=0 !CLOUD_REFLECTION !COLORED_SHADOW MATERIAL_GLOSS=0 V_CLOUDS=-1 SUN_REFLECTION=0 !SHADOW_ENTITIES !EMISSIVE_ORE !EMISSIVE_MATERIAL !MOTION_BLUR ACERCADE=2 !CIRRUS !BIOME_SKY !BIOME_FOG !SANDSTORM STAR_SLIDER=1 MOTION_BLUR_SAMPLES=3.0 !FXAA
profile.low=               SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=1 AO=0 AOSTEPS=2.0 AA_TYPE=3 REFRACTION=0 WAVING=1 CLOUD_STEPS_AVG=3 BLOOM_SAMPLES=2.0 !BLOOM VOL_LIGHT=0  !CLOUD_REFLECTION !COLORED_SHADOW MATERIAL_GLOSS=0 V_CLOUDS=1 SUN_REFLECTION=2 !SHADOW_ENTITIES !EMISSIVE_ORE !EMISSIVE_MATERIAL !MOTION_BLUR ACERCADE=3 !CIRRUS !BIOME_SKY !BIOME_FOG !SANDSTORM STAR_SLIDER=1 MOTION_BLUR_SAMPLES=3.0 !FXAA
profile.medium=            SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=3 REFLECTION_SLIDER=1 AO=0 AOSTEPS=4.0 AA_TYPE=3 REFRACTION=1 WAVING=1 CLOUD_STEPS_AVG=3 BLOOM_SAMPLES=2.0 !BLOOM VOL_LIGHT=0  !CLOUD_REFLECTION COLORED_SHADOW MATERIAL_GLOSS=1 V_CLOUDS=1 SUN_REFLECTION=2 SHADOW_ENTITIES EMISSIVE_ORE EMISSIVE_MATERIAL !MOTION_BLUR ACERCADE=4 !CIRRUS !BIOME_SKY BIOME_FOG SANDSTORM STAR_SLIDER=1 MOTION_BLUR_SAMPLES=3.0 FXAA
profile.high=              SHADOW_CASTING SHADOW_QTY_SLIDER=4 SHADOW_DISTANCE_SLIDER=5 REFLECTION_SLIDER=1 AO=1 AOSTEPS=4.0 AA_TYPE=3 REFRACTION=1 WAVING=1 CLOUD_STEPS_AVG=4 BLOOM_SAMPLES=2.0 BLOOM VOL_LIGHT=1 !CLOUD_REFLECTION COLORED_SHADOW MATERIAL_GLOSS=2 V_CLOUDS=2 SUN_REFLECTION=2 SHADOW_ENTITIES EMISSIVE_ORE EMISSIVE_MATERIAL !MOTION_BLUR ACERCADE=5 CIRRUS BIOME_SKY BIOME_FOG SANDSTORM STAR_SLIDER=2 MOTION_BLUR_SAMPLES=4.0 FXAA
profile.max=               SHADOW_CASTING SHADOW_QTY_SLIDER=6 SHADOW_DISTANCE_SLIDER=7 REFLECTION_SLIDER=2 AO=1 AOSTEPS=6.0 AA_TYPE=3 REFRACTION=1 WAVING=1 CLOUD_STEPS_AVG=5 BLOOM_SAMPLES=4.0 BLOOM VOL_LIGHT=1  CLOUD_REFLECTION COLORED_SHADOW MATERIAL_GLOSS=3 V_CLOUDS=2 SUN_REFLECTION=2 SHADOW_ENTITIES EMISSIVE_ORE EMISSIVE_MATERIAL MOTION_BLUR ACERCADE=6 CIRRUS BIOME_SKY BIOME_FOG SANDSTORM STAR_SLIDER=2 MOTION_BLUR_SAMPLES=8.0 FXAA

# Default forced options
vignette = false
separateAo = true
oldLighting = false
dynamicHandLight = true
oldHandLight = false
underwaterOverlay = false
frustum.culling = true
shadow.culling = true
particles.before.deferred = true
sky=true

#if ROUND_SUN == 1
    sun = false
#else
    sun = true
#endif

moon = true

#ifdef SHADOW_ENTITIES
    shadowEntities = true
#else
    shadowEntities = false
#endif

#if V_CLOUDS > 0
    clouds = off
#elif V_CLOUDS == 0
    clouds = fancy
#endif

program.world0/composite1.enabled=BLOOM || DOF
program.world-1/composite1.enabled=BLOOM || DOF
program.world1/composite1.enabled=BLOOM || DOF
program.composite1.enabled=BLOOM || DOF

texture.gbuffers.noisetex = textures/water_256_RG_8bit.png

#ifdef IS_IRIS
    #if USE_CLOUD_VOL_STYLE == 0
        texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png
        texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png
    #elif USE_CLOUD_VOL_STYLE == 1
        texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png
        texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png
    #elif USE_CLOUD_VOL_STYLE == -1
        #if STYLE == 1
            texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png
            texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png
        #else
            texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png
            texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png
        #endif
    #endif
#else
    texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png
    texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png

    texture.gbuffers.colortex2 = textures/clouds_blocky_512_R_8bit.png
    texture.deferred.colortex2 = textures/clouds_blocky_512_R_8bit.png
#endif

program.shadow.enabled=SHADOW_CASTING
program.world0/shadow.enabled=SHADOW_CASTING
program.world1/shadow.enabled=SHADOW_CASTING
program.world-1/shadow.enabled=false

# Config main screen
screen.columns=2
screen= ACERCADE <profile> COLOR_SCHEME STYLE <empty> <empty> [BASIC_SCREEN] [EFFECTS_SCREEN] [LIGHTING_SCREEN] [MISC_SCREEN] [LabPBR] [INFO_SCREEN]


# Sub-screens:
screen.BASIC_SCREEN.columns=2
screen.BASIC_SCREEN = [COMPATIBILITY_SCREEN] [ACCESIBILITY_SCREEN] WAVING WIND_FORCE SUN_REFLECTION CLOUD_REFLECTION MATERIAL_GLOSS REFRACTION EMISSIVE_ORE EMISSIVE_MATERIAL <empty> <empty> PERF_IMPACT

screen.MISC_SCREEN.columns=2
screen.MISC_SCREEN = [TEXT_RENDER_SCREEN] SEASONS SEASON_LENGTH END_PORTAL SELECTION_LINE <empty> <empty> <empty> PERF_IMPACT
screen.EFFECTS_SCREEN.columns=2
screen.EFFECTS_SCREEN= [RENDER_SCREEN] [BLOOM_SCREEN] [AO_SCREEN] [MOTION_BLUR_SCREEN] [CLOUDS_SCREEN] [POST_SCREEN] [WATER_SCREEN] [SKY_SCREEN] [CUSTOM_COLORS_SCREEN] [CAMERA_SCREEN]
screen.LabPBR= LabPBR POM POM_SHADOW LabEMISSIVE POM_DEPTH POM_STEPS SS_SAMPLES
## Effects sub-screens:

screen.RENDER_SCREEN.columns=2
screen.RENDER_SCREEN= AA_TYPE FXAA FOG_ACTIVE FOG_ADJUST NEAR_FOG FOG_TINT NETHER_FOG_DISTANCE FOLIAGE_V <empty> <empty> PERF_IMPACT

screen.BLOOM_SCREEN.columns=1
screen.BLOOM_SCREEN= BLOOM BLOOM_SAMPLES BLOOM_STRENGTH FAKE_BLOOM <empty> PERF_IMPACT

screen.AO_SCREEN.columns=1
screen.AO_SCREEN= AO VANILLA_AO AOSTEPS AO_STRENGTH <empty> PERF_IMPACT

screen.MOTION_BLUR_SCREEN.columns=1
screen.MOTION_BLUR_SCREEN= MOTION_BLUR MOTION_BLUR_STRENGTH MOTION_BLUR_SAMPLES <empty> PERF_IMPACT

screen.LIGHTING_SCREEN.columns=2
screen.LIGHTING_SCREEN= SHADOW_CASTING COLORED_SHADOW SHADOW_TYPE SHADOW_BLUR SHADOW_QTY_SLIDER SHADOW_DISTANCE_SLIDER SHADOW_LOCK <empty> <empty> <empty> VOL_LIGHT GODRAY_STEPS NIGHT_BRIGHT NIGHT_BRIGHT_RANGE <empty> <empty> REFLECTION_SLIDER RAYMARCH_STEPS AVOID_DARK_LEVEL BLOCKLIGHT_TEMP DYN_HAND_LIGHT SHADOW_ENTITIES OMNI_MUL PERF_IMPACT

screen.CAMERA_SCREEN.columns=2
screen.CAMERA_SCREEN= SATURATION CONTRAST BRIGHTNESS GAMMA VIBRANCE [HDR_SCREEN] <empty> <empty> RED GREEN BLUE EXPOSURE SIMPLE_AUTOEXP DOF DOF_STRENGTH CHROMA_ABER CHROMA_ABER_STRENGTH <empty> <empty> <empty> PERF_IMPACT

screen.HDR_SCREEN.columns=2
screen.HDR_SCREEN= TONEMAPPING HDR COLOR_BITS DOF_HDR <empty> <empty> PERF_IMPACT

screen.WATER_SCREEN = CAUSTICS CAUSTICS_INTENSITY <empty> <empty> WATER_ABSORPTION WATER_FOG USE_WATER_TEXTURE VANILLA_WATER WATER_COLOR_SOURCE USE_WATER_TURBULENCE
screen.POST_SCREEN = SHARP_FORCE PS1_LIKE VIGNETTE VIGNETTE_FACTOR FILM_GRAIN GRAIN_FACTOR 

screen.CLOUDS_SCREEN.columns=2
screen.CLOUDS_SCREEN = SUN_MUL MOON_MUL ASTRO_POWER sunPathRotation ROUND_SUN <empty> <empty> <empty> V_CLOUDS CIRRUS USE_CLOUD_VOL_STYLE CLOUD_SPEED END_CLOUDS CLOUD_DENSITY CLOUD_STEPS_AVG CIRRUS_STEPS_AVG <empty> <empty> PERF_IMPACT

screen.SKY_SCREEN = COLOR_SCHEME [CUSTOM_COLORS_SCREEN] <empty> <empty> SIMPLE_SKY BIOME_SKY BIOME_FOG SANDSTORM <empty> <empty> STAR_SLIDER END_STARS STARS_BRIGHTNESS STARS_COVERAGE AURORA CUSTOM_SKYFIX

screen.CUSTOM_COLORS_DAY.columns=3
screen.CUSTOM_COLORS_DAY = LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B

screen.CUSTOM_COLORS_SUNSET.columns=3
screen.CUSTOM_COLORS_SUNSET = LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B

screen.CUSTOM_COLORS_NIGHT.columns=3
screen.CUSTOM_COLORS_NIGHT = LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B

screen.CUSTOM_COLORS_WATER.columns=3
screen.CUSTOM_COLORS_WATER = WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B

screen.CUSTOM_COLORS_NV.columns=3
screen.CUSTOM_COLORS_NV = NV_COLOR_R NV_COLOR_G NV_COLOR_B

screen.CUSTOM_COLORS_SCREEN.columns=1
screen.CUSTOM_COLORS_SCREEN = [CUSTOM_COLORS_DAY] [CUSTOM_COLORS_SUNSET] [CUSTOM_COLORS_NIGHT] [CUSTOM_COLORS_WATER] [CUSTOM_COLORS_NV] <empty> OMNI_TINT_CUSTOM

#screen.FSR_SCREEN = FSR RENDER_SCALE_INT

screen.TEXT_RENDER_SCREEN.columns=2
screen.TEXT_RENDER_SCREEN = TITLE
# End of effects sub-screens.

screen.INFO_SCREEN.columns=3
screen.INFO_SCREEN = HOVER <empty> VERSION <empty> <empty> <empty> PROFILES STYLES PERF_IMPACT CREDITS
screen.COMPATIBILITY_SCREEN = USE_BASIC_SH BLACK_ENTITY_FIX DEBUG_MODE
screen.ACCESIBILITY_SCREEN = COLOR_BLINDNESS COLOR_BLIND_MODE CB_STRENGTH

sliders = POM_DEPTH POM_STEPS SS_SAMPLES FOG_TINT SHADOW_TYPE SELECTION_LINE SEASON_LENGTH MATERIAL_GLOSS SHADOW_LOCK SUN_REFLECTION NIGHT_BRIGHT_RANGE RENDER_SCALE_INT COLOR_BITS VIBRANCE CHROMA_ABER_STRENGTH STAR_SLIDER STARS_BRIGHTNESS STARS_COVERAGE CAUSTICS_INTENSITY GODRAY_STEPS CLOUD_DENSITY SUN_MUL MOON_MUL ASTRO_POWER <empty> <empty> CIRRUS_STEPS_AVG OMNI_MUL CB_STRENGTH BLOOM_STRENGTH RED GREEN BLUE EXPOSURE WATER_FOG GAMMA WIND_FORCE DOF_STRENGTH RAYMARCH_STEPS SATURATION CONTRAST BRIGHTNESS VIGNETTE_FACTOR GRAIN_FACTOR SHARP_FORCE SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION  BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM

# Custom uniforms -----

# Many values are precalculated to avoid their later or repetitive calculation.

# Pixel size
uniform.float.pixel_size_x = (1.0 / viewWidth)
uniform.float.pixel_size_y = (1.0 / viewHeight)
uniform.float.pixelSizeX = 1.0 / viewWidth
uniform.float.pixelSizeY = 1.0 / viewHeight
uniform.float.inv_aspect_ratio = (1.0 / aspectRatio)

# Time constants
variable.float.hour_world = worldTime * 0.001
uniform.float.day_moment = hour_world * 0.04166666666666667

uniform.float.continuousWorldDay = worldDay - 50 * floor(worldDay / 50)
uniform.float.TotalWorldTime = worldTime + (continuousWorldDay * 24000.0)

# Day color mixer (for shadows) - This formula allows graphing the function that is calculated later.
# It allows setting values depending on the time of day. Particularly interesting are the transitions
# from day to night and vice versa, which are often used to indicate the intensity of the shadow
# (when it is produced by the moon instead of the sun), and other similar things.
# f(x) = min(−((x−.25)^2)∙20 + 1.25, 1)
# g(x) = min(−((x−.75)^2)∙50 + 3.125, 1)

variable.float.moment_aux = day_moment - 0.25
variable.float.moment_aux_2 = moment_aux * moment_aux
uniform.float.day_mixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0)

variable.float.moment_aux_3 = day_moment - 0.75
variable.float.moment_aux_4 = moment_aux_3 * moment_aux_3
uniform.float.night_mixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0)

# Day color mixer (for volumetric light) - "Similar to the previous case, but applied to values
# dependent on the time of day for volumetric lighting.

variable.float.moment_aux_5 = (day_moment * 4.0) - 1.0
variable.float.moment_aux_6 = moment_aux_5 * moment_aux_5 * moment_aux_5 * moment_aux_5
variable.float.day_vol_mixer = clamp(((-moment_aux_6 + 1.0) * 7.0) + 1.0, 1.0, 8.0)

variable.float.moment_aux_7 = (day_moment * 4.0) - 3.0
variable.float.moment_aux_8 = moment_aux_7 * moment_aux_7 * moment_aux_7 * moment_aux_7
variable.float.night_vol_mixer = clamp(((-moment_aux_8 + 1.0) * 7.0) + 1.0, 1.0, 8.0)

uniform.float.vol_mixer = max(day_vol_mixer, night_vol_mixer)

# Light mix - Similar to the previous cases, a value that depends on the time of day
# to adjust various different parameters.
variable.float.light_mix_a = if((worldTime >= 0 && worldTime < 12485) || worldTime >= 23515, 1.0, 0.0)
variable.float.light_mix_b = if(worldTime >= 12485 && worldTime < 13085, 1.0 - ((worldTime - 12485) * 0.0016666666666666668), 0.0)
variable.float.light_mix_c = 0.0
variable.float.light_mix_d = if(worldTime >= 22915 && worldTime < 23515, (worldTime - 22915) * 0.0016666666666666668, 0.0)
variable.float.light_mix_e = max(light_mix_a, light_mix_b)
variable.float.light_mix_f = max(light_mix_c, light_mix_d)
uniform.float.light_mix = max(light_mix_e, light_mix_f)
uniform.float.dayNightMix = max(light_mix_e, light_mix_f)

# Frame modulus
uniform.int.frame_mod = fmod(frameCounter, 8)

# TAA OFFSET - The offset for TAA is precalculated here.
# It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.)
# The traversal goes from one vertex of the pentagon to another at the opposite end,
# so that the traversal between different points is maximized and the images vary
# as much as possible from one to the next. It helps to make the flickering of the image
# so fast that it is "absorbed" and better masked by the TAA history.

#if AA_TYPE > 0
    # Pentagon
    uniform.vec2.taa_offset = vec2((if( \
    frame_mod == 0,  0.5, \
    frame_mod == 1, -0.5, \
    frame_mod == 2, -0.5, \
    frame_mod == 3,  0.5, \
    frame_mod == 4,  0.5, \
    frame_mod == 5, -0.5, \
    frame_mod == 6, -0.5, \
    frame_mod == 7,  0.5, \
    0.0)) * pixel_size_x, \
    (if( \
    frame_mod == 0,  0.5, \
    frame_mod == 1, -0.5, \
    frame_mod == 2,  0.5, \
    frame_mod == 3, -0.5, \
    frame_mod == 4,  0.5, \
    frame_mod == 5, -0.5, \
    frame_mod == 6,  0.5, \
    frame_mod == 7, -0.5, \
    0.0)) * pixel_size_y)

    # Dither shift - When Temporal sampling is active, dithering patterns change over time.
    # This only works in recent versions of Minecraft/Optifine/Iris.
    # For older versions, a mechanism that depends on the
    # uniform "frame_mod" is used to calculate the increment.
    uniform.float.dither_shift = if( \
    frame_mod == 0, 0.0, \
    frame_mod == 1, 0.618034, \
    frame_mod == 2, 0.236068, \
    frame_mod == 3, 0.854102, \
    frame_mod == 4, 0.472136, \
    frame_mod == 5, 0.090170, \
    frame_mod == 6, 0.708204, \
    frame_mod == 7, 0.326238, \
    0.0)
#else
    uniform.vec2.taa_offset = vec2(0);
#endif


# FOV - A precalculated value related to FOV
uniform.float.fov_y_inv = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5

# float horizontalFOV = atan(1.0 / gbufferProjection[0].x);
# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fov_y_inv

#ifdef DISTANT_HORIZONS
dhShadow.enabled = false
blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA
#endif

# BLOOM Mipmap level calculation - inherited
variable.float.softBaseSize = 128.0
variable.float.softLodScale = max(1.0, viewHeight / softBaseSize)
# Optifine use 'log'. Divide with ln(2) (0.69314718)
uniform.float.softLod = max(0.0, log(softLodScale) / 0.69314718)

uniform.float.swamp= smooth(if(biome_category == CAT_SWAMP, 1, 0), 60, 60)
uniform.float.arid=smooth(if(biome_category == CAT_DESERT || biome_category == CAT_MESA, 1, 0), 60, 60)
uniform.float.jungle=smooth(if(biome_category == CAT_JUNGLE, 1, 0), 60, 60)
#if defined(BIOME_PALE_GARDEN)
  uniform.float.pale_garden = smooth(
    if(in(biome, BIOME_PALE_GARDEN), 1, 0),
    60, 60
  )
#else
  uniform.float.pale_garden = 0.0
#endif
# Warning fix
uniform.float.snow=smooth(if(biome_category == CAT_ICY, 1, 0.0), 60, 60)
uniform.float.hill=smooth(if(biome_category == CAT_EXTREME_HILLS, 1, 0.0), 60, 60)
uniform.float.taiga=smooth(if(biome_category == CAT_TAIGA, 1, 0), 60, 60)

