From 73230989ad0b60471ee1648126a59345c1205127 Mon Sep 17 00:00:00 2001 From: John McCardle Date: Tue, 13 Jan 2026 19:42:37 -0500 Subject: [PATCH] Cookbook: draft docs --- docs/cookbook/procgen/01_heightmap_hills.py | 89 ++++ docs/cookbook/procgen/02_heightmap_noise.py | 124 ++++++ .../procgen/03_heightmap_operations.py | 116 +++++ .../procgen/04_heightmap_transforms.py | 116 +++++ docs/cookbook/procgen/05_heightmap_erosion.py | 135 ++++++ docs/cookbook/procgen/06_heightmap_voronoi.py | 133 ++++++ docs/cookbook/procgen/07_heightmap_bezier.py | 158 +++++++ .../procgen/08_heightmap_thresholds.py | 148 +++++++ docs/cookbook/procgen/10_bsp_dungeon.py | 130 ++++++ docs/cookbook/procgen/11_bsp_traversal.py | 178 ++++++++ docs/cookbook/procgen/12_bsp_adjacency.py | 160 +++++++ docs/cookbook/procgen/13_bsp_shrink.py | 178 ++++++++ docs/cookbook/procgen/14_bsp_manual_split.py | 150 +++++++ docs/cookbook/procgen/20_noise_algorithms.py | 125 ++++++ docs/cookbook/procgen/21_noise_parameters.py | 115 +++++ .../procgen/30_advanced_cave_dungeon.py | 163 +++++++ docs/cookbook/procgen/31_advanced_island.py | 140 ++++++ docs/cookbook/procgen/32_advanced_city.py | 164 ++++++++ docs/cookbook/procgen/33_advanced_caves.py | 163 +++++++ docs/cookbook/procgen/34_advanced_volcanic.py | 187 +++++++++ .../procgen/procgen_01_heightmap_hills.png | Bin 0 -> 44864 bytes .../procgen/procgen_02_heightmap_noise.png | Bin 0 -> 56120 bytes .../procgen_03_heightmap_operations.png | Bin 0 -> 55067 bytes .../procgen_04_heightmap_transforms.png | Bin 0 -> 54143 bytes .../procgen/procgen_05_heightmap_erosion.png | Bin 0 -> 62221 bytes .../procgen/procgen_06_heightmap_voronoi.png | Bin 0 -> 53833 bytes .../procgen/procgen_07_heightmap_bezier.png | Bin 0 -> 51934 bytes .../procgen_08_heightmap_thresholds.png | Bin 0 -> 67412 bytes .../procgen/procgen_10_bsp_dungeon.png | Bin 0 -> 39462 bytes .../procgen/procgen_11_bsp_traversal.png | Bin 0 -> 56445 bytes .../procgen/procgen_12_bsp_adjacency.png | Bin 0 -> 47792 bytes .../procgen/procgen_13_bsp_shrink.png | Bin 0 -> 58244 bytes .../procgen/procgen_14_bsp_manual_split.png | Bin 0 -> 47479 bytes .../procgen/procgen_20_noise_algorithms.png | Bin 0 -> 78846 bytes .../procgen/procgen_21_noise_parameters.png | Bin 0 -> 80387 bytes .../procgen_30_advanced_cave_dungeon.png | Bin 0 -> 41535 bytes .../procgen/procgen_31_advanced_island.png | Bin 0 -> 43220 bytes .../procgen/procgen_32_advanced_city.png | Bin 0 -> 39680 bytes .../procgen/procgen_33_advanced_caves.png | Bin 0 -> 52537 bytes .../procgen/procgen_34_advanced_volcanic.png | Bin 0 -> 55833 bytes docs/cookbook/procgen/run_all_demos.py | 83 ++++ docs/cookbook/tools/sprite_labeler.py | 397 ++++++++++++++++++ 42 files changed, 3352 insertions(+) create mode 100644 docs/cookbook/procgen/01_heightmap_hills.py create mode 100644 docs/cookbook/procgen/02_heightmap_noise.py create mode 100644 docs/cookbook/procgen/03_heightmap_operations.py create mode 100644 docs/cookbook/procgen/04_heightmap_transforms.py create mode 100644 docs/cookbook/procgen/05_heightmap_erosion.py create mode 100644 docs/cookbook/procgen/06_heightmap_voronoi.py create mode 100644 docs/cookbook/procgen/07_heightmap_bezier.py create mode 100644 docs/cookbook/procgen/08_heightmap_thresholds.py create mode 100644 docs/cookbook/procgen/10_bsp_dungeon.py create mode 100644 docs/cookbook/procgen/11_bsp_traversal.py create mode 100644 docs/cookbook/procgen/12_bsp_adjacency.py create mode 100644 docs/cookbook/procgen/13_bsp_shrink.py create mode 100644 docs/cookbook/procgen/14_bsp_manual_split.py create mode 100644 docs/cookbook/procgen/20_noise_algorithms.py create mode 100644 docs/cookbook/procgen/21_noise_parameters.py create mode 100644 docs/cookbook/procgen/30_advanced_cave_dungeon.py create mode 100644 docs/cookbook/procgen/31_advanced_island.py create mode 100644 docs/cookbook/procgen/32_advanced_city.py create mode 100644 docs/cookbook/procgen/33_advanced_caves.py create mode 100644 docs/cookbook/procgen/34_advanced_volcanic.py create mode 100644 docs/cookbook/procgen/procgen_01_heightmap_hills.png create mode 100644 docs/cookbook/procgen/procgen_02_heightmap_noise.png create mode 100644 docs/cookbook/procgen/procgen_03_heightmap_operations.png create mode 100644 docs/cookbook/procgen/procgen_04_heightmap_transforms.png create mode 100644 docs/cookbook/procgen/procgen_05_heightmap_erosion.png create mode 100644 docs/cookbook/procgen/procgen_06_heightmap_voronoi.png create mode 100644 docs/cookbook/procgen/procgen_07_heightmap_bezier.png create mode 100644 docs/cookbook/procgen/procgen_08_heightmap_thresholds.png create mode 100644 docs/cookbook/procgen/procgen_10_bsp_dungeon.png create mode 100644 docs/cookbook/procgen/procgen_11_bsp_traversal.png create mode 100644 docs/cookbook/procgen/procgen_12_bsp_adjacency.png create mode 100644 docs/cookbook/procgen/procgen_13_bsp_shrink.png create mode 100644 docs/cookbook/procgen/procgen_14_bsp_manual_split.png create mode 100644 docs/cookbook/procgen/procgen_20_noise_algorithms.png create mode 100644 docs/cookbook/procgen/procgen_21_noise_parameters.png create mode 100644 docs/cookbook/procgen/procgen_30_advanced_cave_dungeon.png create mode 100644 docs/cookbook/procgen/procgen_31_advanced_island.png create mode 100644 docs/cookbook/procgen/procgen_32_advanced_city.png create mode 100644 docs/cookbook/procgen/procgen_33_advanced_caves.png create mode 100644 docs/cookbook/procgen/procgen_34_advanced_volcanic.png create mode 100644 docs/cookbook/procgen/run_all_demos.py create mode 100644 docs/cookbook/tools/sprite_labeler.py diff --git a/docs/cookbook/procgen/01_heightmap_hills.py b/docs/cookbook/procgen/01_heightmap_hills.py new file mode 100644 index 0000000..4f4a360 --- /dev/null +++ b/docs/cookbook/procgen/01_heightmap_hills.py @@ -0,0 +1,89 @@ +"""HeightMap Hills and Craters Demo + +Demonstrates: add_hill, dig_hill +Creates volcanic terrain with mountains and craters using ColorLayer visualization. +""" +import mcrfpy +from mcrfpy import automation + +# Full screen grid: 60x48 tiles at 16x16 = 960x768 +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def height_to_color(h): + """Convert height value to terrain color.""" + if h < 0.1: + return mcrfpy.Color(20, 40, int(80 + h * 400)) + elif h < 0.3: + t = (h - 0.1) / 0.2 + return mcrfpy.Color(int(40 + t * 30), int(60 + t * 40), 30) + elif h < 0.5: + t = (h - 0.3) / 0.2 + return mcrfpy.Color(int(70 - t * 20), int(100 + t * 50), int(30 + t * 20)) + elif h < 0.7: + t = (h - 0.5) / 0.2 + return mcrfpy.Color(int(120 + t * 40), int(100 + t * 30), int(60 + t * 20)) + elif h < 0.85: + t = (h - 0.7) / 0.15 + return mcrfpy.Color(int(140 + t * 40), int(130 + t * 40), int(120 + t * 40)) + else: + t = (h - 0.85) / 0.15 + return mcrfpy.Color(int(180 + t * 75), int(180 + t * 75), int(180 + t * 75)) + +# Setup scene +scene = mcrfpy.Scene("hills_demo") + +# Create grid with color layer +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +# Create heightmap +hmap = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.3) + +# Add volcanic mountains - large hills +hmap.add_hill((15, 24), 18.0, 0.6) # Central volcano base +hmap.add_hill((15, 24), 10.0, 0.3) # Volcano peak +hmap.add_hill((45, 15), 12.0, 0.5) # Eastern mountain +hmap.add_hill((35, 38), 14.0, 0.45) # Southern mountain +hmap.add_hill((8, 10), 8.0, 0.35) # Small northern hill + +# Create craters using dig_hill +hmap.dig_hill((15, 24), 5.0, 0.1) # Volcanic crater +hmap.dig_hill((45, 15), 4.0, 0.25) # Eastern crater +hmap.dig_hill((25, 30), 6.0, 0.05) # Impact crater (deep) +hmap.dig_hill((50, 40), 3.0, 0.2) # Small crater + +# Add some smaller features for variety +for i in range(8): + x = 5 + (i * 7) % 55 + y = 5 + (i * 11) % 40 + hmap.add_hill((x, y), float(3 + (i % 4)), 0.15) + +# Normalize to use full color range +hmap.normalize(0.0, 1.0) + +# Apply heightmap to color layer +for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + h = hmap.get((x, y)) + color_layer.set((x, y), height_to_color(h)) + +# Title +title = mcrfpy.Caption(text="HeightMap: add_hill + dig_hill (volcanic terrain)", pos=(10, 10)) +title.fill_color = mcrfpy.Color(255, 255, 255) +title.outline = 1 +title.outline_color = mcrfpy.Color(0, 0, 0) +scene.children.append(title) + +scene.activate() + +# Take screenshot directly (works in headless mode) +automation.screenshot("procgen_01_heightmap_hills.png") +print("Screenshot saved: procgen_01_heightmap_hills.png") diff --git a/docs/cookbook/procgen/02_heightmap_noise.py b/docs/cookbook/procgen/02_heightmap_noise.py new file mode 100644 index 0000000..5d4db43 --- /dev/null +++ b/docs/cookbook/procgen/02_heightmap_noise.py @@ -0,0 +1,124 @@ +"""HeightMap Noise Integration Demo + +Demonstrates: add_noise, multiply_noise with NoiseSource +Shows terrain generation using different noise modes (flat, fbm, turbulence). +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def terrain_color(h): + """Height-based terrain coloring.""" + if h < 0.25: + # Water - deep to shallow blue + t = h / 0.25 + return mcrfpy.Color(int(30 + t * 30), int(60 + t * 60), int(120 + t * 80)) + elif h < 0.35: + # Beach/sand + t = (h - 0.25) / 0.1 + return mcrfpy.Color(int(180 + t * 40), int(160 + t * 30), int(100 + t * 20)) + elif h < 0.6: + # Grass - varies with height + t = (h - 0.35) / 0.25 + return mcrfpy.Color(int(50 + t * 30), int(120 + t * 40), int(40 + t * 20)) + elif h < 0.75: + # Forest/hills + t = (h - 0.6) / 0.15 + return mcrfpy.Color(int(40 - t * 10), int(80 + t * 20), int(30 + t * 10)) + elif h < 0.88: + # Rock/mountain + t = (h - 0.75) / 0.13 + return mcrfpy.Color(int(100 + t * 40), int(90 + t * 40), int(80 + t * 40)) + else: + # Snow peaks + t = (h - 0.88) / 0.12 + return mcrfpy.Color(int(200 + t * 55), int(200 + t * 55), int(210 + t * 45)) + +def apply_to_layer(hmap, layer): + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + h = hmap.get((x, y)) + layer.set(x, y, terrain_color(h)) + +def run_demo(runtime): + # Create three panels showing different noise modes + panel_width = GRID_WIDTH // 3 + right_panel_width = GRID_WIDTH - 2 * panel_width # Handle non-divisible widths + + # Create noise source with consistent seed + noise = mcrfpy.NoiseSource( + dimensions=2, + algorithm='simplex', + hurst=0.5, + lacunarity=2.0, + seed=42 + ) + + # Left panel: Flat noise (single octave, raw) + left_hmap = mcrfpy.HeightMap((panel_width, GRID_HEIGHT), fill=0.0) + left_hmap.add_noise(noise, world_origin=(0, 0), world_size=(20, 20), mode='flat', octaves=1) + left_hmap.normalize(0.0, 1.0) + + # Middle panel: FBM noise (fractal brownian motion - natural terrain) + mid_hmap = mcrfpy.HeightMap((panel_width, GRID_HEIGHT), fill=0.0) + mid_hmap.add_noise(noise, world_origin=(0, 0), world_size=(20, 20), mode='fbm', octaves=6) + mid_hmap.normalize(0.0, 1.0) + + # Right panel: Turbulence (absolute value - clouds, marble) + right_hmap = mcrfpy.HeightMap((right_panel_width, GRID_HEIGHT), fill=0.0) + right_hmap.add_noise(noise, world_origin=(0, 0), world_size=(20, 20), mode='turbulence', octaves=6) + right_hmap.normalize(0.0, 1.0) + + # Apply to color layer with panel divisions + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + if x < panel_width: + h = left_hmap.get((x, y)) + elif x < panel_width * 2: + h = mid_hmap.get((x - panel_width, y)) + else: + h = right_hmap.get((x - panel_width * 2, y)) + color_layer.set(((x, y)), terrain_color(h)) + + # Add divider lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_width - 1, y)), mcrfpy.Color(255, 255, 255, 100)) + color_layer.set(((panel_width * 2 - 1, y)), mcrfpy.Color(255, 255, 255, 100)) + + +# Setup scene +scene = mcrfpy.Scene("noise_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +# Labels for each panel +labels = [ + ("FLAT (raw)", 10), + ("FBM (terrain)", GRID_WIDTH * CELL_SIZE // 3 + 10), + ("TURBULENCE (clouds)", GRID_WIDTH * CELL_SIZE * 2 // 3 + 10) +] +for text, x in labels: + label = mcrfpy.Caption(text=text, pos=(x, 10)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_02_heightmap_noise.png") +print("Screenshot saved: procgen_02_heightmap_noise.png") diff --git a/docs/cookbook/procgen/03_heightmap_operations.py b/docs/cookbook/procgen/03_heightmap_operations.py new file mode 100644 index 0000000..e98239e --- /dev/null +++ b/docs/cookbook/procgen/03_heightmap_operations.py @@ -0,0 +1,116 @@ +"""HeightMap Combination Operations Demo + +Demonstrates: add, subtract, multiply, min, max, lerp, copy_from +Shows how heightmaps can be combined for complex terrain effects. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def value_to_color(h): + """Simple grayscale with color tinting for visibility.""" + h = max(0.0, min(1.0, h)) + # Blue-white-red gradient for clear visualization + if h < 0.5: + t = h / 0.5 + return mcrfpy.Color(int(50 * t), int(100 * t), int(200 - 100 * t)) + else: + t = (h - 0.5) / 0.5 + return mcrfpy.Color(int(50 + 200 * t), int(100 + 100 * t), int(100 - 50 * t)) + +def run_demo(runtime): + # Create 6 panels (2 rows x 3 columns) + panel_w = GRID_WIDTH // 3 + panel_h = GRID_HEIGHT // 2 + + # Create two base heightmaps for operations + noise1 = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=42) + noise2 = mcrfpy.NoiseSource(dimensions=2, algorithm='perlin', seed=123) + + base1 = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + base1.add_noise(noise1, world_size=(10, 10), mode='fbm', octaves=4) + base1.normalize(0.0, 1.0) + + base2 = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + base2.add_noise(noise2, world_size=(10, 10), mode='fbm', octaves=4) + base2.normalize(0.0, 1.0) + + # Panel 1: ADD operation (combined terrain) + add_result = base1.copy_from(base1) # Actually need to create new + add_result = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + add_result.copy_from(base1).add(base2).normalize(0.0, 1.0) + + # Panel 2: SUBTRACT operation (carving) + sub_result = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + sub_result.copy_from(base1).subtract(base2).normalize(0.0, 1.0) + + # Panel 3: MULTIPLY operation (masking) + mul_result = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + mul_result.copy_from(base1).multiply(base2).normalize(0.0, 1.0) + + # Panel 4: MIN operation (valleys) + min_result = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + min_result.copy_from(base1).min(base2) + + # Panel 5: MAX operation (ridges) + max_result = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + max_result.copy_from(base1).max(base2) + + # Panel 6: LERP operation (blending) + lerp_result = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + lerp_result.copy_from(base1).lerp(base2, 0.5) + + # Apply panels to grid + panels = [ + (add_result, 0, 0, "ADD"), + (sub_result, panel_w, 0, "SUBTRACT"), + (mul_result, panel_w * 2, 0, "MULTIPLY"), + (min_result, 0, panel_h, "MIN"), + (max_result, panel_w, panel_h, "MAX"), + (lerp_result, panel_w * 2, panel_h, "LERP(0.5)"), + ] + + for hmap, ox, oy, name in panels: + for y in range(panel_h): + for x in range(panel_w): + h = hmap.get((x, y)) + color_layer.set(((ox + x, oy + y)), value_to_color(h)) + + # Add label + label = mcrfpy.Caption(text=name, pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 5)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + # Draw grid lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(255, 255, 255, 80)) + color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(255, 255, 255, 80)) + for x in range(GRID_WIDTH): + color_layer.set(((x, panel_h - 1)), mcrfpy.Color(255, 255, 255, 80)) + + +# Setup +scene = mcrfpy.Scene("operations_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_03_heightmap_operations.png") +print("Screenshot saved: procgen_03_heightmap_operations.png") diff --git a/docs/cookbook/procgen/04_heightmap_transforms.py b/docs/cookbook/procgen/04_heightmap_transforms.py new file mode 100644 index 0000000..792df1a --- /dev/null +++ b/docs/cookbook/procgen/04_heightmap_transforms.py @@ -0,0 +1,116 @@ +"""HeightMap Transform Operations Demo + +Demonstrates: scale, clamp, normalize, smooth, kernel_transform +Shows value manipulation and convolution effects. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def value_to_color(h): + """Grayscale with enhanced contrast.""" + h = max(0.0, min(1.0, h)) + v = int(h * 255) + return mcrfpy.Color(v, v, v) + +def run_demo(runtime): + # Create 6 panels showing different transforms + panel_w = GRID_WIDTH // 3 + panel_h = GRID_HEIGHT // 2 + + # Source noise + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=42) + + # Create base terrain with features + base = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + base.add_noise(noise, world_size=(8, 8), mode='fbm', octaves=4) + base.add_hill((panel_w // 2, panel_h // 2), 8, 0.5) + base.normalize(0.0, 1.0) + + # Panel 1: Original + original = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + original.copy_from(base) + + # Panel 2: SCALE (amplify contrast) + scaled = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + scaled.copy_from(base).add_constant(-0.5).scale(2.0).clamp(0.0, 1.0) + + # Panel 3: CLAMP (plateau effect) + clamped = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + clamped.copy_from(base).clamp(0.3, 0.7).normalize(0.0, 1.0) + + # Panel 4: SMOOTH (blur/average) + smoothed = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + smoothed.copy_from(base).smooth(3) + + # Panel 5: SHARPEN kernel + sharpened = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + sharpened.copy_from(base) + sharpen_kernel = { + (0, -1): -1.0, (-1, 0): -1.0, (0, 0): 5.0, (1, 0): -1.0, (0, 1): -1.0 + } + sharpened.kernel_transform(sharpen_kernel).clamp(0.0, 1.0) + + # Panel 6: EDGE DETECTION kernel + edges = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + edges.copy_from(base) + edge_kernel = { + (-1, -1): -1, (0, -1): -1, (1, -1): -1, + (-1, 0): -1, (0, 0): 8, (1, 0): -1, + (-1, 1): -1, (0, 1): -1, (1, 1): -1, + } + edges.kernel_transform(edge_kernel).normalize(0.0, 1.0) + + # Apply to grid + panels = [ + (original, 0, 0, "ORIGINAL"), + (scaled, panel_w, 0, "SCALE (contrast)"), + (clamped, panel_w * 2, 0, "CLAMP (plateau)"), + (smoothed, 0, panel_h, "SMOOTH (blur)"), + (sharpened, panel_w, panel_h, "SHARPEN kernel"), + (edges, panel_w * 2, panel_h, "EDGE DETECT"), + ] + + for hmap, ox, oy, name in panels: + for y in range(panel_h): + for x in range(panel_w): + h = hmap.get((x, y)) + color_layer.set(((ox + x, oy + y)), value_to_color(h)) + + label = mcrfpy.Caption(text=name, pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 5)) + label.fill_color = mcrfpy.Color(255, 255, 0) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + # Grid lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(100, 100, 100)) + color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(100, 100, 100)) + for x in range(GRID_WIDTH): + color_layer.set(((x, panel_h - 1)), mcrfpy.Color(100, 100, 100)) + + +# Setup +scene = mcrfpy.Scene("transforms_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_04_heightmap_transforms.png") +print("Screenshot saved: procgen_04_heightmap_transforms.png") diff --git a/docs/cookbook/procgen/05_heightmap_erosion.py b/docs/cookbook/procgen/05_heightmap_erosion.py new file mode 100644 index 0000000..817030a --- /dev/null +++ b/docs/cookbook/procgen/05_heightmap_erosion.py @@ -0,0 +1,135 @@ +"""HeightMap Erosion and Terrain Generation Demo + +Demonstrates: rain_erosion, mid_point_displacement, smooth +Shows natural terrain formation through erosion simulation. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def terrain_color(h): + """Natural terrain coloring.""" + if h < 0.2: + # Deep water + t = h / 0.2 + return mcrfpy.Color(int(20 + t * 30), int(40 + t * 40), int(100 + t * 55)) + elif h < 0.3: + # Shallow water + t = (h - 0.2) / 0.1 + return mcrfpy.Color(int(50 + t * 50), int(80 + t * 60), int(155 + t * 40)) + elif h < 0.35: + # Beach + t = (h - 0.3) / 0.05 + return mcrfpy.Color(int(194 - t * 30), int(178 - t * 30), int(128 - t * 20)) + elif h < 0.55: + # Lowland grass + t = (h - 0.35) / 0.2 + return mcrfpy.Color(int(80 + t * 20), int(140 - t * 30), int(60 + t * 10)) + elif h < 0.7: + # Highland grass/forest + t = (h - 0.55) / 0.15 + return mcrfpy.Color(int(50 + t * 30), int(100 + t * 10), int(40 + t * 20)) + elif h < 0.85: + # Rock + t = (h - 0.7) / 0.15 + return mcrfpy.Color(int(100 + t * 30), int(95 + t * 30), int(85 + t * 35)) + else: + # Snow + t = (h - 0.85) / 0.15 + return mcrfpy.Color(int(180 + t * 75), int(185 + t * 70), int(190 + t * 65)) + +def run_demo(runtime): + panel_w = GRID_WIDTH // 3 + panel_h = GRID_HEIGHT // 2 + + # Panel 1: Mid-point displacement (raw) + mpd_raw = mcrfpy.HeightMap((panel_w, panel_h), fill=0.5) + mpd_raw.mid_point_displacement(roughness=0.6, seed=42) + mpd_raw.normalize(0.0, 1.0) + + # Panel 2: Mid-point displacement + smoothing + mpd_smooth = mcrfpy.HeightMap((panel_w, panel_h), fill=0.5) + mpd_smooth.mid_point_displacement(roughness=0.6, seed=42) + mpd_smooth.smooth(2) + mpd_smooth.normalize(0.0, 1.0) + + # Panel 3: Mid-point + light erosion + mpd_light_erode = mcrfpy.HeightMap((panel_w, panel_h), fill=0.5) + mpd_light_erode.mid_point_displacement(roughness=0.6, seed=42) + mpd_light_erode.rain_erosion(drops=1000, erosion=0.05, sedimentation=0.03, seed=42) + mpd_light_erode.normalize(0.0, 1.0) + + # Panel 4: Noise-based + moderate erosion + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=123) + noise_erode = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + noise_erode.add_noise(noise, world_size=(12, 12), mode='fbm', octaves=5) + noise_erode.add_hill((panel_w // 2, panel_h // 2), 10, 0.4) + noise_erode.rain_erosion(drops=3000, erosion=0.1, sedimentation=0.05, seed=42) + noise_erode.normalize(0.0, 1.0) + + # Panel 5: Heavy erosion (river valleys) + heavy_erode = mcrfpy.HeightMap((panel_w, panel_h), fill=0.5) + heavy_erode.mid_point_displacement(roughness=0.7, seed=99) + heavy_erode.rain_erosion(drops=8000, erosion=0.15, sedimentation=0.02, seed=42) + heavy_erode.normalize(0.0, 1.0) + + # Panel 6: Extreme erosion (canyon-like) + extreme_erode = mcrfpy.HeightMap((panel_w, panel_h), fill=0.5) + extreme_erode.mid_point_displacement(roughness=0.5, seed=77) + extreme_erode.rain_erosion(drops=15000, erosion=0.2, sedimentation=0.01, seed=42) + extreme_erode.smooth(1) + extreme_erode.normalize(0.0, 1.0) + + # Apply to grid + panels = [ + (mpd_raw, 0, 0, "MPD Raw"), + (mpd_smooth, panel_w, 0, "MPD + Smooth"), + (mpd_light_erode, panel_w * 2, 0, "Light Erosion"), + (noise_erode, 0, panel_h, "Noise + Erosion"), + (heavy_erode, panel_w, panel_h, "Heavy Erosion"), + (extreme_erode, panel_w * 2, panel_h, "Extreme Erosion"), + ] + + for hmap, ox, oy, name in panels: + for y in range(panel_h): + for x in range(panel_w): + h = hmap.get((x, y)) + color_layer.set(((ox + x, oy + y)), terrain_color(h)) + + label = mcrfpy.Caption(text=name, pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 5)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + # Grid lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(80, 80, 80)) + color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(80, 80, 80)) + for x in range(GRID_WIDTH): + color_layer.set(((x, panel_h - 1)), mcrfpy.Color(80, 80, 80)) + + +# Setup +scene = mcrfpy.Scene("erosion_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_05_heightmap_erosion.png") +print("Screenshot saved: procgen_05_heightmap_erosion.png") diff --git a/docs/cookbook/procgen/06_heightmap_voronoi.py b/docs/cookbook/procgen/06_heightmap_voronoi.py new file mode 100644 index 0000000..5e2a996 --- /dev/null +++ b/docs/cookbook/procgen/06_heightmap_voronoi.py @@ -0,0 +1,133 @@ +"""HeightMap Voronoi Demo + +Demonstrates: add_voronoi with different coefficients +Shows cell-based patterns useful for biomes, regions, and organic structures. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def biome_color(h): + """Color cells as distinct biomes.""" + # Use value ranges to create distinct regions + h = max(0.0, min(1.0, h)) + + if h < 0.15: + return mcrfpy.Color(30, 60, 120) # Deep water + elif h < 0.25: + return mcrfpy.Color(50, 100, 180) # Shallow water + elif h < 0.35: + return mcrfpy.Color(194, 178, 128) # Beach/desert + elif h < 0.5: + return mcrfpy.Color(80, 160, 60) # Grassland + elif h < 0.65: + return mcrfpy.Color(40, 100, 40) # Forest + elif h < 0.8: + return mcrfpy.Color(100, 80, 60) # Hills + elif h < 0.9: + return mcrfpy.Color(130, 130, 130) # Mountains + else: + return mcrfpy.Color(240, 240, 250) # Snow + +def cell_edges_color(h): + """Highlight cell boundaries.""" + h = max(0.0, min(1.0, h)) + if h < 0.3: + return mcrfpy.Color(40, 40, 60) + elif h < 0.6: + return mcrfpy.Color(80, 80, 100) + else: + return mcrfpy.Color(200, 200, 220) + +def run_demo(runtime): + panel_w = GRID_WIDTH // 3 + panel_h = GRID_HEIGHT // 2 + + # Panel 1: Standard Voronoi (cell centers high) + # coefficients (1, 0) = distance to nearest point + v_standard = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + v_standard.add_voronoi(num_points=15, coefficients=(1.0, 0.0), seed=42) + v_standard.normalize(0.0, 1.0) + + # Panel 2: Inverted (cell centers low, edges high) + # coefficients (-1, 0) = inverted distance + v_inverted = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + v_inverted.add_voronoi(num_points=15, coefficients=(-1.0, 0.0), seed=42) + v_inverted.normalize(0.0, 1.0) + + # Panel 3: Cell difference (creates ridges) + # coefficients (1, -1) = distance to nearest - distance to second nearest + v_ridges = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + v_ridges.add_voronoi(num_points=15, coefficients=(1.0, -1.0), seed=42) + v_ridges.normalize(0.0, 1.0) + + # Panel 4: Few large cells (biome-scale) + v_biomes = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + v_biomes.add_voronoi(num_points=6, coefficients=(1.0, -0.3), seed=99) + v_biomes.normalize(0.0, 1.0) + + # Panel 5: Many small cells (texture-scale) + v_texture = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + v_texture.add_voronoi(num_points=50, coefficients=(1.0, -0.5), seed=77) + v_texture.normalize(0.0, 1.0) + + # Panel 6: Voronoi + noise blend (natural regions) + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=42) + v_natural = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + v_natural.add_voronoi(num_points=12, coefficients=(0.8, -0.4), seed=42) + v_natural.add_noise(noise, world_size=(15, 15), mode='fbm', octaves=3, scale=0.3) + v_natural.normalize(0.0, 1.0) + + # Apply to grid + panels = [ + (v_standard, 0, 0, "Standard (1,0)", biome_color), + (v_inverted, panel_w, 0, "Inverted (-1,0)", biome_color), + (v_ridges, panel_w * 2, 0, "Ridges (1,-1)", cell_edges_color), + (v_biomes, 0, panel_h, "Biomes (6 pts)", biome_color), + (v_texture, panel_w, panel_h, "Texture (50 pts)", cell_edges_color), + (v_natural, panel_w * 2, panel_h, "Voronoi + Noise", biome_color), + ] + + for hmap, ox, oy, name, color_func in panels: + for y in range(panel_h): + for x in range(panel_w): + h = hmap.get((x, y)) + color_layer.set(((ox + x, oy + y)), color_func(h)) + + label = mcrfpy.Caption(text=name, pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 5)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + # Grid lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(60, 60, 60)) + color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(60, 60, 60)) + for x in range(GRID_WIDTH): + color_layer.set(((x, panel_h - 1)), mcrfpy.Color(60, 60, 60)) + + +# Setup +scene = mcrfpy.Scene("voronoi_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_06_heightmap_voronoi.png") +print("Screenshot saved: procgen_06_heightmap_voronoi.png") diff --git a/docs/cookbook/procgen/07_heightmap_bezier.py b/docs/cookbook/procgen/07_heightmap_bezier.py new file mode 100644 index 0000000..15ae80c --- /dev/null +++ b/docs/cookbook/procgen/07_heightmap_bezier.py @@ -0,0 +1,158 @@ +"""HeightMap Bezier Curves Demo + +Demonstrates: dig_bezier for rivers, roads, and paths +Shows path carving with variable width and depth. +""" +import mcrfpy +from mcrfpy import automation +import math + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def terrain_with_water(h): + """Terrain coloring with water in low areas.""" + if h < 0.15: + # Water (carved paths) + t = h / 0.15 + return mcrfpy.Color(int(30 + t * 30), int(60 + t * 50), int(140 + t * 40)) + elif h < 0.25: + # Shore/wet ground + t = (h - 0.15) / 0.1 + return mcrfpy.Color(int(80 + t * 40), int(100 + t * 30), int(80 - t * 20)) + elif h < 0.5: + # Lowland + t = (h - 0.25) / 0.25 + return mcrfpy.Color(int(70 + t * 20), int(130 + t * 20), int(50 + t * 10)) + elif h < 0.7: + # Highland + t = (h - 0.5) / 0.2 + return mcrfpy.Color(int(60 + t * 30), int(110 - t * 20), int(45 + t * 15)) + elif h < 0.85: + # Hills + t = (h - 0.7) / 0.15 + return mcrfpy.Color(int(100 + t * 30), int(95 + t * 25), int(70 + t * 30)) + else: + # Peaks + t = (h - 0.85) / 0.15 + return mcrfpy.Color(int(150 + t * 60), int(150 + t * 60), int(155 + t * 60)) + +def run_demo(runtime): + panel_w = GRID_WIDTH // 2 + panel_h = GRID_HEIGHT + + # Left panel: River system + river_map = mcrfpy.HeightMap((panel_w, panel_h), fill=0.5) + + # Add terrain + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=42) + river_map.add_noise(noise, world_size=(10, 10), mode='fbm', octaves=4, scale=0.3) + river_map.add_hill((panel_w // 2, 5), 12, 0.3) # Mountain source + river_map.normalize(0.3, 0.9) + + # Main river - wide, flowing from top to bottom + river_map.dig_bezier( + points=((panel_w // 2, 2), (panel_w // 4, 15), (panel_w * 3 // 4, 30), (panel_w // 2, panel_h - 3)), + start_radius=2, end_radius=5, + start_height=0.1, end_height=0.05 + ) + + # Tributary from left + river_map.dig_bezier( + points=((3, 20), (10, 18), (15, 22), (panel_w // 3, 20)), + start_radius=1, end_radius=2, + start_height=0.12, end_height=0.1 + ) + + # Tributary from right + river_map.dig_bezier( + points=((panel_w - 3, 15), (panel_w - 8, 20), (panel_w - 12, 18), (panel_w * 2 // 3, 25)), + start_radius=1, end_radius=2, + start_height=0.12, end_height=0.1 + ) + + # Right panel: Road network + road_map = mcrfpy.HeightMap((panel_w, panel_h), fill=0.5) + road_map.add_noise(noise, world_size=(8, 8), mode='fbm', octaves=3, scale=0.2) + road_map.normalize(0.35, 0.7) + + # Main road - relatively straight + road_map.dig_bezier( + points=((5, panel_h // 2), (15, panel_h // 2 - 3), (panel_w - 15, panel_h // 2 + 3), (panel_w - 5, panel_h // 2)), + start_radius=2, end_radius=2, + start_height=0.25, end_height=0.25 + ) + + # North-south crossing road + road_map.dig_bezier( + points=((panel_w // 2, 5), (panel_w // 2 + 5, 15), (panel_w // 2 - 5, 35), (panel_w // 2, panel_h - 5)), + start_radius=2, end_radius=2, + start_height=0.25, end_height=0.25 + ) + + # Winding mountain path + road_map.dig_bezier( + points=((5, 8), (15, 5), (20, 15), (25, 10)), + start_radius=1, end_radius=1, + start_height=0.28, end_height=0.28 + ) + + # Curved path to settlement + road_map.dig_bezier( + points=((panel_w - 5, panel_h - 8), (panel_w - 15, panel_h - 5), (panel_w - 10, panel_h - 15), (panel_w // 2 + 5, panel_h - 10)), + start_radius=1, end_radius=2, + start_height=0.27, end_height=0.26 + ) + + # Apply to grid + for y in range(panel_h): + for x in range(panel_w): + # Left panel: rivers + h = river_map.get((x, y)) + color_layer.set(((x, y)), terrain_with_water(h)) + + # Right panel: roads (use brown for roads) + h2 = road_map.get((x, y)) + if h2 < 0.3: + # Road surface + t = h2 / 0.3 + color = mcrfpy.Color(int(140 - t * 40), int(120 - t * 30), int(80 - t * 20)) + else: + color = terrain_with_water(h2) + color_layer.set(((panel_w + x, y)), color) + + # Divider + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(100, 100, 100)) + + # Labels + labels = [("Rivers (dig_bezier)", 10, 10), ("Roads & Paths", panel_w * CELL_SIZE + 10, 10)] + for text, x, ypos in labels: + label = mcrfpy.Caption(text=text, pos=(x, ypos)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + +# Setup +scene = mcrfpy.Scene("bezier_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_07_heightmap_bezier.png") +print("Screenshot saved: procgen_07_heightmap_bezier.png") diff --git a/docs/cookbook/procgen/08_heightmap_thresholds.py b/docs/cookbook/procgen/08_heightmap_thresholds.py new file mode 100644 index 0000000..bfc6bb5 --- /dev/null +++ b/docs/cookbook/procgen/08_heightmap_thresholds.py @@ -0,0 +1,148 @@ +"""HeightMap Thresholds and ColorLayer Integration Demo + +Demonstrates: threshold, threshold_binary, inverse, count_in_range +Also: ColorLayer.apply_ranges for multi-threshold coloring +Shows terrain classification and visualization techniques. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def run_demo(runtime): + panel_w = GRID_WIDTH // 3 + panel_h = GRID_HEIGHT // 2 + + # Create source terrain + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=42) + source = mcrfpy.HeightMap((panel_w, panel_h), fill=0.0) + source.add_noise(noise, world_size=(10, 10), mode='fbm', octaves=5) + source.add_hill((panel_w // 2, panel_h // 2), 8, 0.3) + source.normalize(0.0, 1.0) + + # Create derived heightmaps + water_mask = source.threshold((0.0, 0.3)) # Returns NEW heightmap with values only in range + land_binary = source.threshold_binary((0.3, 1.0), value=1.0) # Binary mask + inverted = source.inverse() # Inverted values + + # Count cells in ranges for classification stats + water_count = source.count_in_range((0.0, 0.3)) + land_count = source.count_in_range((0.3, 0.7)) + mountain_count = source.count_in_range((0.7, 1.0)) + + # IMPORTANT: Render apply_ranges FIRST since it affects the whole layer + # Panel 6: Using ColorLayer.apply_ranges (bottom-right) + # Create a full-size heightmap and copy source data to correct position + panel6_hmap = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=-1.0) # -1 won't match any range + for y in range(panel_h): + for x in range(panel_w): + h = source.get((x, y)) + panel6_hmap.fill(h, pos=(panel_w * 2 + x, panel_h + y), size=(1, 1)) + + # apply_ranges colors cells based on height ranges + # Cells with -1.0 won't match any range and stay unchanged + color_layer.apply_ranges(panel6_hmap, [ + ((0.0, 0.2), (30, 80, 160)), # Deep water + ((0.2, 0.3), ((60, 120, 180), (120, 160, 140))), # Gradient: shallow to shore + ((0.3, 0.5), (80, 150, 60)), # Lowland + ((0.5, 0.7), ((60, 120, 40), (100, 100, 80))), # Gradient: forest to hills + ((0.7, 0.85), (130, 120, 110)), # Rock + ((0.85, 1.0), ((180, 180, 190), (250, 250, 255))), # Gradient: rock to snow + ]) + + # Now render the other 5 panels (they will overwrite only their regions) + + # Panel 1 (top-left): Original grayscale + for y in range(panel_h): + for x in range(panel_w): + h = source.get((x, y)) + v = int(h * 255) + color_layer.set(((x, y)), mcrfpy.Color(v, v, v)) + + # Panel 2 (top-middle): threshold() - shows only values in range 0.0-0.3 + for y in range(panel_h): + for x in range(panel_w): + h = water_mask.get((x, y)) + if h > 0: + # Values were preserved in 0.0-0.3 range + t = h / 0.3 + color_layer.set(((panel_w + x, y)), mcrfpy.Color( + int(30 + t * 40), int(60 + t * 60), int(150 + t * 50))) + else: + # Outside threshold range - dark + color_layer.set(((panel_w + x, y)), mcrfpy.Color(20, 20, 30)) + + # Panel 3 (top-right): threshold_binary() - land mask + for y in range(panel_h): + for x in range(panel_w): + h = land_binary.get((x, y)) + if h > 0: + color_layer.set(((panel_w * 2 + x, y)), mcrfpy.Color(80, 140, 60)) # Land + else: + color_layer.set(((panel_w * 2 + x, y)), mcrfpy.Color(40, 80, 150)) # Water + + # Panel 4 (bottom-left): inverse() + for y in range(panel_h): + for x in range(panel_w): + h = inverted.get((x, y)) + v = int(h * 255) + color_layer.set(((x, panel_h + y)), mcrfpy.Color(v, int(v * 0.8), int(v * 0.6))) + + # Panel 5 (bottom-middle): Classification using count_in_range results + for y in range(panel_h): + for x in range(panel_w): + h = source.get((x, y)) + if h < 0.3: + color_layer.set(((panel_w + x, panel_h + y)), mcrfpy.Color(50, 100, 180)) # Water + elif h < 0.7: + color_layer.set(((panel_w + x, panel_h + y)), mcrfpy.Color(70, 140, 50)) # Land + else: + color_layer.set(((panel_w + x, panel_h + y)), mcrfpy.Color(140, 130, 120)) # Mountain + + # Labels + labels = [ + ("Original (grayscale)", 5, 5), + ("threshold(0-0.3)", panel_w * CELL_SIZE + 5, 5), + ("threshold_binary(land)", panel_w * 2 * CELL_SIZE + 5, 5), + ("inverse()", 5, panel_h * CELL_SIZE + 5), + (f"Classified (W:{water_count} L:{land_count} M:{mountain_count})", panel_w * CELL_SIZE + 5, panel_h * CELL_SIZE + 5), + ("apply_ranges (biome)", panel_w * 2 * CELL_SIZE + 5, panel_h * CELL_SIZE + 5), + ] + + for text, x, y in labels: + label = mcrfpy.Caption(text=text, pos=(x, y)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + # Grid divider lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(80, 80, 80)) + color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(80, 80, 80)) + for x in range(GRID_WIDTH): + color_layer.set(((x, panel_h - 1)), mcrfpy.Color(80, 80, 80)) + + +# Setup +scene = mcrfpy.Scene("thresholds_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_08_heightmap_thresholds.png") +print("Screenshot saved: procgen_08_heightmap_thresholds.png") diff --git a/docs/cookbook/procgen/10_bsp_dungeon.py b/docs/cookbook/procgen/10_bsp_dungeon.py new file mode 100644 index 0000000..87fcfce --- /dev/null +++ b/docs/cookbook/procgen/10_bsp_dungeon.py @@ -0,0 +1,130 @@ +"""BSP Dungeon Generation Demo + +Demonstrates: BSP, split_recursive, leaves iteration, to_heightmap +Classic roguelike dungeon generation with rooms. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def run_demo(runtime): + # Create BSP tree covering the map + bsp = mcrfpy.BSP(pos=(1, 1), size=(GRID_WIDTH - 2, GRID_HEIGHT - 2)) + + # Split recursively to create rooms + # depth=4 creates up to 16 rooms, min_size ensures rooms aren't too small + bsp.split_recursive(depth=4, min_size=(8, 6), max_ratio=1.5, seed=42) + + # Convert to heightmap for visualization + # shrink=1 leaves 1-tile border for walls + rooms_hmap = bsp.to_heightmap( + size=(GRID_WIDTH, GRID_HEIGHT), + select='leaves', + shrink=1, + value=1.0 + ) + + # Fill background (walls) + color_layer.fill(mcrfpy.Color(40, 35, 45)) + + # Draw rooms + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + if rooms_hmap.get((x, y)) > 0: + color_layer.set(((x, y)), mcrfpy.Color(80, 75, 70)) + + # Add some visual variety to rooms + room_colors = [ + mcrfpy.Color(85, 80, 75), + mcrfpy.Color(75, 70, 65), + mcrfpy.Color(90, 85, 80), + mcrfpy.Color(70, 65, 60), + ] + + for i, leaf in enumerate(bsp.leaves()): + pos = leaf.pos + size = leaf.size + color = room_colors[i % len(room_colors)] + + # Fill room interior (with shrink) + for y in range(pos[1] + 1, pos[1] + size[1] - 1): + for x in range(pos[0] + 1, pos[0] + size[0] - 1): + if 0 <= x < GRID_WIDTH and 0 <= y < GRID_HEIGHT: + color_layer.set(((x, y)), color) + + # Mark room center + cx, cy = leaf.center() + if 0 <= cx < GRID_WIDTH and 0 <= cy < GRID_HEIGHT: + color_layer.set(((cx, cy)), mcrfpy.Color(200, 180, 100)) + + # Simple corridor generation: connect adjacent rooms + # Using adjacency graph + adjacency = bsp.adjacency + connected = set() + + for leaf_idx in range(len(bsp)): + leaf = bsp.get_leaf(leaf_idx) + cx1, cy1 = leaf.center() + + for neighbor_idx in adjacency[leaf_idx]: + if (min(leaf_idx, neighbor_idx), max(leaf_idx, neighbor_idx)) in connected: + continue + connected.add((min(leaf_idx, neighbor_idx), max(leaf_idx, neighbor_idx))) + + neighbor = bsp.get_leaf(neighbor_idx) + cx2, cy2 = neighbor.center() + + # Draw L-shaped corridor + # Horizontal first, then vertical + x1, x2 = min(cx1, cx2), max(cx1, cx2) + for x in range(x1, x2 + 1): + if 0 <= x < GRID_WIDTH and 0 <= cy1 < GRID_HEIGHT: + color_layer.set(((x, cy1)), mcrfpy.Color(100, 95, 90)) + + y1, y2 = min(cy1, cy2), max(cy1, cy2) + for y in range(y1, y2 + 1): + if 0 <= cx2 < GRID_WIDTH and 0 <= y < GRID_HEIGHT: + color_layer.set(((cx2, y)), mcrfpy.Color(100, 95, 90)) + + # Draw outer border + for x in range(GRID_WIDTH): + color_layer.set(((x, 0)), mcrfpy.Color(60, 50, 70)) + color_layer.set(((x, GRID_HEIGHT - 1)), mcrfpy.Color(60, 50, 70)) + for y in range(GRID_HEIGHT): + color_layer.set(((0, y)), mcrfpy.Color(60, 50, 70)) + color_layer.set(((GRID_WIDTH - 1, y)), mcrfpy.Color(60, 50, 70)) + + # Stats + stats = mcrfpy.Caption( + text=f"BSP Dungeon: {len(bsp)} rooms, depth=4, seed=42", + pos=(10, 10) + ) + stats.fill_color = mcrfpy.Color(255, 255, 255) + stats.outline = 1 + stats.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(stats) + + +# Setup +scene = mcrfpy.Scene("bsp_dungeon_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_10_bsp_dungeon.png") +print("Screenshot saved: procgen_10_bsp_dungeon.png") diff --git a/docs/cookbook/procgen/11_bsp_traversal.py b/docs/cookbook/procgen/11_bsp_traversal.py new file mode 100644 index 0000000..82dc845 --- /dev/null +++ b/docs/cookbook/procgen/11_bsp_traversal.py @@ -0,0 +1,178 @@ +"""BSP Traversal Orders Demo + +Demonstrates: traverse() with different Traversal orders +Shows how traversal order affects leaf enumeration. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def run_demo(runtime): + panel_w = GRID_WIDTH // 3 + panel_h = GRID_HEIGHT // 2 + + traversal_orders = [ + (mcrfpy.Traversal.PRE_ORDER, "PRE_ORDER", "Root first, then children"), + (mcrfpy.Traversal.IN_ORDER, "IN_ORDER", "Left, node, right"), + (mcrfpy.Traversal.POST_ORDER, "POST_ORDER", "Children before parent"), + (mcrfpy.Traversal.LEVEL_ORDER, "LEVEL_ORDER", "Breadth-first by level"), + (mcrfpy.Traversal.INVERTED_LEVEL_ORDER, "INV_LEVEL", "Deepest levels first"), + ] + + panels = [ + (0, 0), (panel_w, 0), (panel_w * 2, 0), + (0, panel_h), (panel_w, panel_h), (panel_w * 2, panel_h) + ] + + # Distinct color palette for 8+ leaves + leaf_colors = [ + mcrfpy.Color(220, 60, 60), # Red + mcrfpy.Color(60, 180, 60), # Green + mcrfpy.Color(60, 100, 220), # Blue + mcrfpy.Color(220, 180, 40), # Yellow + mcrfpy.Color(180, 60, 180), # Magenta + mcrfpy.Color(60, 200, 200), # Cyan + mcrfpy.Color(220, 120, 60), # Orange + mcrfpy.Color(160, 100, 200), # Purple + mcrfpy.Color(100, 200, 120), # Mint + mcrfpy.Color(200, 100, 140), # Pink + ] + + for panel_idx, (order, name, desc) in enumerate(traversal_orders): + if panel_idx >= 6: + break + + ox, oy = panels[panel_idx] + + # Create BSP for this panel + bsp = mcrfpy.BSP(pos=(ox + 2, oy + 4), size=(panel_w - 4, panel_h - 6)) + bsp.split_recursive(depth=3, min_size=(5, 4), seed=42) + + # Fill panel background (dark gray = walls) + color_layer.fill_rect((ox, oy), (panel_w, panel_h), mcrfpy.Color(40, 35, 45)) + + # Traverse and color ONLY LEAVES by their position in traversal + leaf_idx = 0 + for node in bsp.traverse(order): + if not node.is_leaf: + continue # Skip branch nodes + + color = leaf_colors[leaf_idx % len(leaf_colors)] + pos = node.pos + size = node.size + + # Shrink by 1 to show walls between rooms + for y in range(pos[1] + 1, pos[1] + size[1] - 1): + for x in range(pos[0] + 1, pos[0] + size[0] - 1): + if 0 <= x < GRID_WIDTH and 0 <= y < GRID_HEIGHT: + color_layer.set(((x, y)), color) + + # Draw leaf index in center + cx, cy = node.center() + # Draw index as a darker spot + if 0 <= cx < GRID_WIDTH and 0 <= cy < GRID_HEIGHT: + dark = mcrfpy.Color(color.r // 2, color.g // 2, color.b // 2) + color_layer.set(((cx, cy)), dark) + if cx + 1 < GRID_WIDTH: + color_layer.set(((cx + 1, cy)), dark) + + leaf_idx += 1 + + # Add labels + label = mcrfpy.Caption(text=f"{name}", pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 5)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + desc_label = mcrfpy.Caption(text=f"{desc} ({leaf_idx} leaves)", pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 22)) + desc_label.fill_color = mcrfpy.Color(200, 200, 200) + desc_label.outline = 1 + desc_label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(desc_label) + + # Panel 6: Show tree depth levels (branch AND leaf nodes) + ox, oy = panels[5] + bsp = mcrfpy.BSP(pos=(ox + 2, oy + 4), size=(panel_w - 4, panel_h - 6)) + bsp.split_recursive(depth=3, min_size=(5, 4), seed=42) + + color_layer.fill_rect((ox, oy), (panel_w, panel_h), mcrfpy.Color(40, 35, 45)) + + # Draw by level - deepest first so leaves are on top + level_colors = [ + mcrfpy.Color(60, 40, 40), # Level 0 (root) - dark + mcrfpy.Color(80, 60, 50), # Level 1 + mcrfpy.Color(100, 80, 60), # Level 2 + mcrfpy.Color(140, 120, 80), # Level 3 (leaves usually) + ] + + # Use INVERTED_LEVEL_ORDER so leaves are drawn last + for node in bsp.traverse(mcrfpy.Traversal.INVERTED_LEVEL_ORDER): + level = node.level + color = level_colors[min(level, len(level_colors) - 1)] + + # Make leaves brighter + if node.is_leaf: + color = mcrfpy.Color( + min(255, color.r + 80), + min(255, color.g + 80), + min(255, color.b + 60) + ) + + pos = node.pos + size = node.size + + for y in range(pos[1], pos[1] + size[1]): + for x in range(pos[0], pos[0] + size[0]): + if 0 <= x < GRID_WIDTH and 0 <= y < GRID_HEIGHT: + # Draw border + if x == pos[0] or x == pos[0] + size[0] - 1 or \ + y == pos[1] or y == pos[1] + size[1] - 1: + border = mcrfpy.Color(20, 20, 30) + color_layer.set(((x, y)), border) + else: + color_layer.set(((x, y)), color) + + label = mcrfpy.Caption(text="BY LEVEL (depth)", pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 5)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + desc_label = mcrfpy.Caption(text="Darker=root, Bright=leaves", pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 22)) + desc_label.fill_color = mcrfpy.Color(200, 200, 200) + desc_label.outline = 1 + desc_label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(desc_label) + + # Grid lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(60, 60, 60)) + color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(60, 60, 60)) + for x in range(GRID_WIDTH): + color_layer.set(((x, panel_h - 1)), mcrfpy.Color(60, 60, 60)) + + +# Setup +scene = mcrfpy.Scene("bsp_traversal_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_11_bsp_traversal.png") +print("Screenshot saved: procgen_11_bsp_traversal.png") diff --git a/docs/cookbook/procgen/12_bsp_adjacency.py b/docs/cookbook/procgen/12_bsp_adjacency.py new file mode 100644 index 0000000..85810d6 --- /dev/null +++ b/docs/cookbook/procgen/12_bsp_adjacency.py @@ -0,0 +1,160 @@ +"""BSP Adjacency Graph Demo + +Demonstrates: adjacency property, get_leaf, adjacent_tiles +Shows room connectivity for corridor generation. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def run_demo(runtime): + # Create dungeon BSP + bsp = mcrfpy.BSP(pos=(2, 2), size=(GRID_WIDTH - 4, GRID_HEIGHT - 4)) + bsp.split_recursive(depth=3, min_size=(10, 8), max_ratio=1.4, seed=42) + + # Fill with wall color + color_layer.fill(mcrfpy.Color(50, 45, 55)) + + # Generate distinct colors for each room + num_rooms = len(bsp) + room_colors = [] + for i in range(num_rooms): + hue = (i * 137.5) % 360 # Golden angle for good distribution + # HSV to RGB (simplified, saturation=0.6, value=0.7) + h = hue / 60 + c = 0.42 # 0.6 * 0.7 + x = c * (1 - abs(h % 2 - 1)) + m = 0.28 # 0.7 - c + + if h < 1: r, g, b = c, x, 0 + elif h < 2: r, g, b = x, c, 0 + elif h < 3: r, g, b = 0, c, x + elif h < 4: r, g, b = 0, x, c + elif h < 5: r, g, b = x, 0, c + else: r, g, b = c, 0, x + + room_colors.append(mcrfpy.Color( + int((r + m) * 255), + int((g + m) * 255), + int((b + m) * 255) + )) + + # Draw rooms with unique colors + for i, leaf in enumerate(bsp.leaves()): + pos = leaf.pos + size = leaf.size + color = room_colors[i] + + for y in range(pos[1] + 1, pos[1] + size[1] - 1): + for x in range(pos[0] + 1, pos[0] + size[0] - 1): + color_layer.set(((x, y)), color) + + # Room label + cx, cy = leaf.center() + label = mcrfpy.Caption(text=str(i), pos=(cx * CELL_SIZE - 4, cy * CELL_SIZE - 8)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + # Draw corridors using adjacency graph + adjacency = bsp.adjacency + connected = set() + + corridor_color = mcrfpy.Color(100, 95, 90) + door_color = mcrfpy.Color(180, 140, 80) + + for leaf_idx in range(num_rooms): + leaf = bsp.get_leaf(leaf_idx) + + # Get adjacent_tiles for this leaf + adj_tiles = leaf.adjacent_tiles + + for neighbor_idx in adjacency[leaf_idx]: + pair = (min(leaf_idx, neighbor_idx), max(leaf_idx, neighbor_idx)) + if pair in connected: + continue + connected.add(pair) + + neighbor = bsp.get_leaf(neighbor_idx) + + # Find shared wall tiles + if neighbor_idx in adj_tiles: + wall_tiles = adj_tiles[neighbor_idx] + if len(wall_tiles) > 0: + # Pick middle tile for door + mid_tile = wall_tiles[len(wall_tiles) // 2] + dx, dy = int(mid_tile.x), int(mid_tile.y) + + # Draw door + color_layer.set(((dx, dy)), door_color) + + # Simple corridor: connect room centers through door + cx1, cy1 = leaf.center() + cx2, cy2 = neighbor.center() + + # Path from room 1 to door + for x in range(min(cx1, dx), max(cx1, dx) + 1): + color_layer.set(((x, cy1)), corridor_color) + for y in range(min(cy1, dy), max(cy1, dy) + 1): + color_layer.set(((dx, y)), corridor_color) + + # Path from door to room 2 + for x in range(min(dx, cx2), max(dx, cx2) + 1): + color_layer.set(((x, dy)), corridor_color) + for y in range(min(dy, cy2), max(dy, cy2) + 1): + color_layer.set(((cx2, y)), corridor_color) + else: + # Fallback: L-shaped corridor + cx1, cy1 = leaf.center() + cx2, cy2 = neighbor.center() + + for x in range(min(cx1, cx2), max(cx1, cx2) + 1): + color_layer.set(((x, cy1)), corridor_color) + for y in range(min(cy1, cy2), max(cy1, cy2) + 1): + color_layer.set(((cx2, y)), corridor_color) + + # Title and stats + title = mcrfpy.Caption( + text=f"BSP Adjacency: {num_rooms} rooms, {len(connected)} connections", + pos=(10, 10) + ) + title.fill_color = mcrfpy.Color(255, 255, 255) + title.outline = 1 + title.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(title) + + # Legend + legend = mcrfpy.Caption( + text="Numbers = room index, Gold = doors, Brown = corridors", + pos=(10, GRID_HEIGHT * CELL_SIZE - 25) + ) + legend.fill_color = mcrfpy.Color(200, 200, 200) + legend.outline = 1 + legend.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(legend) + + +# Setup +scene = mcrfpy.Scene("bsp_adjacency_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_12_bsp_adjacency.png") +print("Screenshot saved: procgen_12_bsp_adjacency.png") diff --git a/docs/cookbook/procgen/13_bsp_shrink.py b/docs/cookbook/procgen/13_bsp_shrink.py new file mode 100644 index 0000000..5bf0dcf --- /dev/null +++ b/docs/cookbook/procgen/13_bsp_shrink.py @@ -0,0 +1,178 @@ +"""BSP Shrink Parameter Demo + +Demonstrates: to_heightmap with different shrink values +Shows room padding for walls and varied room sizes. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def run_demo(runtime): + panel_w = GRID_WIDTH // 3 + panel_h = GRID_HEIGHT // 2 + + # Use reasonable shrink values relative to room sizes + shrink_values = [ + (0, "shrink=0", "Rooms fill BSP bounds"), + (1, "shrink=1", "Standard 1-tile walls"), + (2, "shrink=2", "Thick fortress walls"), + (3, "shrink=3", "Wide hallway spacing"), + (-1, "Random shrink", "Per-room variation"), + (-2, "Gradient", "Shrink by leaf index"), + ] + + panels = [ + (0, 0), (panel_w, 0), (panel_w * 2, 0), + (0, panel_h), (panel_w, panel_h), (panel_w * 2, panel_h) + ] + + for panel_idx, (shrink, title, desc) in enumerate(shrink_values): + ox, oy = panels[panel_idx] + + # Create BSP - use depth=2 for larger rooms, bigger min_size + bsp = mcrfpy.BSP(pos=(ox + 1, oy + 3), size=(panel_w - 2, panel_h - 4)) + bsp.split_recursive(depth=2, min_size=(8, 6), seed=42) + + # Fill panel background (stone wall) + color_layer.fill_rect((ox, oy), (panel_w, panel_h), mcrfpy.Color(50, 45, 55)) + + if shrink >= 0: + # Standard shrink value using to_heightmap + rooms_hmap = bsp.to_heightmap( + size=(GRID_WIDTH, GRID_HEIGHT), + select='leaves', + shrink=shrink, + value=1.0 + ) + + # Draw floors with color based on shrink level + floor_colors = [ + mcrfpy.Color(140, 120, 100), # shrink=0: tan/full + mcrfpy.Color(110, 100, 90), # shrink=1: gray-brown + mcrfpy.Color(90, 95, 100), # shrink=2: blue-gray + mcrfpy.Color(80, 90, 110), # shrink=3: slate + ] + floor_color = floor_colors[min(shrink, len(floor_colors) - 1)] + + for y in range(oy, oy + panel_h): + for x in range(ox, ox + panel_w): + if rooms_hmap.get((x, y)) > 0: + # Add subtle tile pattern + var = ((x + y) % 2) * 8 + c = mcrfpy.Color( + floor_color.r + var, + floor_color.g + var, + floor_color.b + var + ) + color_layer.set(((x, y)), c) + elif shrink == -1: + # Random shrink per room + import random + rand = random.Random(42) + for leaf in bsp.leaves(): + room_shrink = rand.randint(0, 3) + pos = leaf.pos + size = leaf.size + + x1 = pos[0] + room_shrink + y1 = pos[1] + room_shrink + x2 = pos[0] + size[0] - room_shrink + y2 = pos[1] + size[1] - room_shrink + + if x2 > x1 and y2 > y1: + colors = [ + mcrfpy.Color(160, 130, 100), # Full + mcrfpy.Color(130, 120, 100), + mcrfpy.Color(100, 110, 110), + mcrfpy.Color(80, 90, 100), # Most shrunk + ] + floor_color = colors[room_shrink] + + for y in range(y1, y2): + for x in range(x1, x2): + if ox <= x < ox + panel_w and oy <= y < oy + panel_h: + var = ((x + y) % 2) * 6 + c = mcrfpy.Color( + floor_color.r + var, + floor_color.g + var, + floor_color.b + var + ) + color_layer.set(((x, y)), c) + else: + # Gradient shrink by leaf index + leaves = list(bsp.leaves()) + for i, leaf in enumerate(leaves): + # Shrink increases with leaf index + room_shrink = min(3, i) + pos = leaf.pos + size = leaf.size + + x1 = pos[0] + room_shrink + y1 = pos[1] + room_shrink + x2 = pos[0] + size[0] - room_shrink + y2 = pos[1] + size[1] - room_shrink + + if x2 > x1 and y2 > y1: + # Color gradient: warm to cool as shrink increases + t = i / max(1, len(leaves) - 1) + floor_color = mcrfpy.Color( + int(180 - t * 80), + int(120 + t * 20), + int(80 + t * 60) + ) + + for y in range(y1, y2): + for x in range(x1, x2): + if ox <= x < ox + panel_w and oy <= y < oy + panel_h: + var = ((x + y) % 2) * 6 + c = mcrfpy.Color( + floor_color.r + var, + floor_color.g + var - 2, + floor_color.b + var + ) + color_layer.set(((x, y)), c) + + # Add labels + label = mcrfpy.Caption(text=title, pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 5)) + label.fill_color = mcrfpy.Color(255, 255, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + desc_label = mcrfpy.Caption(text=desc, pos=(ox * CELL_SIZE + 5, oy * CELL_SIZE + 22)) + desc_label.fill_color = mcrfpy.Color(200, 200, 200) + desc_label.outline = 1 + desc_label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(desc_label) + + # Grid lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(30, 30, 35)) + color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(30, 30, 35)) + for x in range(GRID_WIDTH): + color_layer.set(((x, panel_h - 1)), mcrfpy.Color(30, 30, 35)) + + +# Setup +scene = mcrfpy.Scene("bsp_shrink_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_13_bsp_shrink.png") +print("Screenshot saved: procgen_13_bsp_shrink.png") diff --git a/docs/cookbook/procgen/14_bsp_manual_split.py b/docs/cookbook/procgen/14_bsp_manual_split.py new file mode 100644 index 0000000..91998aa --- /dev/null +++ b/docs/cookbook/procgen/14_bsp_manual_split.py @@ -0,0 +1,150 @@ +"""BSP Manual Split Demo + +Demonstrates: split_once for controlled layouts +Shows handcrafted room placement with manual BSP control. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def run_demo(runtime): + # Fill background + color_layer.fill(mcrfpy.Color(50, 45, 55)) + + # Create main BSP covering most of the map + bsp = mcrfpy.BSP(pos=(2, 2), size=(GRID_WIDTH - 4, GRID_HEIGHT - 4)) + + # Manual split strategy for a temple-like layout: + # 1. Split horizontally to create upper/lower sections + # 2. Upper section: main hall (large) + side rooms + # 3. Lower section: entrance + storage areas + + # First split: horizontal, creating top (sanctuary) and bottom (entrance) areas + # Split at about 60% height + split_y = 2 + int((GRID_HEIGHT - 4) * 0.6) + bsp.split_once(horizontal=True, position=split_y) + + # Now manually color the structure + root = bsp.root + + # Get the two main regions + upper = root.left # Sanctuary area + lower = root.right # Entrance area + + # Color the sanctuary (upper area) - golden temple floor + if upper: + pos, size = upper.pos, upper.size + for y in range(pos[1] + 1, pos[1] + size[1] - 1): + for x in range(pos[0] + 1, pos[0] + size[0] - 1): + # Create a pattern + if (x + y) % 4 == 0: + color_layer.set(((x, y)), mcrfpy.Color(180, 150, 80)) + else: + color_layer.set(((x, y)), mcrfpy.Color(160, 130, 70)) + + # Add altar in center of sanctuary + cx, cy = upper.center() + for dy in range(-2, 3): + for dx in range(-3, 4): + nx, ny = cx + dx, cy + dy + if 0 <= nx < GRID_WIDTH and 0 <= ny < GRID_HEIGHT: + if abs(dx) <= 1 and abs(dy) <= 1: + color_layer.set(((nx, ny)), mcrfpy.Color(200, 180, 100)) # Altar + else: + color_layer.set(((nx, ny)), mcrfpy.Color(140, 100, 60)) # Altar base + + # Color the entrance (lower area) - stone floor + if lower: + pos, size = lower.pos, lower.size + for y in range(pos[1] + 1, pos[1] + size[1] - 1): + for x in range(pos[0] + 1, pos[0] + size[0] - 1): + base = 80 + ((x * 3 + y * 7) % 20) + color_layer.set(((x, y)), mcrfpy.Color(base, base - 5, base - 10)) + + # Add entrance path + cx = pos[0] + size[0] // 2 + for y in range(pos[1] + size[1] - 1, pos[1], -1): + for dx in range(-2, 3): + nx = cx + dx + if pos[0] < nx < pos[0] + size[0] - 1: + color_layer.set(((nx, y)), mcrfpy.Color(100, 95, 85)) + + # Add pillars along the sides + if upper: + pos, size = upper.pos, upper.size + for y in range(pos[1] + 3, pos[1] + size[1] - 3, 4): + # Left pillars + color_layer.set(((pos[0] + 3, y)), mcrfpy.Color(120, 110, 100)) + color_layer.set(((pos[0] + 3, y + 1)), mcrfpy.Color(120, 110, 100)) + # Right pillars + color_layer.set(((pos[0] + size[0] - 4, y)), mcrfpy.Color(120, 110, 100)) + color_layer.set(((pos[0] + size[0] - 4, y + 1)), mcrfpy.Color(120, 110, 100)) + + # Add side chambers using manual rectangles + # Left chamber + chamber_w, chamber_h = 8, 6 + for y in range(10, 10 + chamber_h): + for x in range(4, 4 + chamber_w): + if x == 4 or x == 4 + chamber_w - 1 or y == 10 or y == 10 + chamber_h - 1: + continue # Skip border (walls) + color_layer.set(((x, y)), mcrfpy.Color(100, 80, 90)) # Purple-ish storage + + # Right chamber + for y in range(10, 10 + chamber_h): + for x in range(GRID_WIDTH - 4 - chamber_w, GRID_WIDTH - 4): + if x == GRID_WIDTH - 4 - chamber_w or x == GRID_WIDTH - 5 or y == 10 or y == 10 + chamber_h - 1: + continue + color_layer.set(((x, y)), mcrfpy.Color(80, 100, 90)) # Green-ish treasury + + # Connect chambers to main hall + hall_y = 12 + for x in range(4 + chamber_w, 15): + color_layer.set(((x, hall_y)), mcrfpy.Color(90, 85, 80)) + for x in range(GRID_WIDTH - 15, GRID_WIDTH - 4 - chamber_w): + color_layer.set(((x, hall_y)), mcrfpy.Color(90, 85, 80)) + + # Title + title = mcrfpy.Caption(text="BSP split_once: Temple Layout", pos=(10, 10)) + title.fill_color = mcrfpy.Color(255, 255, 255) + title.outline = 1 + title.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(title) + + # Labels for areas + labels = [ + ("SANCTUARY", GRID_WIDTH // 2 * CELL_SIZE - 40, 80), + ("ENTRANCE", GRID_WIDTH // 2 * CELL_SIZE - 35, split_y * CELL_SIZE + 30), + ("Storage", 50, 180), + ("Treasury", (GRID_WIDTH - 10) * CELL_SIZE - 30, 180), + ] + for text, x, y in labels: + lbl = mcrfpy.Caption(text=text, pos=(x, y)) + lbl.fill_color = mcrfpy.Color(200, 200, 200) + lbl.outline = 1 + lbl.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(lbl) + + +# Setup +scene = mcrfpy.Scene("bsp_manual_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_14_bsp_manual_split.png") +print("Screenshot saved: procgen_14_bsp_manual_split.png") diff --git a/docs/cookbook/procgen/20_noise_algorithms.py b/docs/cookbook/procgen/20_noise_algorithms.py new file mode 100644 index 0000000..0ac32ef --- /dev/null +++ b/docs/cookbook/procgen/20_noise_algorithms.py @@ -0,0 +1,125 @@ +"""NoiseSource Algorithms Demo + +Demonstrates: simplex, perlin, wavelet noise algorithms +Shows visual differences between noise types. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def value_to_terrain(h): + """Convert noise value (-1 to 1) to terrain color.""" + # Normalize from -1..1 to 0..1 + h = (h + 1) / 2 + h = max(0.0, min(1.0, h)) + + if h < 0.3: + t = h / 0.3 + return mcrfpy.Color(int(30 + t * 40), int(60 + t * 60), int(140 + t * 40)) + elif h < 0.45: + t = (h - 0.3) / 0.15 + return mcrfpy.Color(int(70 + t * 120), int(120 + t * 60), int(100 - t * 60)) + elif h < 0.6: + t = (h - 0.45) / 0.15 + return mcrfpy.Color(int(60 + t * 20), int(130 + t * 20), int(50 + t * 10)) + elif h < 0.75: + t = (h - 0.6) / 0.15 + return mcrfpy.Color(int(50 + t * 50), int(110 - t * 20), int(40 + t * 20)) + elif h < 0.88: + t = (h - 0.75) / 0.13 + return mcrfpy.Color(int(100 + t * 40), int(95 + t * 35), int(80 + t * 40)) + else: + t = (h - 0.88) / 0.12 + return mcrfpy.Color(int(180 + t * 70), int(180 + t * 70), int(190 + t * 60)) + +def run_demo(runtime): + panel_w = GRID_WIDTH // 3 + panel_h = GRID_HEIGHT // 2 + + algorithms = [ + ('simplex', "SIMPLEX", "Fast, no visible artifacts"), + ('perlin', "PERLIN", "Classic, slight grid bias"), + ('wavelet', "WAVELET", "Smooth, no tiling"), + ] + + # Top row: FBM (natural terrain) + # Bottom row: Raw noise (single octave) + for col, (algo, name, desc) in enumerate(algorithms): + ox = col * panel_w + + # Create noise source + noise = mcrfpy.NoiseSource( + dimensions=2, + algorithm=algo, + hurst=0.5, + lacunarity=2.0, + seed=42 + ) + + # Top panel: FBM + for y in range(panel_h): + for x in range(panel_w): + # Sample at world coordinates + wx = x * 0.15 + wy = y * 0.15 + val = noise.fbm((wx, wy), octaves=5) + color_layer.set(((ox + x, y)), value_to_terrain(val)) + + # Bottom panel: Raw (flat) + for y in range(panel_h): + for x in range(panel_w): + wx = x * 0.15 + wy = y * 0.15 + val = noise.get((wx, wy)) + color_layer.set(((ox + x, panel_h + y)), value_to_terrain(val)) + + # Labels + top_label = mcrfpy.Caption(text=f"{name} (FBM)", pos=(ox * CELL_SIZE + 5, 5)) + top_label.fill_color = mcrfpy.Color(255, 255, 255) + top_label.outline = 1 + top_label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(top_label) + + bottom_label = mcrfpy.Caption(text=f"{name} (raw)", pos=(ox * CELL_SIZE + 5, panel_h * CELL_SIZE + 5)) + bottom_label.fill_color = mcrfpy.Color(255, 255, 255) + bottom_label.outline = 1 + bottom_label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(bottom_label) + + desc_label = mcrfpy.Caption(text=desc, pos=(ox * CELL_SIZE + 5, 22)) + desc_label.fill_color = mcrfpy.Color(200, 200, 200) + desc_label.outline = 1 + desc_label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(desc_label) + + # Grid lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(80, 80, 80)) + color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(80, 80, 80)) + for x in range(GRID_WIDTH): + color_layer.set(((x, panel_h - 1)), mcrfpy.Color(80, 80, 80)) + + +# Setup +scene = mcrfpy.Scene("noise_algo_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_20_noise_algorithms.png") +print("Screenshot saved: procgen_20_noise_algorithms.png") diff --git a/docs/cookbook/procgen/21_noise_parameters.py b/docs/cookbook/procgen/21_noise_parameters.py new file mode 100644 index 0000000..2c78c1c --- /dev/null +++ b/docs/cookbook/procgen/21_noise_parameters.py @@ -0,0 +1,115 @@ +"""NoiseSource Parameters Demo + +Demonstrates: hurst (roughness), lacunarity (frequency scaling), octaves +Shows how parameters affect terrain character. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def value_to_gray(h): + """Simple grayscale visualization.""" + h = (h + 1) / 2 # -1..1 to 0..1 + h = max(0.0, min(1.0, h)) + v = int(h * 255) + return mcrfpy.Color(v, v, v) + +def run_demo(runtime): + panel_w = GRID_WIDTH // 3 + panel_h = GRID_HEIGHT // 3 + + # 3x3 grid showing parameter variations + # Rows: different hurst values (roughness) + # Cols: different lacunarity values + + hurst_values = [0.2, 0.5, 0.8] + lacunarity_values = [1.5, 2.0, 3.0] + + for row, hurst in enumerate(hurst_values): + for col, lacunarity in enumerate(lacunarity_values): + ox = col * panel_w + oy = row * panel_h + + # Create noise with these parameters + noise = mcrfpy.NoiseSource( + dimensions=2, + algorithm='simplex', + hurst=hurst, + lacunarity=lacunarity, + seed=42 + ) + + # Sample using heightmap for efficiency + hmap = noise.sample( + size=(panel_w, panel_h), + world_origin=(0, 0), + world_size=(10, 10), + mode='fbm', + octaves=6 + ) + + # Apply to color layer + for y in range(panel_h): + for x in range(panel_w): + h = hmap.get((x, y)) + color_layer.set(((ox + x, oy + y)), value_to_gray(h)) + + # Parameter label + label = mcrfpy.Caption( + text=f"H={hurst} L={lacunarity}", + pos=(ox * CELL_SIZE + 3, oy * CELL_SIZE + 3) + ) + label.fill_color = mcrfpy.Color(255, 255, 0) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + # Row/Column labels + row_labels = ["Low Hurst (rough)", "Mid Hurst (natural)", "High Hurst (smooth)"] + for row, text in enumerate(row_labels): + label = mcrfpy.Caption(text=text, pos=(5, row * panel_h * CELL_SIZE + panel_h * CELL_SIZE - 20)) + label.fill_color = mcrfpy.Color(255, 200, 100) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + col_labels = ["Low Lacunarity", "Standard (2.0)", "High Lacunarity"] + for col, text in enumerate(col_labels): + label = mcrfpy.Caption(text=text, pos=(col * panel_w * CELL_SIZE + 5, GRID_HEIGHT * CELL_SIZE - 20)) + label.fill_color = mcrfpy.Color(100, 200, 255) + label.outline = 1 + label.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(label) + + # Grid lines + for y in range(GRID_HEIGHT): + color_layer.set(((panel_w - 1, y)), mcrfpy.Color(100, 100, 100)) + color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(100, 100, 100)) + for x in range(GRID_WIDTH): + color_layer.set(((x, panel_h - 1)), mcrfpy.Color(100, 100, 100)) + color_layer.set(((x, panel_h * 2 - 1)), mcrfpy.Color(100, 100, 100)) + + +# Setup +scene = mcrfpy.Scene("noise_params_demo") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_21_noise_parameters.png") +print("Screenshot saved: procgen_21_noise_parameters.png") diff --git a/docs/cookbook/procgen/30_advanced_cave_dungeon.py b/docs/cookbook/procgen/30_advanced_cave_dungeon.py new file mode 100644 index 0000000..8d3a03e --- /dev/null +++ b/docs/cookbook/procgen/30_advanced_cave_dungeon.py @@ -0,0 +1,163 @@ +"""Advanced: Cave-Carved Dungeon + +Combines: BSP (room structure) + Noise (organic cave walls) + Erosion +Creates a dungeon where rooms have been carved from natural cave formations. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def run_demo(runtime): + # Step 1: Create base cave system using noise + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=42) + + cave_map = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + cave_map.add_noise(noise, world_size=(12, 10), mode='fbm', octaves=4) + cave_map.normalize(0.0, 1.0) + + # Step 2: Create BSP rooms + bsp = mcrfpy.BSP(pos=(3, 3), size=(GRID_WIDTH - 6, GRID_HEIGHT - 6)) + bsp.split_recursive(depth=3, min_size=(10, 8), max_ratio=1.5, seed=42) + + rooms_hmap = bsp.to_heightmap( + size=(GRID_WIDTH, GRID_HEIGHT), + select='leaves', + shrink=2, + value=1.0 + ) + + # Step 3: Combine - rooms carve into cave, cave affects walls + combined = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + combined.copy_from(cave_map) + + # Scale cave values to mid-range so rooms stand out + combined.scale(0.5) + combined.add_constant(0.2) + + # Add room interiors (rooms become high values) + combined.max(rooms_hmap) + + # Step 4: Apply GENTLE erosion for organic edges + # Use fewer drops and lower erosion rate + combined.rain_erosion(drops=100, erosion=0.02, sedimentation=0.01, seed=42) + + # Re-normalize to ensure we use the full value range + combined.normalize(0.0, 1.0) + + # Step 5: Create corridor connections + adjacency = bsp.adjacency + connected = set() + + corridor_map = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + + for leaf_idx in range(len(bsp)): + leaf = bsp.get_leaf(leaf_idx) + cx1, cy1 = leaf.center() + + for neighbor_idx in adjacency[leaf_idx]: + pair = (min(leaf_idx, neighbor_idx), max(leaf_idx, neighbor_idx)) + if pair in connected: + continue + connected.add(pair) + + neighbor = bsp.get_leaf(neighbor_idx) + cx2, cy2 = neighbor.center() + + # Draw corridor using bezier for organic feel + mid_x = (cx1 + cx2) // 2 + ((leaf_idx * 3) % 5 - 2) + mid_y = (cy1 + cy2) // 2 + ((neighbor_idx * 7) % 5 - 2) + + corridor_map.dig_bezier( + points=((cx1, cy1), (mid_x, cy1), (mid_x, cy2), (cx2, cy2)), + start_radius=1.5, end_radius=1.5, + start_height=0.0, end_height=0.0 + ) + + # Add corridors - dig_bezier creates low values where corridors are + # We want high values there, so invert the corridor map logic + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + corr_val = corridor_map.get((x, y)) + if corr_val < 0.5: # Corridor was dug here + current = combined.get((x, y)) + combined.fill(max(current, 0.7), pos=(x, y), size=(1, 1)) + + # Step 6: Render with cave aesthetics + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + h = combined.get((x, y)) + + if h < 0.30: + # Solid rock/wall - darker + base = 30 + int(cave_map.get((x, y)) * 20) + color_layer.set(((x, y)), mcrfpy.Color(base + 10, base + 5, base + 15)) + elif h < 0.40: + # Cave wall edge (rough transition) + t = (h - 0.30) / 0.10 + base = int(40 + t * 15) + color_layer.set(((x, y)), mcrfpy.Color(base + 10, base + 5, base + 15)) + elif h < 0.55: + # Cave floor (natural stone) + t = (h - 0.40) / 0.15 + base = 65 + int(t * 20) + var = ((x * 7 + y * 11) % 10) + color_layer.set(((x, y)), mcrfpy.Color(base + var, base - 5 + var, base - 10)) + elif h < 0.70: + # Corridor/worked passage + base = 85 + ((x + y) % 2) * 5 + color_layer.set(((x, y)), mcrfpy.Color(base, base - 3, base - 6)) + else: + # Room floor (finely worked stone) + base = 105 + ((x + y) % 2) * 8 + color_layer.set(((x, y)), mcrfpy.Color(base, base - 8, base - 12)) + + # Mark room centers with special tile + for leaf in bsp.leaves(): + cx, cy = leaf.center() + if 0 <= cx < GRID_WIDTH and 0 <= cy < GRID_HEIGHT: + color_layer.set(((cx, cy)), mcrfpy.Color(160, 140, 120)) + # Cross pattern + for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]: + nx, ny = cx + dx, cy + dy + if 0 <= nx < GRID_WIDTH and 0 <= ny < GRID_HEIGHT: + color_layer.set(((nx, ny)), mcrfpy.Color(140, 125, 105)) + + # Outer border + for x in range(GRID_WIDTH): + color_layer.set(((x, 0)), mcrfpy.Color(20, 15, 25)) + color_layer.set(((x, GRID_HEIGHT - 1)), mcrfpy.Color(20, 15, 25)) + for y in range(GRID_HEIGHT): + color_layer.set(((0, y)), mcrfpy.Color(20, 15, 25)) + color_layer.set(((GRID_WIDTH - 1, y)), mcrfpy.Color(20, 15, 25)) + + # Title + title = mcrfpy.Caption(text="Cave-Carved Dungeon: BSP + Noise + Erosion", pos=(10, 10)) + title.fill_color = mcrfpy.Color(255, 255, 255) + title.outline = 1 + title.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(title) + + +# Setup +scene = mcrfpy.Scene("cave_dungeon") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_30_advanced_cave_dungeon.png") +print("Screenshot saved: procgen_30_advanced_cave_dungeon.png") diff --git a/docs/cookbook/procgen/31_advanced_island.py b/docs/cookbook/procgen/31_advanced_island.py new file mode 100644 index 0000000..1b844a4 --- /dev/null +++ b/docs/cookbook/procgen/31_advanced_island.py @@ -0,0 +1,140 @@ +"""Advanced: Island Terrain Generation + +Combines: Noise (base terrain) + Voronoi (biomes) + Hills + Erosion + Bezier (rivers) +Creates a tropical island with varied biomes and water features. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def biome_color(elevation, moisture): + """Determine color based on elevation and moisture.""" + if elevation < 0.25: + # Water + t = elevation / 0.25 + return mcrfpy.Color(int(30 + t * 30), int(80 + t * 40), int(160 + t * 40)) + elif elevation < 0.32: + # Beach + return mcrfpy.Color(220, 200, 150) + elif elevation < 0.5: + # Lowland - varies by moisture + if moisture < 0.3: + return mcrfpy.Color(180, 170, 110) # Desert/savanna + elif moisture < 0.6: + return mcrfpy.Color(80, 140, 60) # Grassland + else: + return mcrfpy.Color(40, 100, 50) # Rainforest + elif elevation < 0.7: + # Highland + if moisture < 0.4: + return mcrfpy.Color(100, 90, 70) # Dry hills + else: + return mcrfpy.Color(50, 90, 45) # Forest + elif elevation < 0.85: + # Mountain + return mcrfpy.Color(110, 105, 100) + else: + # Peak + return mcrfpy.Color(220, 225, 230) + +def run_demo(runtime): + # Step 1: Create base elevation using noise + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=42) + + elevation = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + elevation.add_noise(noise, world_size=(12, 10), mode='fbm', octaves=5) + elevation.normalize(0.0, 1.0) + + # Step 2: Create island shape using radial falloff + cx, cy = GRID_WIDTH / 2, GRID_HEIGHT / 2 + max_dist = min(cx, cy) * 0.85 + + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + dist = ((x - cx) ** 2 + (y - cy) ** 2) ** 0.5 + falloff = max(0, 1 - (dist / max_dist) ** 1.5) + current = elevation.get((x, y)) + elevation.fill(current * falloff, pos=(x, y), size=(1, 1)) + + # Step 3: Add central mountain range + elevation.add_hill((GRID_WIDTH // 2, GRID_HEIGHT // 2), 15, 0.5) + elevation.add_hill((GRID_WIDTH // 2 - 8, GRID_HEIGHT // 2 + 3), 8, 0.3) + elevation.add_hill((GRID_WIDTH // 2 + 10, GRID_HEIGHT // 2 - 5), 6, 0.25) + + # Step 4: Create moisture map using different noise + moisture_noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=123) + moisture = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + moisture.add_noise(moisture_noise, world_size=(8, 8), mode='fbm', octaves=3) + moisture.normalize(0.0, 1.0) + + # Step 5: Add voronoi for biome boundaries + biome_regions = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + biome_regions.add_voronoi(num_points=8, coefficients=(0.5, -0.3), seed=77) + biome_regions.normalize(0.0, 1.0) + + # Blend voronoi into moisture + moisture.lerp(biome_regions, 0.4) + + # Step 6: Apply erosion to elevation + elevation.rain_erosion(drops=2000, erosion=0.08, sedimentation=0.04, seed=42) + elevation.normalize(0.0, 1.0) + + # Step 7: Carve rivers from mountains to sea + # Main river + elevation.dig_bezier( + points=((GRID_WIDTH // 2, GRID_HEIGHT // 2 - 5), + (GRID_WIDTH // 2 - 10, GRID_HEIGHT // 2), + (GRID_WIDTH // 4, GRID_HEIGHT // 2 + 5), + (5, GRID_HEIGHT // 2 + 8)), + start_radius=0.5, end_radius=2, + start_height=0.3, end_height=0.15 + ) + + # Secondary river + elevation.dig_bezier( + points=((GRID_WIDTH // 2 + 5, GRID_HEIGHT // 2), + (GRID_WIDTH // 2 + 15, GRID_HEIGHT // 3), + (GRID_WIDTH - 15, GRID_HEIGHT // 4), + (GRID_WIDTH - 5, GRID_HEIGHT // 4 + 3)), + start_radius=0.5, end_radius=1.5, + start_height=0.32, end_height=0.18 + ) + + # Step 8: Render + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + elev = elevation.get((x, y)) + moist = moisture.get((x, y)) + color_layer.set(((x, y)), biome_color(elev, moist)) + + # Title + title = mcrfpy.Caption(text="Island Terrain: Noise + Voronoi + Hills + Erosion + Rivers", pos=(10, 10)) + title.fill_color = mcrfpy.Color(255, 255, 255) + title.outline = 1 + title.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(title) + + +# Setup +scene = mcrfpy.Scene("island") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_31_advanced_island.png") +print("Screenshot saved: procgen_31_advanced_island.png") diff --git a/docs/cookbook/procgen/32_advanced_city.py b/docs/cookbook/procgen/32_advanced_city.py new file mode 100644 index 0000000..e385909 --- /dev/null +++ b/docs/cookbook/procgen/32_advanced_city.py @@ -0,0 +1,164 @@ +"""Advanced: Procedural City Map + +Combines: BSP (city blocks/buildings) + Noise (terrain/parks) + Voronoi (districts) +Creates a city map with districts, buildings, roads, and parks. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def run_demo(runtime): + # Step 1: Create district map using voronoi + districts = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + districts.add_voronoi(num_points=6, coefficients=(1.0, 0.0), seed=42) + districts.normalize(0.0, 1.0) + + # District types based on value + # 0.0-0.2: Residential (green-ish) + # 0.2-0.4: Commercial (blue-ish) + # 0.4-0.6: Industrial (gray) + # 0.6-0.8: Park/nature + # 0.8-1.0: Downtown (tall buildings) + + # Step 2: Create building blocks using BSP + bsp = mcrfpy.BSP(pos=(1, 1), size=(GRID_WIDTH - 2, GRID_HEIGHT - 2)) + bsp.split_recursive(depth=4, min_size=(6, 5), max_ratio=2.0, seed=42) + + # Step 3: Create park areas using noise + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=99) + parks = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + parks.add_noise(noise, world_size=(8, 8), mode='fbm', octaves=3) + parks.normalize(0.0, 1.0) + + # Step 4: Render base (roads) + color_layer.fill(mcrfpy.Color(60, 60, 65)) # Asphalt + + # Step 5: Draw buildings based on BSP and district type + for leaf in bsp.leaves(): + pos = leaf.pos + size = leaf.size + cx, cy = leaf.center() + + # Get district type at center + district_val = districts.get((cx, cy)) + + # Shrink for roads between buildings + shrink = 1 + + # Determine building style based on district + if district_val < 0.2: + # Residential + building_color = mcrfpy.Color(140, 160, 140) + roof_color = mcrfpy.Color(160, 100, 80) + shrink = 2 # More space between houses + elif district_val < 0.4: + # Commercial + building_color = mcrfpy.Color(120, 140, 170) + roof_color = mcrfpy.Color(80, 100, 130) + elif district_val < 0.6: + # Industrial + building_color = mcrfpy.Color(100, 100, 105) + roof_color = mcrfpy.Color(70, 70, 75) + elif district_val < 0.8: + # Park area - check noise for actual park placement + park_val = parks.get((cx, cy)) + if park_val > 0.4: + # This block is a park + for y in range(pos[1] + 1, pos[1] + size[1] - 1): + for x in range(pos[0] + 1, pos[0] + size[0] - 1): + t = parks.get((x, y)) + if t > 0.6: + color_layer.set(((x, y)), mcrfpy.Color(50, 120, 50)) # Trees + else: + color_layer.set(((x, y)), mcrfpy.Color(80, 150, 80)) # Grass + continue + else: + building_color = mcrfpy.Color(130, 150, 130) + roof_color = mcrfpy.Color(100, 80, 70) + else: + # Downtown + building_color = mcrfpy.Color(150, 155, 165) + roof_color = mcrfpy.Color(90, 95, 110) + shrink = 1 # Dense buildings + + # Draw building + for y in range(pos[1] + shrink, pos[1] + size[1] - shrink): + for x in range(pos[0] + shrink, pos[0] + size[0] - shrink): + # Building edge (roof) + if y == pos[1] + shrink or y == pos[1] + size[1] - shrink - 1: + color_layer.set(((x, y)), roof_color) + elif x == pos[0] + shrink or x == pos[0] + size[0] - shrink - 1: + color_layer.set(((x, y)), roof_color) + else: + color_layer.set(((x, y)), building_color) + + # Step 6: Add main roads (cross the city) + road_color = mcrfpy.Color(70, 70, 75) + marking_color = mcrfpy.Color(200, 200, 100) + + # Horizontal main road + main_y = GRID_HEIGHT // 2 + for x in range(GRID_WIDTH): + for dy in range(-1, 2): + if 0 <= main_y + dy < GRID_HEIGHT: + color_layer.set(((x, main_y + dy)), road_color) + # Road markings + if x % 4 == 0: + color_layer.set(((x, main_y)), marking_color) + + # Vertical main road + main_x = GRID_WIDTH // 2 + for y in range(GRID_HEIGHT): + for dx in range(-1, 2): + if 0 <= main_x + dx < GRID_WIDTH: + color_layer.set(((main_x + dx, y)), road_color) + if y % 4 == 0: + color_layer.set(((main_x, y)), marking_color) + + # Intersection + for dy in range(-1, 2): + for dx in range(-1, 2): + color_layer.set(((main_x + dx, main_y + dy)), road_color) + + # Step 7: Add a central plaza + plaza_x, plaza_y = main_x, main_y + for dy in range(-3, 4): + for dx in range(-4, 5): + nx, ny = plaza_x + dx, plaza_y + dy + if 0 <= nx < GRID_WIDTH and 0 <= ny < GRID_HEIGHT: + if abs(dx) <= 1 and abs(dy) <= 1: + color_layer.set(((nx, ny)), mcrfpy.Color(180, 160, 140)) # Fountain + else: + color_layer.set(((nx, ny)), mcrfpy.Color(160, 150, 140)) # Plaza tiles + + # Title + title = mcrfpy.Caption(text="Procedural City: BSP + Voronoi Districts + Noise Parks", pos=(10, 10)) + title.fill_color = mcrfpy.Color(255, 255, 255) + title.outline = 1 + title.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(title) + + +# Setup +scene = mcrfpy.Scene("city") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_32_advanced_city.png") +print("Screenshot saved: procgen_32_advanced_city.png") diff --git a/docs/cookbook/procgen/33_advanced_caves.py b/docs/cookbook/procgen/33_advanced_caves.py new file mode 100644 index 0000000..db3862d --- /dev/null +++ b/docs/cookbook/procgen/33_advanced_caves.py @@ -0,0 +1,163 @@ +"""Advanced: Natural Cave System + +Combines: Noise (cave formation) + Threshold (open areas) + Kernel (smoothing) + BSP (structured areas) +Creates organic cave networks with some structured rooms. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def run_demo(runtime): + # Step 1: Generate cave base using turbulent noise + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=42) + + cave_noise = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + cave_noise.add_noise(noise, world_size=(10, 8), mode='turbulence', octaves=4) + cave_noise.normalize(0.0, 1.0) + + # Step 2: Create cave mask via threshold + # Values > 0.45 become open cave, rest is rock + cave_mask = cave_noise.threshold_binary((0.4, 1.0), 1.0) + + # Step 3: Apply smoothing kernel to remove isolated pixels + smooth_kernel = { + (-1, -1): 1, (0, -1): 2, (1, -1): 1, + (-1, 0): 2, (0, 0): 4, (1, 0): 2, + (-1, 1): 1, (0, 1): 2, (1, 1): 1, + } + cave_mask.kernel_transform(smooth_kernel) + cave_mask.normalize(0.0, 1.0) + + # Re-threshold after smoothing + cave_mask = cave_mask.threshold_binary((0.5, 1.0), 1.0) + + # Step 4: Add some structured rooms using BSP in one corner + # This represents ancient ruins within the caves + bsp = mcrfpy.BSP(pos=(GRID_WIDTH - 22, GRID_HEIGHT - 18), size=(18, 14)) + bsp.split_recursive(depth=2, min_size=(6, 5), seed=42) + + ruins_hmap = bsp.to_heightmap( + size=(GRID_WIDTH, GRID_HEIGHT), + select='leaves', + shrink=1, + value=1.0 + ) + + # Step 5: Combine caves and ruins + combined = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + combined.copy_from(cave_mask) + combined.max(ruins_hmap) + + # Step 6: Add connecting tunnels from ruins to main cave + # Find a cave entrance point + tunnel_points = [] + for y in range(GRID_HEIGHT - 18, GRID_HEIGHT - 10): + for x in range(GRID_WIDTH - 25, GRID_WIDTH - 20): + if cave_mask.get((x, y)) > 0.5: + tunnel_points.append((x, y)) + break + if tunnel_points: + break + + if tunnel_points: + tx, ty = tunnel_points[0] + # Carve tunnel to ruins entrance + combined.dig_bezier( + points=((tx, ty), (tx + 3, ty), (GRID_WIDTH - 22, ty + 2), (GRID_WIDTH - 20, GRID_HEIGHT - 15)), + start_radius=1.5, end_radius=1.5, + start_height=1.0, end_height=1.0 + ) + + # Step 7: Add large cavern (central chamber) + combined.add_hill((GRID_WIDTH // 3, GRID_HEIGHT // 2), 8, 0.6) + + # Step 8: Create water pools in low noise areas + water_noise = mcrfpy.NoiseSource(dimensions=2, algorithm='perlin', seed=99) + water_map = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + water_map.add_noise(water_noise, world_size=(15, 12), mode='fbm', octaves=3) + water_map.normalize(0.0, 1.0) + + # Step 9: Render + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + cave_val = combined.get((x, y)) + water_val = water_map.get((x, y)) + original_noise = cave_noise.get((x, y)) + + # Check if in ruins area + in_ruins = (x >= GRID_WIDTH - 22 and x < GRID_WIDTH - 4 and + y >= GRID_HEIGHT - 18 and y < GRID_HEIGHT - 4) + + if cave_val < 0.3: + # Solid rock + base = 30 + int(original_noise * 25) + color_layer.set(((x, y)), mcrfpy.Color(base + 10, base + 5, base + 15)) + elif cave_val < 0.5: + # Cave wall edge + color_layer.set(((x, y)), mcrfpy.Color(45, 40, 50)) + else: + # Open cave floor + if water_val > 0.7 and not in_ruins: + # Water pool + t = (water_val - 0.7) / 0.3 + color_layer.set(((x, y)), mcrfpy.Color( + int(30 + t * 20), int(50 + t * 30), int(100 + t * 50) + )) + elif in_ruins and ruins_hmap.get((x, y)) > 0.5: + # Ruins floor (worked stone) + base = 85 + ((x + y) % 3) * 5 + color_layer.set(((x, y)), mcrfpy.Color(base + 10, base + 5, base)) + else: + # Natural cave floor + base = 55 + int(original_noise * 20) + var = ((x * 3 + y * 5) % 8) + color_layer.set(((x, y)), mcrfpy.Color(base + var, base - 5 + var, base - 8)) + + # Glowing fungi spots + fungi_noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=777) + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + if combined.get((x, y)) > 0.5: # Only in open areas + fungi_val = fungi_noise.get((x * 0.5, y * 0.5)) + if fungi_val > 0.8: + color_layer.set(((x, y)), mcrfpy.Color(80, 180, 120)) + + # Border + for x in range(GRID_WIDTH): + color_layer.set(((x, 0)), mcrfpy.Color(20, 18, 25)) + color_layer.set(((x, GRID_HEIGHT - 1)), mcrfpy.Color(20, 18, 25)) + for y in range(GRID_HEIGHT): + color_layer.set(((0, y)), mcrfpy.Color(20, 18, 25)) + color_layer.set(((GRID_WIDTH - 1, y)), mcrfpy.Color(20, 18, 25)) + + # Title + title = mcrfpy.Caption(text="Cave System: Noise + Threshold + Kernel + BSP Ruins", pos=(10, 10)) + title.fill_color = mcrfpy.Color(255, 255, 255) + title.outline = 1 + title.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(title) + + +# Setup +scene = mcrfpy.Scene("caves") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_33_advanced_caves.png") +print("Screenshot saved: procgen_33_advanced_caves.png") diff --git a/docs/cookbook/procgen/34_advanced_volcanic.py b/docs/cookbook/procgen/34_advanced_volcanic.py new file mode 100644 index 0000000..b4cd0e3 --- /dev/null +++ b/docs/cookbook/procgen/34_advanced_volcanic.py @@ -0,0 +1,187 @@ +"""Advanced: Volcanic Crater Region + +Combines: Hills (mountains) + dig_hill (craters) + Voronoi (lava flows) + Erosion + Noise +Creates a volcanic landscape with active lava, ash fields, and rocky terrain. +""" +import mcrfpy +from mcrfpy import automation + +GRID_WIDTH, GRID_HEIGHT = 64, 48 +CELL_SIZE = 16 + +def volcanic_color(elevation, lava_intensity, ash_level): + """Color based on elevation, lava presence, and ash coverage.""" + # Lava overrides everything + if lava_intensity > 0.6: + t = (lava_intensity - 0.6) / 0.4 + return mcrfpy.Color( + int(200 + t * 55), + int(80 + t * 80), + int(20 + t * 30) + ) + elif lava_intensity > 0.4: + # Cooling lava + t = (lava_intensity - 0.4) / 0.2 + return mcrfpy.Color( + int(80 + t * 120), + int(30 + t * 50), + int(20) + ) + + # Check for crater interior (very low elevation) + if elevation < 0.15: + t = elevation / 0.15 + return mcrfpy.Color(int(40 + t * 30), int(20 + t * 20), int(10 + t * 15)) + + # Ash coverage + if ash_level > 0.6: + t = (ash_level - 0.6) / 0.4 + base = int(60 + t * 40) + return mcrfpy.Color(base, base - 5, base - 10) + + # Normal terrain by elevation + if elevation < 0.3: + # Volcanic plain + t = (elevation - 0.15) / 0.15 + return mcrfpy.Color(int(50 + t * 30), int(40 + t * 25), int(35 + t * 20)) + elif elevation < 0.5: + # Rocky slopes + t = (elevation - 0.3) / 0.2 + return mcrfpy.Color(int(70 + t * 20), int(60 + t * 15), int(50 + t * 15)) + elif elevation < 0.7: + # Mountain sides + t = (elevation - 0.5) / 0.2 + return mcrfpy.Color(int(85 + t * 25), int(75 + t * 20), int(65 + t * 20)) + elif elevation < 0.85: + # High slopes + t = (elevation - 0.7) / 0.15 + return mcrfpy.Color(int(100 + t * 30), int(90 + t * 25), int(80 + t * 25)) + else: + # Peaks + t = (elevation - 0.85) / 0.15 + return mcrfpy.Color(int(130 + t * 50), int(120 + t * 50), int(115 + t * 50)) + +def run_demo(runtime): + # Step 1: Create base terrain with noise + noise = mcrfpy.NoiseSource(dimensions=2, algorithm='simplex', seed=42) + + terrain = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.3) + terrain.add_noise(noise, world_size=(12, 10), mode='fbm', octaves=4, scale=0.2) + + # Step 2: Add volcanic mountains + # Main volcano + terrain.add_hill((GRID_WIDTH // 2, GRID_HEIGHT // 2), 20, 0.7) + terrain.add_hill((GRID_WIDTH // 2, GRID_HEIGHT // 2), 12, 0.3) # Steep peak + + # Secondary volcanoes + terrain.add_hill((15, 15), 10, 0.4) + terrain.add_hill((GRID_WIDTH - 12, GRID_HEIGHT - 15), 8, 0.35) + terrain.add_hill((10, GRID_HEIGHT - 10), 6, 0.25) + + # Step 3: Create craters + terrain.dig_hill((GRID_WIDTH // 2, GRID_HEIGHT // 2), 6, 0.1) # Main crater + terrain.dig_hill((15, 15), 4, 0.15) # Secondary crater + terrain.dig_hill((GRID_WIDTH - 12, GRID_HEIGHT - 15), 3, 0.18) # Third crater + + # Step 4: Create lava flow pattern using voronoi + lava = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + lava.add_voronoi(num_points=12, coefficients=(1.0, -0.8), seed=77) + lava.normalize(0.0, 1.0) + + # Lava originates from craters - enhance around crater centers + lava.add_hill((GRID_WIDTH // 2, GRID_HEIGHT // 2), 8, 0.5) + lava.add_hill((15, 15), 5, 0.3) + + # Lava flows downhill - multiply by inverted terrain + terrain_inv = terrain.inverse() + terrain_inv.normalize(0.0, 1.0) + lava.multiply(terrain_inv) + lava.normalize(0.0, 1.0) + + # Step 5: Create ash distribution using noise + ash_noise = mcrfpy.NoiseSource(dimensions=2, algorithm='perlin', seed=123) + ash = mcrfpy.HeightMap((GRID_WIDTH, GRID_HEIGHT), fill=0.0) + ash.add_noise(ash_noise, world_size=(8, 6), mode='turbulence', octaves=3) + ash.normalize(0.0, 1.0) + + # Ash settles on lower areas + ash.multiply(terrain_inv) + + # Step 6: Apply erosion for realistic channels + terrain.rain_erosion(drops=1500, erosion=0.1, sedimentation=0.03, seed=42) + terrain.normalize(0.0, 1.0) + + # Step 7: Add lava rivers from craters + lava.dig_bezier( + points=((GRID_WIDTH // 2, GRID_HEIGHT // 2 + 5), + (GRID_WIDTH // 2 - 5, GRID_HEIGHT // 2 + 15), + (GRID_WIDTH // 3, GRID_HEIGHT - 10), + (10, GRID_HEIGHT - 5)), + start_radius=2, end_radius=3, + start_height=0.9, end_height=0.7 + ) + + lava.dig_bezier( + points=((GRID_WIDTH // 2 + 3, GRID_HEIGHT // 2 + 3), + (GRID_WIDTH // 2 + 15, GRID_HEIGHT // 2 + 8), + (GRID_WIDTH - 15, GRID_HEIGHT // 2 + 5), + (GRID_WIDTH - 5, GRID_HEIGHT // 2 + 10)), + start_radius=1.5, end_radius=2.5, + start_height=0.85, end_height=0.65 + ) + + # Step 8: Render + for y in range(GRID_HEIGHT): + for x in range(GRID_WIDTH): + elev = terrain.get((x, y)) + lava_val = lava.get((x, y)) + ash_val = ash.get((x, y)) + + color_layer.set(((x, y)), volcanic_color(elev, lava_val, ash_val)) + + # Add smoke/steam particles around crater rims + crater_centers = [ + (GRID_WIDTH // 2, GRID_HEIGHT // 2, 6), + (15, 15, 4), + (GRID_WIDTH - 12, GRID_HEIGHT - 15, 3) + ] + + import math + for cx, cy, radius in crater_centers: + for angle in range(0, 360, 30): + rad = math.radians(angle) + px = int(cx + math.cos(rad) * radius) + py = int(cy + math.sin(rad) * radius) + if 0 <= px < GRID_WIDTH and 0 <= py < GRID_HEIGHT: + # Smoke color + color_layer.set(((px, py)), mcrfpy.Color(150, 140, 130, 180)) + + # Title + title = mcrfpy.Caption(text="Volcanic Region: Hills + Craters + Voronoi Lava + Erosion", pos=(10, 10)) + title.fill_color = mcrfpy.Color(255, 255, 255) + title.outline = 1 + title.outline_color = mcrfpy.Color(0, 0, 0) + scene.children.append(title) + + +# Setup +scene = mcrfpy.Scene("volcanic") + +grid = mcrfpy.Grid( + grid_size=(GRID_WIDTH, GRID_HEIGHT), + pos=(0, 0), + size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE), + layers={} +) +grid.fill_color = mcrfpy.Color(0, 0, 0) +color_layer = grid.add_layer("color", z_index=-1) +scene.children.append(grid) + +scene.activate() + +# Run the demo +run_demo(0) + +# Take screenshot +automation.screenshot("procgen_34_advanced_volcanic.png") +print("Screenshot saved: procgen_34_advanced_volcanic.png") diff --git a/docs/cookbook/procgen/procgen_01_heightmap_hills.png b/docs/cookbook/procgen/procgen_01_heightmap_hills.png new file mode 100644 index 0000000000000000000000000000000000000000..3b167d8817be23724538cd71d96c66aaa35ed53f GIT binary patch literal 44864 zcmeHQcU+Ta*G>o|6vEPoi6B9!l2nut6ci-^WQfSL2x?gpz?KSbRLl?)1VN;R& zhl_^V6g30_p|RL?kq-i)44$G8s%Y@vrAw1E5Qx*5#f$8h#Rjg%-BKN^H&=6Z47O7K z{Ri$QRr8eVeUYlkT+#18h_%?akgQwF?4~H?PBZ_V2W&11k(>C3e;FJXewXNl8tYcr zg5UYJ*MG~{P}v!SaNa-u`-ceLWohH5BJfK)e*X}`yGjnh8xg@)*{OeY-m0pv&pYf7 z&-?u!Bw~fCOg_SGe{fI_%Vh2_&^UNY8;_eN?yTG%eBkm8@PEQBJVApEUj5kvvcxgC z0gI4HrF+_?-+zy#+ARnkgW*?uXE|U(fwpz3ImzNN6W17gJXfIPJ zq{PL>YCn7t+};+Uy>APm^wu>zo^WF~7se8a2BEG=sbR5$9U2vPA5{{@!c1K)F$bmM zi=2Ji!nUHFXP^z%EktV~Rk){5pF&_hd&PQ$R>us;7L57MJQL#fWwWvL(1IVDn`&St z6L0shwO%|rx|}C+N;L_+qj3&zr0>V;G*1HGJI~k@L2# z%g+>2sTNsNdUihTfMGahN=9Hv|DvKxWxA(#l_yOZ-|bJ;Ivh@2YHjSN=m$xhA z`q{;zbcBh^^4gTSW53umT-A^nW!i!6MfzCc6^Je#97Jt7)pFq)=5wp0#6*iKw?xa! z+qUREw1^$)CB(B>qDUV-fwm|;Fw5VDa4JYx)z;PZ$>!|*{OOKgd@+?fGx2ll+eWd) zow;TD(XEeHMI0lU(akL_L(Q$M!eWQGY4)xyhuOL(w{urW^m@C#EbjFEl0(D@^-;E` ztt#$+n?Sh2O`t?I7qdfZGG<}F-}^YE4d-L zYhAE9n8-PdynUu~f_DUB4$J^IzArr(6P zaB6hR7W>|gG*L67cuQX(ci%p3?vWz~To!8;_i1G+C34N0vSB#{rL;>QJirQtSCrT8 z8T(|2h(W0rYBvPVL5FV+ES}Gsr9#tbC|SA>-@LgCr;KdpW~z>hV|CCPf==P|cq_Blyyo zSyXvUZ?_AV+S*EqiHQmR?uh@UXS?QnmpOal#GA|NT*AI?4++Ls_oLl9nZh5!s%mOh zXW4F%A215i+OP zCK4^REta9a4VR4eS^E?9Qf-Re8-fi@APAk2+uHg#Y)r%bo@l4W(P4loBXv?^*aroGhxnZeukF9(7 z=uYC9FzMtNv)Q#Ms-0bE8?>Dt(sDE#dpbxM7AuvgRNPMd0-KhWW|P@|^7wHJR>n)F zT$UJ8nXw7G)ATex_%K6TW2M0r2DGhs&S+n2!uLo!8y0S-;iiy~5YY{qGg?baiyM#8 zDyPG8NxArCmp3^V^x&!%MGWVd|lXF%^9rg6tgFsJ0?7?pfPf zZatrB8P!t!4ZE{-bz586S3DajxSF2X4L8N(O&IQ>vm|b`XfJx+jVV?vTC$WD9qlGe$r>uJy{>K$85+`A`PITR-LAu^Ibfma z-8@_Ea#gb9SfyU%;wwjvXvPZ!h85?&et@S@z9li>(NuOqe0IBZv=94vdOq+tc8DeM z)xuW30oW&oC&UJdR*8eB+8kEGn8M5pRSkE&YGZmj=5S93T`^yEapT@;CewNCgZnGm z4yw2=W(o#)&wDm;$1$*I2yt@^LK#SjHXq#BqS=H6_`0){>pXST^ z=h*hUo=&Z(udi2}+8u&$MbLn>5_$ycJ99>*66)zv0CzzU=iZGMeQ(9(y z(IhJE6{I5ssFac37Svp0LqpcIg$t*yeGGPZ{1xHF>oIL(I_T-srxyoodG#>FoI+WB z?9{32U6ng`Dshkd7FvqMV)L`-&RN#-sr<6KnfurpHs9A@EoYxuq<^+>;CW4E@E~pA z1v=>BdJdb<=a<#g>}kKAq9@vG`{YaWhR;Jv3zmkfs;MbG*wk}(7JBN`sobO_HMCb{ z)jcYYy|iW0wW^~>jks%?3M^DV`NYD?+L}^(Xx{#5qy=ny)=J!|S7u_Xffp|#(QDVP z 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
    ji$)F&o3UPM#JL!6mwa- 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Ξ}I^lIewa{Uw3nSs?YD+|pC zMn*me+2Dwo@$(j&ZBxBOWvviEv46miKYD4eS>qQzB|@>$T?c3djfeIInm-yH8zTyY zvq{|M-Ug^UTN65e{0o$I*Ne~){cy2+SwswXrly5;NP>x7zhOPr$9Fj{(R^=B^22k_ z#Oj9_%<#pf!mbrtmuhLnl6YlIzlZi!8H(3eCZN~hQgR( z7n=B25XsNR85Z_5Mg^z+w1th+A*0qLIx9d5%2o)U=t8k)u03Mu?zX7^P4q+p!EvVwhHG+wEHY46USiq1U@{WO>l&f;ZPMHF15q5QqI^A8&j6L$bwgIs+Mb z2N7VynssGF9rhtBq$uB$vUWV$65SLS1hhDJO0=;wF z3G^CDHSIaDme|91Du>4t*w71xskBFe=!g3P-gCs>N>|jKq>L?PpLK4*i3I!_nrgim z(X_APC2wLPjGm|LVHj~zbcs6*T&w&{JxHv`6e3#fhXPrXQw91=+?t@$8s2OhzR=^a z#V-0VgA)BQH*k5SdX5H%AU(fa1mMNQPZbZg6!=TY$ao{ZZk*up$cV-ErI`{3wnnQ2 zs2tbEGz*e9xBUP98!nIYGjQKPJ;&7zzEkm5#u&>fK7hM7e3HZa z@_HMcL=q9DLK0{)CoLEF(v_7vh}0$Mo--u9Qe~y5Qh7Eu3fwxbmB+ z&)z~y9c`|zK8-9XAgODMdr+jM$ZMR94Gg@cq~&7M8Cgds*>O|Lt2lK_TCnc!>NXu4 z)<4FXpX%DaR=mVAEkWi8T_ymr$HIeN@vbS=t0{Lo)ZN_;Wqo}*+!09*jy>GAN>9%x zT&7(*B{h?ioOwaIU1{XHhR%v}+{V|g-*#|Cs%V`ZM(fOl3r1xMf3W2>l!pniVzDEdD$GW7(q6L z!=lLP3vExQ)X3p`ckVpLeSiNGgeOsa_LT2m!H(56#(pC^7++aDfA7$1#5>G{)r||> zg{RAW)Lu}|mH3EWO|(Esb`+n>YkyQ@+mKI;jJE31zr8b~S65qGOX6#eQtd?~ia?wI zQ}^$Ac5*fQV_XAH&0?c4tDaOo`uQW<4kK}T(dtsblQ-elTgql3O@#;wrtz0 z^>SUTyj^+L^u$;~5R@ce=6k#TC;!qTJuBaL$mHo0U(75wbZ;A{aW@8Mf33MX40Rkf zBNvcdBn;RBn-bda=sJAe) z9BN40( ziOCkrcBgPFYkIp{S6NzG((kwyME98Q#hH=dmswsv%dWX?E^8&5@S45LDx@bsDv^#D z(J#d7UJhW6H9_iB7&j{;L#IG#1S@T1kbbuQ@7ql&w~$Zjo@LdiF`J%hE` z&3SgXFSQx${YiOIKSP7|8dCyFREx&R0oP zvn^Z0v5lV6Ij^Ym(NXegM1aew$)Q&06fN#`RHpb3+>6(*%Y}U;bxG%3t->3sZVH9U zmM$pyfN@Eqaq#XPtTcE_bPV=0O*h$Ga_=WyJM*@M)v{`h#`p!_~h4}^anNTy7ZJ!`9Co1L%He@ zC|?k1#dmPWzqKz|lVC9!^YHLp&qvoQUcQRA*kzX(g$x&ID&sez%7f7xA|q-m|+GuV7z1P|%ezzr*&c&wPc@^;g#0!|GD}{7U^NO`|JSzpS#VVq5p2O1;=< z`j;<$Jkd$_Z^*@}8zBnt~< zQz=SToF!PWpLAmMG*^F&@p^EVRq?0!iS6Pw^bIdI^B0nKFgjojpLXSsoZ zfA-{n(QR*$%#$Ay_H48;6n#)x)wSuy!Ipcz@1LDAX0zkuaZ36gwS*I+K4{AmKX&cZ z=WEw@K0LH!S`XLwj%fehG@M7%Ffzil--qQ?#b@NooUJS^&sBW|2j2kM!ewJ_}V3Xl{wbnIT-o%EBkEa0N4C zpRxu@ z9z3{jqLK;^x0gwmJs#MI(t}|{S~`^$SAs?aNrua~zaC#yGSO!$S!U|xD!wMHcfS__ zT1ma55FjSqYLT_rI=fpFd)WO+s17^oVjC_uaVwVJJ0#h%BTe8r63E&d)z%%>>j19o++;LunQs9@n{eURRKP zp4#rTpZDxAEW0GC=1sIH((_t6#k5ds3GL$(6Y}WQzK2Sm&8`{pL0nr{7&f{lb##xd zkmRl(K%RL1>=TrAN5X;&eIQOMhd)*ha7@bZ4So7GAcLqPRstcj(FpUL#DReUXo>M* zpTdVPDSPlIDx^k@}g#I~m^ldq_4exz)4HT5c^ChH5rB#f5g)x-CNJUb%& zX|;V@TvTZ)x3f0OhJJiU>Qd7_ZstON8a5m)i7+p=VVFgVHI#3+u`#59uR1yu5tyTM zW3Sp5wl&TS8tI8KHiv(*pIAjZ1#)-er2rs}+m?uR)!*mah+KC|C=ga$J8s`9|ATCow5c=v;apo+u@{*h<#MXRB|@Xv!k(kJbDeus_SNvS1R6^UyMpmUlKa2$2%V7)D_~fJgQeMfiFmnwr z%@T7g>rR<@OH=e=JM+op)Ld*#NeSda@+gnUsHp6?!0j0{hFS_dC5_1z$54GxOvTZ= z+yEEgoTR9UWv#Z}?3f(WS6&96U#Ob(Y3NVArKH#z|`3rzRY&&9-Y zKRh_t^>9sq@8Z76(>CdA3`|c_u5$4$^5_=TWz!GnS;0yvy^>Eqfq;8Y%-5+Y612m* z=V8fD+Nk`G&?DtNhhq+7VsHp)e+iofT_>PUR*#;w`|jPT+?J_MD6?$nS2~S$T!S?_ zu;R-FQ4+q~@QnJU4Gm1w{nk2({?qJH<;oR|sHt?K)aKJ<3FX@?vDNqaW4+2TcQ5J0 zq~@+?N9Oi0)Zgmq<+EBt-`tOL&1}Gx2P>v?J44ERyL@Pg@y~}OR<97N!&bh0Nwgl6 zCY-SzMajoKt|K1~s6<@(+S1Y@*}0ykmYQ!{+r{2yel5b@A78Q-v0FP@fK(YroQ)Eo zOpIdBosAtZ7)k0OS^7yA9(Brvt2#X~{nW89D=hi?`<_{(h=5^t%=L_pDQb=;wZm2! zLQNs29~Q+HEuV>-!ds$)DSp0KYaV?}E%u$$@pyw}X{Wkh59cdkl)U=Bef3UGyyBiTY z%a(C**v5(&5^e9}H@j1@CA2oBZ|#w+;%=WgDXx zY+q`vs(PzdVR6QfjLh%c-venmo+isYI0ZN#EZ3{E5xf4KIsMh{lIbB8e5x67A{R@+s@;iWHqeLb>H z7|m^-DuCLd{p2z88CbT#hHghHC-Ov!k_l0xuF2DA{%Dp?y2P>-kACLYp&i@ z6zT6ro{<+ma@7Q4{+4g z8`!Lu3&zJ>Pcv}lwpk|j&rZ9qIVxRfNQf7SF-G3LdGn&suTG_qWTER}(WZS^m06wj zDd)^W67}_m{0O~F@>N+BB;K~SCzg=^}&{kPt$T}E-b~L zPw>#Sq%Ox*jZMpvvx8VYx3eM{pHDBZ_Bei)*%c`)FE58~-n!s1l>TE&xG>MM5Y?7lE~^ zn0F~~8p+o)*y_m4ne|7f)!D5VtL|Sxtg3P}EW(-><2P@94mA;p;fMGVWfb|xg5|z$ zCVhTLd)yg!rR)aN1-voE9;e2B(crqTh&7$c{^1h?E4FM7m5PbFuEaj;)XO?GWih+a zVkxha2@?txTi2nF?I5F6vv!$HUp|<1P=wmpO*TuGJ+M9+t)2X~!o*2k#d+zcfG5B3 z^-&rKm8{csw__fLo1Nf`Md-d|SJ~lA%MvAh&zw0kX29beS@dk`!OdUOMPh94_Z|p9MEfq_HJIy8qJ77maGs9jh(u%!UnrM_XV!x*MTD6 z=AEU;y1e9y6#J@v1J2y$P;qfFjzT2^11=|H!jms4SzMwz(O#zr*_nOxS}#^spc1-i z@zM7oi1eu#G~)B;&)D70&J{K(hdas^m_Z7mNoxZn5LJCjwAawaxj~q-6%hOK^6uo> z6^>DrN>h&sKdj}ADwf#owojhka`6i)X#Lsvo#e)MZ{zfzip!c?pOH4Wt<8x(@`IzQ zgPFvk;ih-*yhfL+TflKt9e{U^|9+Ds+_4OUD^5LObs;kjkLcs;_FI4@5@zlh@Wu;`PQgSQ}Db}TNAfg@vINbVbfj;_8fKwjg>KgXM8UoV$m^a!^38)) zEV(jG`)1cG+*gmDLdAY{Vx3);RqO`dn2e8erCrzCNd2I4e*{;*z`=D>^xVMqhcKlg=_hD_{1hTYtK7IW7hWMsH z1R``LjZR00dt&-tqU?L|M%oA!)w!%uUBP_Vi&`p{H9989aDt+cBHm~-=Ve+{>S9D$ zSp;;Fk7gO#*{6p^KRo#Am9-&_ASrpI?Y_Ay(*yY}T~anbI&F62)00F((NTk~R#n6| zEiHyLxjSMXa~e211o=s~&k)$cQ(+a4P_$j$lKc9r>Q}ImuU&0GnDiaskM~1Oth>G! z7VQrh5Ja7`r_hHoO;4M2=_%<2hDWunGB>WEbt{zkCVEOr)7`RKDj9ru$gZ1!a! zLlNqIPx`&9&Ldq{JrjGh*y2%|eYfwfu2<95J!hX}X~b0PpP(nS4JRMcyB*Q%cfps; z*Faab>|%l${uTGyPa4snSvuCYvP=LWJ%n1Ko#$?7KT!2p6R$mL5G-?)V7-02L10H& zhS!14Q1q*U0Z8uTx30G(S;&v_o*jm)!$$8(Bc`ZMCpUtNGQoU-|9ui5&)&IvcPaMl zFFgjEw0Bq!i=!>&_R*U%SCu|fe`H{gbgx=vbs&gV2&WMrTe@lYW)Q0_PfiZurd4k1 zG;0~`k?6NqRod(r0X?$Y=Z{$GBld#?VC_+6)#4@N_)s*W&nntDsDoDUv)E!m;X!wE zrDBx);m4D_b>Z?C5)x##xVx)PH=6tV`|}&Q@{(rvc9$qmoVo1?iSpQ^el-j$bo zpo7A+=mni;NV+Ja;xF9+bqb3YS0bLM5tc2BL5B9>`*B9<tkg$0MXg;v0au&FmC#E$k0WP~ zL+R`n=Dw$+uCHX@1WZ`!rArmq65FLl6{sh%;<*b$XBRBPMLL>!t)VC2hxeyyJ$d=T zCvN%eh;1#sTmN#QN|d zu`RZ?(6r0q#(1el=aM<@6R|JmHg~xUNt`!ZEh&*|h^oaY%uVJ-9r%>$=I= zibmHA?qD1~=ft7;YpZY?@eYYl>$2{6_+W2^>=w0!yU-Gct1TAxb(;`(Ku_O&MchHH zy;mAlbGLA2JLWx4?5m>h)>Xb6q9h}#YjzmyiR&WRi?>gpZ-*1LB3b$#h26DHpHgojR{W3CmiWk0eb;r6s<;KEO@$90&^h_~q0 z-$ktX9PYcGTO1HQS_Z+eP~y6&?2igE)gweg@i~v}#4FzOIToon+LbFNTc}~mrHKv> z&fW@(V^sBG*BlN!@UoEH5m;#AoTX-9a3r68=U@Oa^jL`ji({v-T3uVJU5v~ognZk~ zn>g|LMZ)^R9FNrW?MG5M9BYH=lO_hX8KzM;%E}Uvp_kPAj3|vzWFb=v6(GUtZScgV z-TfdniRv3*UDNlZwGIshLi)5C2Mfxgg-ZLoxb#esMAP6GAK7)q(&4^u^}CRsnX0N? z2Sw3BQ`RFfn(CSr8ueY@0&5711H#twR^4Hcj}4h0Yl1Y)pPo43u%ymRtsc7Ly4oKh zYb!YI5fk8pc(RwrRtJ;r?4aA9TtzMw9jvyFR_eImq{L0L@X6Z{b1p@L?fcyZO=jGaF})*mly%*?XdU}8Y8zHh)fQJyoqol7!Fj=w354%_*luV&xUBw0N~3}g zOSwLKG?|?$vHS$qXx~ko$t@$pRM$%ef|-eQWM~_$P?Z#OBufPqa7rvdhBdi1Iaq1Y zC*Q6w&SG(6?^YxeXlKuTxj&zK`annIc;8xRS+)LWxGAeTwxLwbF&7`Ixo!ozOla9^ zFu>8w#yn;;?M0NA!#h)isU2cj(_3OSXN%(pfE!D;!dvo#i0-$n;V|hShhznAj$WKo z>6LHtgN@}9w5INn=GC0T$ZGu?Ll`f)hK|Y1N z7R{QaskiWM>o|us_{(>=&CH}f=fi_2&QSX2TlvBgj@#CJp z9gZl3VI{%v3W^yQkY?Sfa zSNz?BN=eP1vya)|J=CvnEK?V^l0;ZtocX(l`t1#%$hq|g3ZHp(4Oc--k17)0tj5DI zoM#Ou4jjYu%ijshv1VqMN?G!U%OiHCP>vj@#E*xZu|IzCQ@S!qyND4Nm#!%c$vY18 zP}7Wyn0{k_;tgx~;Hx-Hf3JYGBZcxsJ{m9#I+JOdLVta}eQxI-stkzuLQp0B=bVF-SVP@MO?FfDS#q)E?@}mA8~|Ge4tKLP^ZJxCJ-;R^b1%hlg~M&BZpcn@gUs{Zh9 z|5K2UMLi7^IdwNoO_e)hY|~610)X)+3@!O~!c739A3Z;S7c^%tXbK-)XJ%Q$RB6S> zw=OTYTp1kU3&1&3kfhTTR1p9qhK5kDPE&!N23XVE8gy((W%-$yR{a{?YC>v7-rh3I z22UI3>zcya+SHo>cbu2OuyEEUWtJ)gwn{YIsdI-!5#`p3U|2^N2{ei}!oj?$30K+6$$A-z&DS?$^XL?B}Uv9$-b2l-cY=ZD?+3s9z(Ph03$6R=1 zA7{KR#NnMtz~e5p{03|BqBMmKqKIs3>e(D1tyIq3V3k5i>rA~wWyFF-p|#x5>5IrS z^)W1L83yBi`5b(ex%Za%@q+S*G@u_f7Ik9W8U%4gqZdc?KhgM9%VuQ!5Plz$_21j4 z|LcZN$IaW0RsXH+_|Nv_pCFJ#Y7pk;V(o8s?APGt{~F)?YvRACIEjDaAc0wF{#~>8 zt5FOFwrVjVr$7Af4(_)%zFQaiSDyAiV~~iNyxC5j(UpeFe7&Wr%2k07Sjh?~or@iB z!z#1K;)h%X%Ycg6cf*nRaT1jeW;=}2saX+q%L;?z4YyO{$C(O|)+rPnC5!lR!)JMV z2np;G?GVzi9#BhDQ>@+i>6aVkplX-eg9rHJ*eNNw#78Hkq!f)$%}(jZ55XfbMf_ge z)G|PEqrrda1QOZ`{StYO3AlP-Ks%|av2%EZ?S2xb_QQ5w{2OnCQ~=Z|n2Gv9AZ_+3 zt6J2Hc}S9vxS20}^{T=Opg$5onsN-eAbz~z$??mYLY&`mOn*Up`FTwt@%d)3_PknK z*zajudQo$#>gR7@#Yr8U1!lU(#>|p0@j?qYu=TG3IHO4;MBv5x=H!b6TW(Nx$P9z& z^c~t|I(1%Vd~5WNM8V{Fow4{IuF)!DY~W1+o$<==(HZ}B!2D;-(D^0qUvKq5B~lSLCjzJUEHMq!&j^hmS@L6bY?=GJ4M70{9K`7!9-Gz2v^J<$5OOOb-|YoaV@67m z!JbzIM^jrHYJt1h$<)zhULQ5ht`;$cXR94R|n2OJkD4VS69y!z(CDei*52SBmH(<@{e^H~&Y#^ScN6&nVIO?xhov;}HLnxeP8tz}B&J z5bT?tJgq5ItxbLFscM_rpJyb}S-nwYX#Yk)Ci`UNi$peFeBl_Z@7qI)orLjS&-aes zTx7YX>$PBO3dIh$T6znuXuPr6uSA$}_yEBA#e3gCt1@%W&#g;29~z3JQy-ArD30$a{7Or=nYzhyMdJmJN$7?4QZY^aQb8B;D1}#^qqvscc1n@CARy{LH+}*4#;R*HIMv8 z2mQxd`CpgQf8exf24xi@(h5=8)c9JMT3JsaF(G=+(z4*f!#?FsO0aRKy%HsY2ukB-FBJ)6OJ&RYXsjS zrN(yF;q`S!NydgiVUU5-k)e^`xne)ObaMmXwIq#Thbto3P=Id~)L47XXpC=;D&jr5 zl`q0XytGIWk{)Z@Fy%d*zED@#8i>)!on&I=vHkWnuCI z*ITD7{F}t!_rfd){)Jua`9uHp&!30?W|aObI{pi6{sFLjC-Xa3i>dN^WthK3J8~L? zCt_ryrQg9HBGX8Lu=eP!>_lKGlki7CI^q7Sbs*-N9RXaY^LYkBZqkM7GFcU_pAX53B3>!KiN^jcERyNpa6KOFS=ZZ!XV!dF1WjRJAgJ?YOkFLShQ~!RmXjgOynJDZ@KZ?q5aZMUAg-Ni1Ht$4 zC$zwcUwU`b8m6Z!gY#e;10Nov1Vf3ijvh(!;mk{LU1?sJKe+RB7EgYjqu>44aP)uv zYW|%Q^q-KL`14Wp-GlsVS2%KL9Z_g^mUN8SLm6%XBwlDzFBeM!~`5?#l2yzybd+>vU59^JS5}=WdeP>|2jPFcRlc<@)k4dd0v9-Tv zg`5N{qy*V04%2PeCp3EC9KFAg9)Dq9zFe%sK@i-V^Ec*XT5nPI!Z!4XsQfU^?a7NSyAZ zLH)T<)nOgIN^q4Z?3|_o@ZC$whfoX5K6c-%KI!$i0MMpYo84x{;w}}9SAj4WFt{;A z<00_W-uR(jKW>&a^Ns5XfY!o7$J>lpz!bwyX%vb`uq#EFw0?L_>kZmbBvCPZ#%NJo z5f2|Q1$$@J3bXYuX-jYRGvtiI&o15vK6y~_8BL*AJ00X_Kl|iZQ)ky5iXTrn+W^jn z0jECjG!u!eQiRgont;+hcdHg&J9rVKc|Ylb@b=~eHU5^YLqoBHVRss7_jBus;-*nAysgnQFwd3EpnE#w;`^^RZ z+iRfhN8j~BlZ-`FrT6QdFt*QTWkL6p!AM|A6_YZ6CSfq$YK~%=1&(68Dez>e;}e^H zGl|aY96%anW`eFM{6Kx6(?q@c3eciK@H-H$ZrOaHh<9oxo;WM90!t@OhbE+J_R45e z0j-2z#~Ez^3&D7?AUhD6{?e9?nejYxE)H~d>BIo*{qp6m6pE4(hzt#hL=Xke2^sp~ zi9tzAK0c%)55$6dr~=r|VJwylJZ8SmU0CGM2hRbQ*l9>OQoOL+f2=BlMGEs?IZE_E|g$L7g2lU*p;HuPk7(SgEBinK4(I{0rgLV|*?P&uks71IhkgZLZ=JGsE38->Ek@pR&>>sx%Twg99*2#L}E z?*;zbrJjE#`Xw*P`4;l zT_nOQ`u6BIds@X0`HObC@x6Ta->MeD(44QzWTv*la3^g5-j*=|Q2{pegu)y>!CWh+ zL@MX#uqRp?mHd2CUJ(Vn(WsQB4VPhP3(kFJGEuV^=JPHAW-Aes#;{GT^xXSmQ+zv< zk}d~MFxrw|lU5CYSsA?GHxPZyI+Q zkj4lQ;l2#kr$%gckSa914-ntm*$GT`?N~CPd29jA&Ko}eVF$iud?L( ze{=`R3NWO=(?)x>}xPa;SnQ}zQ10Yx61}JH_6JEgo zj<}I8teErSZSa}d`BK@z(h)N;%^=@9P9?X=|NqbJ{!^5r|7N9rk2d^guu_PcIdR*J z_e-~f@#ACLT^w>5{RIf%+7=3dV)w%7IrCB^ykX76%7ECj^BD|qw|$)%;D8jg0dVVr z9s`N%qGVu8weB;3e>yb+bPOaJIJ*|kPn}`R7%#J&gne(;!Vn6&Om%vACO)O8JC57k ztA&Y0$Seb5L!EQafDT+27Kwl^iAr>I0p)6rO0X?vz~47pPlVN}B~i5@mPz;kc@qu5xaG@H2V??HH3dOSG1Q_?rEpGhPZ;t}(w@#h6&m~!Z1dBz@ z_3J>lbZ1yPUmn0kRdQ51V9Pc3eu%!Lwav9 zI97EvNCNBE&HzX*Uj>xK#-JkJk69ZQKfdkE6_6k8FK!0*n{VUBr;ZU5G-oAl<^g)! zt_>(VDthd6YRsWHZ5ir!=odhgH3TH|GOPg2KT-7h4+JpZtz!ApwRPV;$iGy)^VgmB zKMV4glQ zD+7_+720}BK66Y63{0;UNS^@DGgDJ|CHexG`E?^8r7j&T@nERWq1-~V|TQ9ramNr1K!kw6GDL}(4*B% zqj%;Rp8#&Dt_c{r>2NFfHfNr)CBGO_)ovnjUjnzbnCcDqEUL6&V~`wY0A9Z!1ca`i z`*k>@_*kJUS{e!PKEPbOQxY^|`i{U8gg$?M>gC@S>GwQKpz8Vay@h{<6yf_5ZF>Z7 zCv--?yu1pM^dJ*jWZ!YLmuQJ52z`MtA+}8exUJ25fUS`aB01$U(w}dwe^qOhvS66f z1BAML%|7wt!|#6v&aQkAM~ugLnuozsRJ;*Xt^^5~l5b!=+ggAR zj&%mb&uXr;MUOOgMLMi?mZiy0|VN6ecWNT2~s)ATGz&rE-Pe{YxDO#cx; zF#+e6v|~(OF}6Q0<+;G-Ct*vcX`Z&g7ds80Hfy8f+oKg`4ALZ2Cl?BFWYXRThCKn# zG;OuWaQ8zXL09QajRn7mkwad^ZLb2O+D z+2J$wrQM-rCIU(^e6t$PCuM94oi+fruNsCg!}9$+Z%`Eir}9OeRE{m#FELr?EQeRI< zF7aLs-md5Xc@)Jq6P-KEJ=!)Fft@;mB>T$|AT0?hn_+Z`@WpuCku#6*puEJe*!~>_ zRJo92^qo7?G$m^{wE*synGY27FJYjP{nClLO4;^TB@_R3r_`LA{Acda@!fF$YfE$V zPO98Nzqy*paEl8i=oV+#e-=Gu*3XeFPHo9@q<-oTpp$@3^I8z=hp-TQja>O z(e_ZB)=QebxXS$BlvMch!bfq3QR)J@!HvEm*p7=?9$Tr* zcB;6FnPK$wvg&UXiE;r=S>%`|Qf8W3I!qhfw|9xYFHpJ0zO`J;YD-YbtkJ()S^W3g zDE$vfqV;4 zwMqZ0~mpK^IVIUQx^f9J?u$!%w@8; zrl8Fc6ZGD@a?{5yMd-BaG8o&t%Bw(d)o2gIfN2|ixh+MO7d2-)nGvApLsAgKF^#Gn z2sFY{BBuZt{KL_S;UV5~mi2#fpCcrFz8&B9$Y7ygWU$1)Mh43wDo_Mdy&Kt&!dh_H z3^!b<_*(FDkCkE@g3jvf^u(E&ZInrrUx!BOTzox^-Fa@l#Fo8ITqG1$@WwtZ4c;&{ zT(AtKXgC-U__rz|$XrUm7oFvfJU~Hu`9o0A53JG4v4@P*=G!v$DTwVk)xo4jkW0gk zim@3Cuq){0J-FP7{n+(0KHUAPWlhiyrC7-4V})#4*vQ1)#n9O!H=v-7GOzdLK}%u^ zFLV~h4+Y_=#G#DH^W3Ul&ppCQPJJy|@otU!ss<8Igzm_Rgg-B*PxqMzM+|K!I%DyU z@T1Y#eE;QSoEXULlixr2459kY`)e3@pcz;vdJt>&`s+$;1~$$T3(pE;xkBLt1dGVb zi`P=lo{RFVkBPcub5vn^io~vxyo$Zh&1Us{O!*iI(bal#evF)VdXi7G+NM0Q15aG% zwtZTBCt>}D_t+i8NUYKB-0eq4=DM>Uua``#@uV0?#g7rfmuCrkCE`{1a?aU30HVlHr-q#{3IL0NLo@qdhf~4iQK72y)n<9!W61^*C)T|^swRU z9=M%@^TUnN7XL;%S=rUq7hi0uvqs0e^hhu6)f$RqVEW^y<{x|onVL{1t!Feiar&ve z2l4%<1Ka*Y>^V!VzrE1Aeatia6by~&Nb~tkAXJN z(5(&ApB>8ha3`LwU(kSRkScx2n`+TQcUkR3uiNE-Ry$%?m{A>XF==+<$yILK>@2G% zkA&Ux{sd?Uyq30CIukSp-tOrEfBEW9@1|Em!)6g)_7{}B`wk|0ll^W5o_k*rBZ+$f zZ2-HDD9qX}_L;_Q^`R{d>T-#CR$Olo0gJV+QeUOd;&CgLdDX_&9)Qubz}}Yo(i_%b zX6R1hpW(h`%R@|xz^kjv&$}zF+b7v*kr(+B{W3f}Or^WJb{LdB6Q*#LgJr}5G7Rzv zk};>t2`HwXyy>)=ndo_N(6AG^^iuW<$)rLPtEO2w_l2XAA~Ucp-ZvtxJ_u2%lXM2` z%UZN#&sRLzbQ80ThAer4TF&C=K<#Fu3$b`HNZ^f6=4>Rss;yM8#$ zZ5bv(5)Wi>Y9z3eY(q_D<34pR=q>Udu&JPJ)5R>-5hBqT3K{RN_is*s_dlKQV?2aOKaQv3RqChIA@SK~4>X5DQ1DiNOgfhJ^c@IiP_O zOcaEN#d52v_Chcv68%oO7SdCF4rM;)lOGU@DUl~$@Miiw(Dp*HMKNzl&x_DlieQ|- zhAkXhg6-J!R9bafgwChZdLCqI#1tLTE>u*yA%T5^157 z3p1TVlD(4GDlPdH%DbhI_9wc%?mTBzRY@4vxwoCMaCW$G<6+1O_NJ}_$mG*e7l|=x zH&qEtk?;D#(M9Y#+maWjt^D>g)bOp`JN$U>>OE9*8nHd|oYVQ3R>z;8Lz4@ifIV!) zo_@I=`>5*0XK?`Ct%s7%T8~vs#C-5po;+q)MwQdMNR9L+_bwtMWVKh}BxBxY?n%&I zwr9_VsGj`wsKO&vysw{R(8vXA(VNmEvP|SkPcS;$y~87X71>qk#$Xdg^rekr(B>vS zbo3Roq79c}cw5)Tfc8*2Fld8B=g+IMs~dRS8D%t`3PGDe z|LiM=N1@F}%Yq|^84+Hk$GR4$*<} zO^AYmm?%vw1Vw2UkP?t03Ic*s1Pw*Nu~2LTg%pv1C?ZM~Bup@eXV`gIeQ(~b4!ioDnGox~ERmhT0cG#j%noe~v5q@CxjDCcdZ5;c(WzCWSNPgbyZvb}IF%|Jjo#; zVnO%VhWRf5tEzV@x=h=sDpi;pc2lgms2;&zCin zi4DG_UiQESc2e)`y0Q4$7hl=vww@-pm;j;leBii-U83j?J&efBE2 zGsoOsv3Vm>`93FoHjO}b5xtO3qzZtDIxce$U{1x=+~K(}#+P3YdCmd`aec9(VY%$G zV<4cg(8^alxA0h|u@9MiM8rJcnlxv!HitGlC&#J3mxKRi^E3Y2v#r|c&&hG!@3gwu z{Y9+r9M&@;m%#O4eOIdF`_miKLzJ2RlAFs_I@0*ypA`akU8A> zRv*SMa^LU*7E!W&9arS`RGTz|Ix?+S_{Lwa{b{I}N1jK?sT(WRE2Fx{e~!gcsoR&& zWZFHyUZT%QmE+MVNDa4}f0VJg)?Zsv_ke`TgoN}&Cy9v}U@p2mHVmheFgn&dkN=A~l4aq;A0@;$pvu^@Ek6X~ydfeK5RB8XYWBXN-rr!Hl zulV*Vb}M_V%f$S&7nT!ybXi$%OY8M0-1hd=Vo$FL?mDAzS1Ek>^-6|hU^v63Z2-L5DLc;` z{*|yx`|z(jIXVO^o<3yX76dSCYE^Vg!?_ENX+^&% zoYghmh2+r%|L^w{iAe?n!37qh-(2*h7uS(~@-ZsfMq({cpZLIsaSv;Z36XkmW2zxfcca zRyQ{KcYXd`(Im5t-NXO+Cf0q+gG1VSdOkv8a`DN&MJXTOzI~~>cI``tHlsu{i#5^c z!U^hk4&>AzIt{Zfy``mPPu={&^o2{l%$DV!ojk(0X&9orY11a{px|Jg*KgkF(4+#K zq$RrUqnCHNrQ6$2>kPI&PBbHtRE~`dwH4ttH8pWhpFYKjiizQ$uFV4^tv!zGDp7(| zpC1Scp{-LxyV;2kSRa=!dR$ZlI6C*gfFf%gJUr^yLR6&tjk2z5hpK~4^ept`oH1?) z3P^olt?IL~fz6MS@t<*fpQb2}%^52jBjag`S@EbAzvVuO(b6&ZwjW#iDSEN< z)n@>Ed&TB(I6{_ozGs<;xJ#p~c)-fo-xPrmv}&WM=`3~Rh&89GYKKH6l4(Zod*`e( z_~GFKe}lJrzDtAlz0qR)a{V0s{Q2|jP^rR5>m56yZr#2uQcSRkU1_i~#>+Wyc|>U; zs@O~skAKyrtwhfEFE$Pe>N3gqDD(yxhp+34FoTGjV)^s)Jej&H(b1lSbsNzS+GoWT zJ)U#A1`kVbd;|#e8uogtj$f6oQag=4FdRGhUQ2wtuAf%_we*txMo(D>tmn-9F(T*f z?t4K=hMRX^#}!v@z+21;x->^@>xOXeXZNwEAW7DfT{mJn+1eZKgnOG;exT#DU51R& zFCP{TFFV$IGq6}aBH=;xzn@ucQPbX?Ef-=5y%+Dq=$m`p*lNB%SI_*&k#(HJ^)9%z zcInlqb<-7P=!3w7UEpLZM=M$#Eyw&ghLmvtA)2BBV@0J#lPIXU(04VlMHFoBs zlQiy3KpU;4^x~r=-NS}U;}vgYa_ICAH|^uS28MrP+cs2Ry?&kJu*Yq|aQ=8SUbmDtcDcKL2rzs%Lhx`r{38*; zTzO_*b|t%^p}}F_zRIAHe)~)VO{~NseVyvsT0Lz6f;qT-lE+&wetMsnc++7Lcmi?m zd`!lXEjHnwjHF^c3L5Ji930pVq)y2v$?w;TQ|D*I4qDZ++1Tm6MkWS1XXWqQM8qxNwhZ`QGKVqaWvxX8{G0{y)2e>S!qsJa+>LNWh9->oN zSg4(^9VQmY_dK-xdBD*^(dBL{X&Fd-I5O3%F22v#jco8FbY!2Wxn-1BRmU%cUfkCk zPk-JKr(2hz6Vd(lIu%>WKDlj5$-R-=*Qg@yU_Mzp%>oW{xKB`iv$t!(p#?x?SbHfZ zPz*AkzKTAPb9+gtCAOsW8UO40nIlAUIC>oyYJPrMHCrRAo-0zkZ)o;SCwr-l%)_J* z=D|*%Ce+4Qu{WnP=LWfz@7Vj?8CZ!NP4jjB_i$O8(;aG_+2q-axY*A7b&Y(INDiUW zq^kr1frR3O-}3t5@0Bo&GoOrE>{{ZOK?^{4CHr_)*VK5sKJ*sD+_gnNmSBa=mOHra zt@gxcEok3TA!;&&@N4_9c}&V7eX4T7XXQ<;YPV`%vC$qchvUzeSSTKPOYuBsyXd`g zn!fZS<2$SKM6`;g64LYPt?i^tZ6X=cd^FdzpBUTjbc?6lv_R*||$(#jl-Z{^=x^OT0-+q-g^hZgFqGv>60(X|ZM&#tii9b7Dj0E{;)(BADgr zGt-mG9CcOk(;tB|%x2ft)~c>tDc-(gGV$&s)UO|$wcDxK;OlX5GVhOP#CSzrNJY2~ywyt(N`B>sg4VM4*go z$;PW*0AKDhPRV5(r;2Zr!nP<3dh3S_E1G+It8r>Jmtk}3sCd(R1*Z2xiY*KA(MtN3 zGCPm;Dh(>)4n58syW(D_=&EHpbww>Xq_gSU(v6Gt?rzIEYq{%Mx3r!i=kZbhhi{h! zn&{|o*NdX>UpVl%TC(FB>IA2gr1EerjnrwPt@_S?*Oy54K;TN=nZ>=iqCs8Vh8WB# zn+81oU{;|1L> z!E8Os!@~pjc~Y#*g-_4@(&goIRa9w<#0SQtL^m$DE7hiWj8JU+h5p=lYN$oVvt;2< zaX{KkP7a}8*GMiCUsZG5LLHjvRIDo2kyhvD?d^@azYPps^>!I^`9lX7Ie~e%Z>Vp4 ziE^xJu>9bLdS7nuA^%88d@OHEet7i;>`!TG$yKDXA^Ym?rpz-h_D5rbEY&5*TNXHP z++}So;u3yBq_)Qg*E>4i*ND%uFreLg?MQnUV_xIaq)K~mN0U<)XN6^Udb8rY`dnU* zxxRUrPER9==x1GOXQ7g+s1)|9rSdB03s$n*Dl=Br`0QECo!x6&cmC(l@1S9nhN!E_ zi}0Ams-47$ZJcPsU*Fw#uX1p5;-C!m7i4v}L?yHNHv(~{k+^7N8k`KQ{QNvQ@%VPK z=&0EzO-;7=dhUy(R%qK5M+XZrw}nmo+NpuC6$9Cnq`1jm=lHZR|6Q zfE=_;|HQCJ1TB44(B5RR_p$;BE!BsWgu_eAlBcz33#$UjtLA&EIiD;)hOW z(&^GWY}pt>W`ula`^P#@nfBV3FE`Y4yBJF%5)`t&h(xZp{a6%IgtNHyDKkjG-p(9 z-#3+5v<}s{BNVe&LSvcP!X3v1s6-#)i~D~0Tl7R5rUFH^7W?{eJYow6s(r)(I4`cV z*o%9O+%!gMTDPuARqgH`?1%lUE7U9UgJrTjt|i8c<%y)2gl~%|ynrJAq<*+dev@29 z^({76ur&DHqk@89?Rj6b+(Gp0^r{Gjps5wXUlZ=$Seb9|3 z*Gxk>m#;2e8ZWbMB{cY909$N+Y5fB4rXGe#&Mj}0rm8+>wX zT!}GYU3sJE{Gy1fs861so!I7A0?pDmnPEd3KVvlQ=~0_6@eifw2CADM+lz{LaYsLb zo-V?G#XiTU@~v(f9qFKjYEM@!>%>iDsrnbw z%H#G_D7ik^-n?Ly^ePO~ZngQixbUf0MWhN6bhz3(wYhi0ef3Yhh%MWyxqzJcL@Yu! z8INfhY4IGP)mWPOML%tc8ngIQE{Y-e3sebIlE}T271LQbYhil z9oqyW{YC0E@7;)F0xd_N2dijO^YA}BC*&ArKZU-?H>&~-t^1s6z(x4sMrn7Kq5$FL zkE-8du;*n<5ykHzFFM%fd_MLxk=hVjOuDC+c23!S6Sf12J}chJ*EQL)o>Nc9~4y_H_GP<(@W zAnS=%j)^jE)X`;cD=e;g=n{BPhkIgN_t>`Q7rVLL94wtq$1+XKwr%*jUdnXp9-%fO zx%|Aitr_otS*_j3$7fYR{mqt)yABne7jMLfkXw)0+sgGW#1HpipO^Y5{-uFEA%!;Exv#4(Pv3dKbnBM;ofL-GbOs-*ZkO(f zQu0eqO|8@pX;o&Fp9=g{KmO8nB{JczN_%e0vf(8gi%9W7vV?r2m3w7M!zQno?M{o* zM1mGnV+84;Wp-gmp{eqQSSxc{x~%Gv>uNcfQZuq9O=i^UByEh0 zGoW^Lv!u2a5078Ej?HYDWtEmlX6%`p8d?GH;xUz`M2E~ZU4XPTo7wt7fu^D|LZ7}& zrG#eCM;hJ4UCx<{D|Cg|D=xW$bqS!N8u!u{P04ljiK)0&ik3Qxy}m0}(hF@dY)->R z=;iVZIjJ`G>_pVzy;IX9&*{W!`2DJ3qAIEfqL57vcxlD+e{Z5q!UeyU!rdCB_fv*>{PqwMf9CcC(`+~XmNjc zcyr z9jHL2N|XKAp|59rmmm1HZT~zxi@&U7SJai!JgyuFC)2ydTEZD^d3oiv4~YmB(6#fJ z<2%=BY55m(zpmyyLZ)$76b(d7MpZuA;WfH0&aj7EGtur2;H1*264u4Mc3u;6f^+Hm zb&Ni*vKF-;kJ_&*z0F?i6a^K9>YX-6L_4tKa^z>ySY&S3hgcC?_R&M}wKoF;H=>eH znRw2O3YOn)51mrfT+0rMFMCs#LXV8SMBiPJ)ID}T1UD&0xGdn$zU20_V6+9}aC_<00N&edZb?9Y*hEG@bIaOQ|Q)(Ix4=-rcy}ga0=2m7>3k+lX|v0A8lKh?OODTs;G0I7hMYO0YeeNGcfap{U?z+jAE}5jR?& zLHxUhIgw+1;b%`Lq8Y3gtR0TL>(}jZ*&e0ER1FSieH8wIN~fgOGEynIA?Wkx-3+%{ zT3^*&JT32d-R?79o<8%ET5%;bOzQ~!9?rCTRKRgzwDgUf|2Q#TE1jS!QZf!?%zZ`G zlkD0yL)s%`8O`O5^7%I2{H(ONgYmW-`0rL~)-vc%;waI*c+)o2rp=r897EMlc$5fG zVded=e{rI_q!sJE@7K}Y?0D9sIbbMma|}{@Mx0;GD3Sdrh^$t_UlPH zR2<4fldZ6)9`AGBzdGVlwk9_w5yf4S4}C{H+Hlm`E&9bJ@9FRAtVNQ`Zx1haOpwD| zy0_j&mu5wOwbL_`@mQ@9BaTn937TI(zTZ)67jxIqokA-?%<1+@;O z)I~D>b`(qTEsM;^Gxay#%3ucqv6KgM(Oe!E|66Je_AF1#>zM8I}!o+2e z+)#>}#ak~$ciLt?-|_*$FJGtEHB~T<8j;=cp+o1!g75$TqNUMIHMD1O!|d9JGhOoH zN-Lch){SJcf%u1mm=9M(pLXQ2Sj;l3+SD@ZW-0RdQ(Gg_(pE4mGqcBI#+tjXJkQJ1 zBHJ6@y`Gm#xOB@IL%t$)xRLev@#cu=Xh~O@Yz!)MtYQ15i)DLk)PEv?->=^M1A*YEJJ^^wVjn(5cDwz<`ll@{VFjGY;#T6*Nr=_$UtxI;L) zVCGG1HuetGzwh5#NM)C{C{W9}U7sz)?GFCLIJ#AZGqgLlz(;%ET!n*s(q)3bSON~W zqxRWvn&3BmY5~kA)#iEYFw;>#2hDeJdV z2c;ErQ)TnHeiMcaQ`WuR^q#)i*1I&tMNgmiRPG31Jlgs~=hW_x7S~7#ODpghMplKy zp7K)MrZtGJ#monG?eX_hJG`-9mN#J+v7PBXJ*%mJE%;>91N~)ly22caN82q-PJnnxi$50(5-|j)uIml*Du+xw5o!X z$X7RfeJkpKsA<%lHzUo7nV$|ex@{zGXLs$~!TQ4rpfrkC7O^;vMh*Q|dX}#`v)akm zH)}VEy_tAkDua#5xlMDq_geSRp+nl%A~JkTy$St+L8^A}@(7ylAq^ggf^eovCnr!* z7wLXE`n1@4*Zb`0$yv@KfikF@6;RU1Fs`fHpSPdtyDoBYx~#eawV%66wXa52vQ**T zV)8!Kudk^K7Az2Naz-`LBNxWjW6zt0I<9gtb58K;hvE%0 z=B8ec4h`()<}Tf%fa17Wv`YBv+ox~3Y38UU=8Bg>?@#jbzFpX7AjehmJG67I7a?WElqnBab~QxMoDImA{L9P99a`z~7QCA$r6| z-)_HSx>r?3PuB_&(`j#F_$)pJfO|1k9=#tcO3vX;-P5A=(&Ona&GeOOx-qw2EP8aX zpQ)cn-%)dkela$=yP`y?ctAS%WY-z>ugZ>U-&8ysGt3+f62p8U zaju_@u_MKG2H*D|Mt&>X!rtIX+d-CI%ptJEM&Uv0UAji44 zqLy7d=2lXHtJr)SZ^AOd81>Ic&V05{!QCwrJ?4d$!Gu+E`)7l@UR6OWSmHh1?|?q- z9eQl1TiNva7bTCbpbKBCB(E|MOTb&uc^wGGJ^`8dB+q$Q^bRKw%vYnHZo3j`9!}(H&NvB7<1D5Sf$yOMIi)_1lhL>|WFK zcw=ADTOH86q3?yHx*6b3rQ4MCiKMr>E?DHhB_LRQ=S>T;gi_i|5{aZ6Mm{S_{@Cf` zsgHP~HYD~g-s3Ope9FtSmzH~QMgq$UiCd%_MhQm0*FjK5De+?Z*R@`%uJ)HMZCeq% z?A!HA<8-gE>u6F~^e<88v(2U`VQ1yZQnNmX=TGPaNfAV3-WQ+)Hp_a>U~ILtXzRsI zT@bo+r1iJew4&vim&}@_e~qmek>CtF+7$W7_s;tmZXh(vw8?CBsFcZ$LM4TI+^X(3 z96ku8ys3)FVa=0iV6E&fVop4qKhA%C8k_0cr>V%MTV$&;SnM@lzj|lRdoHC$c7Oc2 z5nD8648?Dk9Cz+E3p-fKUSXdwgWs!^g`ZhnOb;C20w|wrEIX(R&lBm`T=~<~o|0lhSzMgLi=)Xn$8_n9hgFwcmAr zI=Tc?ba(O2?lP>AN52;LwcuTmi}pM(mT$VVNtx=kh8T1J+(nPheA>_Bt>`+6rbnuAzbsoR zuB_uDZf90;hEWuqCX&RfhA%&K!9l=R^!VY8JeIiEvn?Vg=Q&JpFeBMSI= zgP1T$)vZiPOM%L_DAb8jDOhejv$19oI*dP|U^(T!jtH*y_nfyeK*W1cXYeM8&FvXD zm+SWkC3A4o_Y*mb?J^w%DH6-DVx6m^7<$avwWyWCRzWbVQ+P5N3Z_qF-vAcIb27BySF7`xoIrbJs0XxM$dc=$2f(h){ z7COAh?%7PmX}oEGsK$(7REKlP-5vj;^m#q1WOvLm^3n%eBC;4V`Qf!<$NFCQ7oRI- zqBs3gS*Bi}dCU!ah*}|wSxCrqpXmc`WOJU##1`EX3+YOCc0UlPPb&j@ym90p_&85=yn+qGq|OZC#ywXxE5Jjjr|vag_CF)6Z!Mr!xu1 zQ8c?bu$)@3=S~_Jo9k^unYO|bJqGn!1*N*ioF1qlt?XZ#uT{ zu-MY;DKhy!^)}Z+GtsDB?Fg?gB&J5DiM}rZ$5z+0jOWieyMx_2EK&R zVMpPIgE3>BOk%=mRp*Z(;0)L1q6~fn&5JI_-(PDvwPW2d2&wzk+`tP@VClx!`Tp%} z?F(o~^KAb&043nV`BCxE1}j`u{4N{#$mBBo@6@{V1cpufnQ_^4FcCzkVbNL~{k&Z=Zih`p6Hj zWd5-WD^^RN-9Zv&#;e}h%Zs&uP!Pb}>rGoXJClgdZ&g$L6wZKM%J?Oa)$@{NgpP*O z;J$)SP0_f7P^m&Mmjaz!R>B-}I}ZUovDb{#HU>P%6Xv&gVwIl>1xU{TcnWV#cnXUG zohL@+`-zYJB`}dOQh2s`B;op2OP?H{vWnA{PmxJGWv1u*o!Uyu0TeDuS6 z$o~YFnLqYqzN~17Kr}}C1e4DQQfr-D(EKDfNdwV;Gpv7t#0uX-gIKk6-!HW;6GRW0Em2(C?j0*asV2)`}1F< z{QuWb@_mQzU*c)~;Wzo`P4f4D;s3}@;u+ewcX#|&r40tKgO(itJ7@{@BM?F>D!@zk zfHcf6seEskzlFwX!9p9E59ZxsYvc*dEN%?Ww{`G2u)AB@Hv&xfn-qYOx3cnqCYR&| zPzywd4?awh<{5BW4=w-TbG31Vlv9n=Y0}|zPR*|K9Ysd8B1d<)&Cbquh}D$GCC2Jb z>p}D@p0$LdQqgc6zOK>KP2hXTGfR7((4w_A4^q2tZ;wK7JDaKy3I4+TM<+*tZUKi2 z7WlsPp9Ca85Ku8F8bC!3W8EMW5KXwgCBmA{~}HwwBG(#t7A%E-FXI{)h#2+x2;(;S9w@6 zB^SdPz4a8VLm%6S!5OW#XvJN*ds)hIiWM$^=+v9>j?mnB>Ohhj|Iz~k0Fv+IL3q<* zJ_X-Hza&q9X$-7~`FY>;&ya~OOM=kY320OZcwM~Y>4ZquLnX_(zzk#CTQUNfyOgzl z&VbF}4*)S0FEkQHM(dqw%E6knyRo4X{DWDPFeublNWe>!%!0WgbtqHFJYNGw9>~!6 zxrA&MDPfJuqJWwYG9!djM2znn2~2j^bRJP2uhUIi%rO<&a;D~+)*`zzG3m(g8)-<> zp%(xJ*;rI_F^u$RO=eMCTrL$k}0Lf+YIC$nFbFY9G0h zb{+rA#<%jV)SjIifsWBp<&?!by8tp+gJO*poVn3^09EWwoP+QE^xOKFiKD5x-~`o* zX@Kwb^ScH3xDk>tuiaEwr5%`ISZ9i#v5!9!911`-R@f;J7f~sE@D9(t0jN}F`!;hg zu9JcQ3#gedOo-8aT|yxYEP%s_92wgQ7FPu)9kV*C8?FFd`CtcxXIeBQ!NgJu1o$nB z0sy(O9dXwv5WF0cfcQ8w1(!hR3|uc-nhjtgY=W-&WbbHqL5)W;$<~~IL4hT7?of++ zOnYNp9S|I;RKy`ET;Svk@T%!JHJ-+sM$?s^-dXwlmli(>-&kGlF))Br*aENfhn1c` z93lRZ%<1>`9QiY={T;JfFV90+)oGWp3H_{76RMU|(lM_fEDdfE+FR$}goygE4ea&r zg(2V-!7BJ9?98-5?(4J6gU}p!s5DU*c?4d%$lNRsjD>X_@lD=-Lxm18gEFrU!j}UXOYU&&}5NJN_WNcFN1|}KZ1;?0Nbr|+iv)bo$+P)8(gL? zU;YSU<~8S&rOoFt0MPFwj3^w?D#THu0SHBYN1N$yXL$yvU331@k{L=>iKmKz6HW-?F{v)<5Km5DNpGS~5wZNKRmxC|Mp1Y94erksb zj}VsoqqV>x$!ateSDu2nz~KJZLKnz}JyQOscS zY#|`i8p#@$Sf73YdTCw{5YqAnxtY}zx!MD8^v=ctA6d<@=DP=r5u}<5&NZLlkynv7 zV8%wI0mzt20lpNW)&#qK$u6+_u7Ff}KFvQwqktJ1DGafK`PNty9u&HftAXi=2;QuMuqL9Vv7YKDFtmstCmAK-o920+hXFIr3W+VBxA&TD zRIlC<&zp@T6DAM{;Rt{HoM{U&drD77$LR}j(ZydQgB}UlDt5|d5L9bw?7%lK2?(xp z2ASQ&Ka4&8!`=VizfAk_AS}F;{_cJBm)olQ-%99~KTGKU#OhH}60KkbZuh8}${gUO zh7|x472)SX3-vPA1kzG(FQ7;1hd}FOB>y3lkSc9L=CJNV2L-AkRinA{#Q|vRwugaV zcg`nK=(9rKW}ajabWx3m%nNq9L4lZD?mY&rP9mii+`6SXA~6%SzY4|N{Yrq9kdxDc zn8hE5*Go4#4=+7Bxe5*~eyLAPF7<@4XA3?>fj0gvRg5EE3x50Mb12`JUT=(Yh!yk%?kuy;3p(?4#KU~*L5p*COe-$Gv1~St*q&& zg0bmYjz8QXqaT;S1(X7uRl#hn{?#|?oIl&U|M~O?7Wh>~|NkGL{;RZiBZVbnAcf2a zb3&cigjh53vwWvRtfxcE!68t{vmy4d?#uTx!&VDn6aosM4j1u2#X$6wfg^Xmc1qr_ z#U37SuYqh$zT`=VELL3$bbp`skst~k+;>5k-9m#1w$lRPfSJ`4=A8?TSHqC0BnaXe ze2AVTVt{$P0Ky%VxWefsY)=Wh!P8nQgp&7VL*|~!WZ&XG|CRx=Kam$**M^xWi)hMf)7!~m=S_wd! z+Tk|Go5(1bdY3bukVvwvgP+>SB*|B*Fj3Gurt;@N2XWdM5(<)$5TNr(SdJr8sRdIl zY0K;(A#a{T+WJBu_P#W8o12|ZE|^$V@ft95ME-+6lyUQCiv0KeVgJa=;GglkK_}S< zGWUF`M-b@F*1fcf7i@TzsL?#~OH-a2>v947FipF@)J!8vq;U>^6qD8?nRQ zF^k%KXDb}EZYFR&%L+grr~Ws?+I z?6d})DT7e3BON(tf@>O!xOqKU*sFr37sbyn2|bCp&`Fph)Pi3(TTa<;^M-bAp9~X} zQk^WA3#mkk;iOkUxMhXU#zSJ>4k48l-n&@%7ligO(mk|HY8(L!yPhtj&bklt9g`^3 zJhWj8e>E~8%^KYj0cOVXE59{D}e?aILaq)=l~j)5~g@7nHNL+E-0ocSWiVgyijqD7N?)0?cSa z&&C#X0gwk6in~_D=?>r_(h@TP2PdS2%sfj47JhEDbOzB8OoDn$RD%v`0SgE-U>(7{LDo`E0C~7z|@RCBTOyNH5W;jmv>Be7KOV#(z`GCyb*aHbJhs z)DKQ|iz`Sch#RFKmW}iJAeT%fu7$}T7VKSq(=KJY|YMSJ+AJYEvPcWIOmo9>z z(@6w?P~SUyC{TGof1Yb4 zpd{FNQwzE|XR^gC=gc)t9I`r_J0Xrbg9xFY`FLE;a&Dhk1)(;INT_=$KZh*rQHoJy zm+ynoDT`|7ltpsgeoZL$dm`CCdUJKm;4)v=9YQgJGWhu;r=XUdR|DA~GMWeiS>XZE zm5rQ@ir>yJJ--B$^l+jfUB)kjP)nVKF9zWQB)o{WLkfz}OgV9V4HT8YQ-v{#Gh$pE zoT$dD?0qa0Ta+!WxgE#U9U_u7Y>2j0m@~~Ti`(;=9vCK}(VXYsVe2NKLU`u)@U)<| zJy`-tcH}!H$mOH9Pd_>dsVy~(f4Kn5hB+<*YC%CtsvDH27q>&b9iCGSQJye>1dmAq z(iJRbgf&8W4H&&=P`O&SqQ3Z)J8Ez+nnb zRRrm-pbaJ=C7o9sarJlLKp{-s0n%t^b~SD3voxV|5g$}{He(?WCVN<6F%vmAlx|s5 zKhm)=6YFa)L38Lsne@LW(F6QI$ee!~A;wHxvX+EIm0mE&VQbmC&EIqtuDn2!3?Ss4 zzX&6Fi#x2$giJyP-2dDV4#FxJ2VH!11O)dC{-l|w6D_Q<1dy^*tm%SLV0UV zGcyg+bNk^BmasP?24ud@XJ>CfpuDzDel2r{e1GHH6S$@cz23KI7{>Bpq=Z!O0TE)| zwFFC*t&tBKs}JvpU(gu}EJ}p$x;>sx1f>$7l%+xbtFeKVl9CFcwy)@W+pG^dY=#oP z8dpxkcdg$=)nDH0Jy(X9Q(A*O~trPR~Tgb13ip zgcH}R7es`yYz}tM8b>mmvN~UmL*~p1Uw>OOjh|!tth)1+Jf3UGg;8c+2KKh*yvcL; zE*~054Uy7gaQsT{Q9wXD4Y4{i9^BOX<`9VSzeL`HYhYpuZ#id~wGRSf_nTEQ6QC*5(Rt)>h`5!h z4eyE)#xeC0$+CWS_cBO25?!a^R=MN~k|tPhf!bK-aVnhRf+0{Yo>%mprM~?f0E6P{ z(?El!z6Z^4C&@Gp7GLTiPv0lg4wqB!#BO14Nq5m*h^!h%O<_CFjn5y^@|~T27ndg= z3CboG+${~S;D<*nmq!DA9|s~V>m1yelIlNL~6dBd`)q05_iHQqUy7Ui0DQn=7FhiWh5kFD%HRK7|B)LDe{8)EePJNdr0qO_z**=?Qx={$ z*bAeqGE@gNGst!Y={sQ?=KIJ4;qgGw6n7B9DKbJ$Xw?dJr>pTA!(hL2HZlcLNnR05 zO@&>f?}2Z(n;_i70w8ZvQL5B%;*NMeHZ0*Mf3KdbYMO9nltn5VgBgfQ2CSIvA{=%~ z55h>J40Ki9#Enu4%xDxC3v*a`B$U`tT-GhKhOjTe|NiGfMZ^rt13b38qQO&QPr zIq)0bt&4+`G*J?x#?P5nx&wDYPNAqL&H+@u@6eBt-dgqYIZq^7(3ajT)_de!PE34?0&#jvzuxmdS%iSY89UE9~w-=(gStO=)ln z2F=aq zOb}T#HZAG*hQqVLN=5sIFaMuK^nW*fzz|q3%Vn(sLe82rSU8ps$UVzQj#~a>4^!aQDo10Oj1T~)heZOq& zG@*lbn}0$!NyqIp^jp(FC)Bfa6BzT5LLNgu)^`j-u%48_DT{bc3VK6J9~XjDBJTmT zkL_Z0d6nRPUx2iC%K-!R?Qig-B33}@ihLc0mKH1g40NN%mWzYbXwCq{h_Gdo#dNU- z36qE#NSj&b`sID6F1>#cblWyx$&#C)WEl!7ID2`jMy@R zvuq#*r56}zE1i*p+0M%#Sh6*0PlzNH=j&Kb1%~(7!*~|TRAj@`SI~Y^Nr5%>#;I0e z77;)cj*yXr$1DN==UjeOP2J90JY>%un8KnTGo#{|YCMCIR*AxSr32{SbGGv@LuUPc zx72-i?EHHd%s*u><@X-${INOi4;R?lPw(W-*IR0)qzA%0}UHYw~JcDOFDkR0>D?)^Vv+EN~ zLp^FK&ensRv(a?VB!^wEZW|A_ zFpdgT+qzu&R#xE^hEBp8^N{ zh82YRQxOGo?`*qQf?#QJj;6ph)fH@6u2#b55yCO#ChuI58t>AE17KY-e+ANZrwNUF zteg&G(|Eou0&Qcxuv`!@N)WK)hNh_ zxUS3hZccbZTyc(1s3rcu4jnw$?_nkj9$glHgh$sO8EgMF!r1Q~y?_548@6;AdpTX8m}9z z-DddnPP^iHiMxM=4l6GKB#Ko2jL;rJ0nEp!3bQbMd8>jkWW1V+NL8C=kx#**9;lAs zb?)teVwJK74+;18#a7tBf#Mmh1K|~@=}Cg+TWz3dL^{E^iDZ!kx};0QV7Fix)_D2A z#*d7O?@+R^Jf$WiF-gSmJJpCs>2_=aJxcy3(!nB-{Wg+bK$x65T}ya`%tF>(Yb^!g znHN&?&7O2|gM2Ho=Zj@cjm(xB$4-)!R2#MYxV!$DyGWoH#D4|j% zawyOWD&Il4k6_f3%~uB#if>FU<_kU0PyD_ymj2`Yls|Mf_-BayFV8GcsM&EVX3ElQ ReJJ>6r=^|6gYBN@{}*r>c2)oY literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_06_heightmap_voronoi.png b/docs/cookbook/procgen/procgen_06_heightmap_voronoi.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a025d6ac792a88a43aec7548f30a8988988f34 GIT binary patch literal 53833 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 literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_07_heightmap_bezier.png b/docs/cookbook/procgen/procgen_07_heightmap_bezier.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a808a6f563bceab7bf0b08ad24c475adf87e76 GIT binary patch literal 51934 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 literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_08_heightmap_thresholds.png b/docs/cookbook/procgen/procgen_08_heightmap_thresholds.png new file mode 100644 index 0000000000000000000000000000000000000000..2cc413c2bb09ce2d07d196afbaa6cdccf6a2d576 GIT binary patch literal 67412 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 K;iUzXp#KBVlFjG< literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_11_bsp_traversal.png b/docs/cookbook/procgen/procgen_11_bsp_traversal.png new file mode 100644 index 0000000000000000000000000000000000000000..d8fcb6dc7c64a3f10a7d4449bc43137c4dc16c8e GIT binary patch literal 56445 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 Jx7NBu{~xHJ8?pcZ literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_12_bsp_adjacency.png b/docs/cookbook/procgen/procgen_12_bsp_adjacency.png new file mode 100644 index 0000000000000000000000000000000000000000..c174f3cbbbbcc1ed7c561bebe63c0b35593f6dbe GIT binary patch literal 47792 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 literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_13_bsp_shrink.png b/docs/cookbook/procgen/procgen_13_bsp_shrink.png new file mode 100644 index 0000000000000000000000000000000000000000..66c036223ad001c9d983d1cf54ba6ed1741071d2 GIT binary patch literal 58244 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 literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_14_bsp_manual_split.png b/docs/cookbook/procgen/procgen_14_bsp_manual_split.png new file mode 100644 index 0000000000000000000000000000000000000000..ab843fad6c4b6aab8805c04e82f384b89991ad52 GIT binary patch literal 47479 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 N8`3tf|2j3N^dI=%G8O;; literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_20_noise_algorithms.png b/docs/cookbook/procgen/procgen_20_noise_algorithms.png new file mode 100644 index 0000000000000000000000000000000000000000..a715010138742c393f4b2cdc8e1c92b0add65879 GIT binary patch literal 78846 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

    1e~MS4ofUB(D(bCLUfPqc!c>#9 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 literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_21_noise_parameters.png b/docs/cookbook/procgen/procgen_21_noise_parameters.png new file mode 100644 index 0000000000000000000000000000000000000000..6f62544035b16471c164cdab35278705d0b78a1d GIT binary patch literal 80387 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 Z0PrQXyZ4*Y$|?Z8_B%N5e!PoB`#(XZnH&HB literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_30_advanced_cave_dungeon.png b/docs/cookbook/procgen/procgen_30_advanced_cave_dungeon.png new file mode 100644 index 0000000000000000000000000000000000000000..bc616d2cb97b43ea0019f0dd46fb0f9aba8d882a GIT binary patch literal 41535 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 C!sh+} literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_32_advanced_city.png b/docs/cookbook/procgen/procgen_32_advanced_city.png new file mode 100644 index 0000000000000000000000000000000000000000..987916effafe60949a5baabea26ce3492315ec5e GIT binary patch literal 39680 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 literal 0 HcmV?d00001 diff --git a/docs/cookbook/procgen/procgen_34_advanced_volcanic.png b/docs/cookbook/procgen/procgen_34_advanced_volcanic.png new file mode 100644 index 0000000000000000000000000000000000000000..d794b445d2fb103cd464e84985efb7810bc1d149 GIT binary patch literal 55833 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 {png_name}") + success += 1 + else: + print(f"FAIL (no screenshot)") + if result.stderr: + print(f" stderr: {result.stderr[:200]}") + failed += 1 + + except subprocess.TimeoutExpired: + print("TIMEOUT") + failed += 1 + except Exception as e: + print(f"ERROR: {e}") + failed += 1 + + print(f"\nResults: {success} passed, {failed} failed") + return 0 if failed == 0 else 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/docs/cookbook/tools/sprite_labeler.py b/docs/cookbook/tools/sprite_labeler.py new file mode 100644 index 0000000..60fe412 --- /dev/null +++ b/docs/cookbook/tools/sprite_labeler.py @@ -0,0 +1,397 @@ +"""McRogueFace - Sprite Labeling Tool + +A development tool for rapid sprite sheet labeling during game jams. +Creates a dictionary mapping sprite indices to custom labels. + +Usage: + ./mcrogueface docs/cookbook/tools/sprite_labeler.py + +Console commands (while running): + # Save labels to file + import json; json.dump(labels, open('sprite_labels.json', 'w'), indent=2) + + # Load labels from file + labels.update(json.load(open('sprite_labels.json'))) + + # Print current labels + for k, v in sorted(labels.items()): print(f"{k}: {v}") +""" + +import mcrfpy + +# === Global State === +labels = {} # sprite_index (int) -> label (str) +selected_label = None # Currently selected label name +current_sprite_index = 0 # Currently hovered sprite + +# Label categories - customize these for your game! +DEFAULT_LABELS = [ + "player", + "enemy", + "wall", + "floor", + "door", + "item", + "trap", + "decoration", +] + +# === Configuration === +# Change these to match your texture! +TEXTURE_PATH = "assets/kenney_tinydungeon.png" # Path relative to build dir +TILE_SIZE = 16 # Size of each tile in the texture +GRID_COLS = 12 # Number of sprite columns in texture (texture_width / tile_size) +GRID_ROWS = 11 # Number of sprite rows in texture (texture_height / tile_size) + +# UI Layout +WINDOW_WIDTH = 1024 +WINDOW_HEIGHT = 768 +GRID_X, GRID_Y = 50, 50 +GRID_WIDTH, GRID_HEIGHT = 12 * 16 * 2, 11 * 16 * 2 +PREVIEW_X, PREVIEW_Y = 480, 50 +PREVIEW_SCALE = 4.0 +PANEL_X = 480 + 180 +PANEL_Y = 50 + +# Colors +BG_COLOR = mcrfpy.Color(30, 30, 40) +PANEL_COLOR = mcrfpy.Color(40, 45, 55) +BUTTON_COLOR = mcrfpy.Color(60, 65, 80) +BUTTON_HOVER = mcrfpy.Color(80, 85, 100) +BUTTON_SELECTED = mcrfpy.Color(80, 140, 80) +TEXT_COLOR = mcrfpy.Color(220, 220, 230) +LABEL_COLOR = mcrfpy.Color(100, 180, 255) +INPUT_BG = mcrfpy.Color(25, 25, 35) +INPUT_ACTIVE = mcrfpy.Color(35, 35, 50) + +# === Scene Setup === +scene = mcrfpy.Scene("sprite_labeler") +ui = scene.children + +# Background +bg = mcrfpy.Frame(pos=(0, 0), size=(WINDOW_WIDTH, WINDOW_HEIGHT)) +bg.fill_color = BG_COLOR +ui.append(bg) + +# Load texture +texture = mcrfpy.Texture(TEXTURE_PATH, TILE_SIZE, TILE_SIZE) + +# === Grid (shows all sprites) === +grid = mcrfpy.Grid( + grid_size=(GRID_COLS, GRID_ROWS), + pos=(GRID_X, GRID_Y), + size=(GRID_WIDTH, GRID_HEIGHT), + texture=texture, + zoom=2.0 +) +grid.fill_color = mcrfpy.Color(20, 20, 30) + +# Initialize grid with all sprites +for row in range(GRID_ROWS): + for col in range(GRID_COLS): + sprite_index = row * GRID_COLS + col + cell = grid.at(col, row) + if cell: + cell.tilesprite = sprite_index + +ui.append(grid) + +# === Preview Section === +preview_frame = mcrfpy.Frame(pos=(PREVIEW_X, PREVIEW_Y), size=(100, 100)) +preview_frame.fill_color = PANEL_COLOR +preview_frame.outline = 1 +preview_frame.outline_color = mcrfpy.Color(80, 80, 100) +ui.append(preview_frame) + +preview_sprite = mcrfpy.Sprite((18, 18), texture, 0) +preview_sprite.scale = PREVIEW_SCALE +preview_frame.children.append(preview_sprite) + +# Index caption +index_caption = mcrfpy.Caption(pos=(PREVIEW_X, PREVIEW_Y + 110), text="Index: 0") +index_caption.font_size = 18 +index_caption.fill_color = TEXT_COLOR +ui.append(index_caption) + +# Label display (shows current label for hovered sprite) +label_display = mcrfpy.Caption(pos=(PREVIEW_X, PREVIEW_Y + 135), text="Label: (none)") +label_display.font_size = 16 +label_display.fill_color = LABEL_COLOR +ui.append(label_display) + +# === Input Section (for adding new labels) === +input_panel = mcrfpy.Frame(pos=(PANEL_X, PANEL_Y), size=(300, 80)) +input_panel.fill_color = PANEL_COLOR +input_panel.outline = 1 +input_panel.outline_color = mcrfpy.Color(80, 80, 100) +ui.append(input_panel) + +input_title = mcrfpy.Caption(pos=(10, 8), text="Add New Label:") +input_title.font_size = 14 +input_title.fill_color = TEXT_COLOR +input_panel.children.append(input_title) + +# Text input field (frame + caption) +input_field = mcrfpy.Frame(pos=(10, 35), size=(200, 30)) +input_field.fill_color = INPUT_BG +input_field.outline = 1 +input_field.outline_color = mcrfpy.Color(60, 60, 80) +input_panel.children.append(input_field) + +input_text = mcrfpy.Caption(pos=(8, 6), text="") +input_text.font_size = 14 +input_text.fill_color = TEXT_COLOR +input_field.children.append(input_text) + +# Text input state +input_buffer = "" +input_active = False + +# Submit button +submit_btn = mcrfpy.Frame(pos=(220, 35), size=(70, 30)) +submit_btn.fill_color = BUTTON_COLOR +submit_btn.outline = 1 +submit_btn.outline_color = mcrfpy.Color(100, 100, 120) +input_panel.children.append(submit_btn) + +submit_text = mcrfpy.Caption(pos=(12, 6), text="Add") +submit_text.font_size = 14 +submit_text.fill_color = TEXT_COLOR +submit_btn.children.append(submit_text) + +# === Label Selection Panel === +labels_panel = mcrfpy.Frame(pos=(PANEL_X, PANEL_Y + 100), size=(300, 350)) +labels_panel.fill_color = PANEL_COLOR +labels_panel.outline = 1 +labels_panel.outline_color = mcrfpy.Color(80, 80, 100) +ui.append(labels_panel) + +labels_title = mcrfpy.Caption(pos=(10, 8), text="Select Label (click to choose):") +labels_title.font_size = 14 +labels_title.fill_color = TEXT_COLOR +labels_panel.children.append(labels_title) + +# Store label button references for updating selection highlight +label_buttons = [] # list of (frame, caption, label_name) + +def create_label_button(label_name, index): + """Create a clickable label button""" + row = index // 2 + col = index % 2 + btn_x = 10 + col * 145 + btn_y = 35 + row * 40 + + btn = mcrfpy.Frame(pos=(btn_x, btn_y), size=(135, 32)) + btn.fill_color = BUTTON_COLOR + btn.outline = 1 + btn.outline_color = mcrfpy.Color(80, 80, 100) + + btn_caption = mcrfpy.Caption(pos=(8, 7), text=label_name[:14]) + btn_caption.font_size = 12 + btn_caption.fill_color = TEXT_COLOR + btn.children.append(btn_caption) + + labels_panel.children.append(btn) + label_buttons.append((btn, btn_caption, label_name)) + + # Set click handler + def on_label_click(x, y, button): + select_label(label_name) + #return True + btn.on_click = on_label_click + + return btn + +def select_label(label_name): + """Select a label for applying to sprites""" + global selected_label + selected_label = label_name + + # Update button colors + for btn, caption, name in label_buttons: + if name == selected_label: + btn.fill_color = BUTTON_SELECTED + else: + btn.fill_color = BUTTON_COLOR + +def add_new_label(label_name): + """Add a new label to the selection list""" + global input_buffer + + # Don't add duplicates or empty labels + label_name = label_name.strip() + if not label_name: + return + + for _, _, existing in label_buttons: + if existing == label_name: + return + + # Create button for new label + create_label_button(label_name, len(label_buttons)) + + # Clear input + input_buffer = "" + input_text.text = "" + + # Select the new label + select_label(label_name) + +# Initialize default labels +for i, label in enumerate(DEFAULT_LABELS): + create_label_button(label, i) + +# Select first label by default +if DEFAULT_LABELS: + select_label(DEFAULT_LABELS[0]) + +# === Event Handlers === + +def on_cell_enter(cell): + """Handle mouse hovering over grid cells""" + global current_sprite_index + + x, y = int(cell[0]), int(cell[1]) + sprite_index = y * GRID_COLS + x + current_sprite_index = sprite_index + + # Update preview + preview_sprite.sprite_index = sprite_index + index_caption.text = f"Index: {sprite_index}" + + # Update label display + if sprite_index in labels: + label_display.text = f"Label: {labels[sprite_index]}" + label_display.fill_color = BUTTON_SELECTED + else: + label_display.text = "Label: (none)" + label_display.fill_color = LABEL_COLOR + +def on_cell_click(cell): + """Handle clicking on grid cells to apply labels""" + global labels + + x, y = int(cell[0]), int(cell[1]) + sprite_index = y * GRID_COLS + x + + if selected_label: + labels[sprite_index] = selected_label + print(f"Labeled sprite {sprite_index} as '{selected_label}'") + + # Update display if this is the current sprite + if sprite_index == current_sprite_index: + label_display.text = f"Label: {selected_label}" + label_display.fill_color = BUTTON_SELECTED + +grid.on_cell_enter = on_cell_enter +grid.on_cell_click = on_cell_click + +# Submit button click handler +def on_submit_click(x, y, button): + """Handle submit button click""" + add_new_label(input_buffer) + #return True + +submit_btn.on_click = on_submit_click + +# Input field click handler (activate text input) +def on_input_click(x, y, button): + """Handle input field click to activate typing""" + global input_active + input_active = True + input_field.fill_color = INPUT_ACTIVE + #return True + +input_field.on_click = on_input_click + +# === Keyboard Handler === + +def on_keypress(key, state): + """Handle keyboard input for text entry""" + global input_buffer, input_active + + if state != "start": + return + + # Escape clears input focus + if key == "Escape": + input_active = False + input_field.fill_color = INPUT_BG + return + + # Enter submits the label + if key == "Return": + if input_active and input_buffer: + add_new_label(input_buffer) + input_active = False + input_field.fill_color = INPUT_BG + return + + # Only process text input when field is active + if not input_active: + return + + # Backspace + if key == "BackSpace": + if input_buffer: + input_buffer = input_buffer[:-1] + input_text.text = input_buffer + return + + # Handle alphanumeric and common characters + # Map key names to characters + if len(key) == 1 and key.isalpha(): + input_buffer += key.lower() + input_text.text = input_buffer + elif key.startswith("Num") and len(key) == 4: + # Numpad numbers + input_buffer += key[3] + input_text.text = input_buffer + elif key == "Space": + input_buffer += " " + input_text.text = input_buffer + elif key == "Minus": + input_buffer += "-" + input_text.text = input_buffer + elif key == "Period": + input_buffer += "." + input_text.text = input_buffer + +scene.on_key = on_keypress + +# === Instructions Caption === +#instructions = mcrfpy.Caption( +# pos=(GRID_X, GRID_Y + GRID_HEIGHT + 20), +# text="Hover: preview sprite | Click grid: apply selected label | Type: add new labels" +#) +#instructions.font_size = 12 +#instructions.fill_color = mcrfpy.Color(150, 150, 160) +#ui.append(instructions) +# +#instructions2 = mcrfpy.Caption( +# pos=(GRID_X, GRID_Y + GRID_HEIGHT + 40), +# text="Console: labels (dict), json.dump(labels, open('labels.json','w'))" +#) +#instructions2.font_size = 12 +#instructions2.fill_color = mcrfpy.Color(150, 150, 160) +#ui.append(instructions2) + +# Activate the scene +scene.activate() + +#print("=== Sprite Labeler Tool ===") +#print(f"Texture: {TEXTURE_PATH}") +#print(f"Grid: {GRID_COLS}x{GRID_ROWS} = {GRID_COLS * GRID_ROWS} sprites") +#print("") +#print("Usage:") +#print(" - Hover over grid to preview sprites") +#print(" - Click a label button to select it") +#print(" - Click on grid cells to apply the selected label") +#print(" - Type in the text field to add new labels") +#print("") +#print("Console commands:") +#print(" labels # View all labels") +#print(" labels[42] = 'custom' # Manual labeling") +#print(" import json") +#print(" json.dump(labels, open('sprite_labels.json', 'w'), indent=2) # Save") +#print(" labels.update(json.load(open('sprite_labels.json'))) # Load")