[Leader Issue] 7DRL 2026 ProcGen Systems #192

Open
opened 2026-01-11 23:35:24 +00:00 by john · 1 comment
Owner

7 Day Roguelike 2026 is in 6 or 7 weeks. In 2025, I submitted my first complete; in 2026, I want to submit something remarkable.

Findings from last year: The simple, slapped-together BSP algorithm I used was a hindrance to my game's scope and reliability.

Exposing the excellent TCOD algorithms for BSP, noise, and height map editing will allow me to slap together workable levels in minutes, and have options towards the middle/end of the jam for fine-tuning the levels for being more interesting.

The full spec is pretty extensive, and calls for this implementation order:

  • HeightMap - a "manually" editable array of points.
  • Methods to apply a HeightMap to Grids (walkable, transparent) and Grid Layers (tiles, colors)
  • BSP, BSPNode, and BSPMap objects - division and traversal algorithms exposed in a way that allows the same systems to turn these into Grid/GridLayer content
  • NoiseSource and NoiseSample objects - noise algorithm configurations stored in a source object, and sampled for a region to become tiles.

End result: a composable system that can mix hills/pits/rivers/erosion (from HeightMap), BSP rooms / corridors, Voronoi regions, and noise for diverse and complex levels.

This issue is to track overall progress and comment on what is and is not available for 7DRL 2026 - for turning success of implementing components into a draft cookbook for applying the features during the jam.

7 Day Roguelike 2026 is in 6 or 7 weeks. In 2025, I submitted my first complete; in 2026, I want to submit something **remarkable**. Findings from last year: The simple, slapped-together BSP algorithm I used was a hindrance to my game's scope and reliability. Exposing the excellent TCOD algorithms for BSP, noise, and height map editing will allow me to slap together workable levels in minutes, and have options towards the middle/end of the jam for fine-tuning the levels for being more interesting. The full spec is pretty extensive, and calls for this implementation order: * `HeightMap` - a "manually" editable array of points. * Methods to apply a HeightMap to Grids (walkable, transparent) and Grid Layers (tiles, colors) * `BSP`, `BSPNode`, and `BSPMap` objects - division and traversal algorithms exposed in a way that allows the same systems to turn these into Grid/GridLayer content * `NoiseSource` and `NoiseSample` objects - noise algorithm configurations stored in a source object, and sampled for a region to become tiles. End result: a composable system that can mix hills/pits/rivers/erosion (from HeightMap), BSP rooms / corridors, Voronoi regions, and noise for diverse and complex levels. This issue is to track overall progress and comment on what is and is not available for 7DRL 2026 - for turning success of implementing components into a draft cookbook for applying the features during the jam.
Author
Owner

Sub-Issue Breakdown

The procedural generation system has been broken down into 18 granular issues with dependencies configured.

Phase 1: HeightMap Foundation

  • #193 - HeightMap - Core class with scalar operations ⬅️ START HERE
  • #194 - HeightMap - Combination operations (depends on #193)
  • #195 - HeightMap - Terrain generation methods (depends on #193)
  • #196 - HeightMap - Query methods (depends on #193)
  • #197 - HeightMap - Threshold operations (depends on #193)
  • #198 - HeightMap - kernel_transform (depends on #193)

Phase 2: Grid/Layer Application

  • #199 - Grid - apply_threshold and apply_ranges (depends on #193)
  • #200 - TileLayer - apply_threshold and apply_ranges (depends on #193)
  • #201 - ColorLayer - apply_threshold, apply_gradient, apply_ranges (depends on #193, #197)

Phase 3: BSP System

  • #202 - BSP - Core class with splitting ⬅️ CAN START IN PARALLEL
  • #203 - BSPNode - Lightweight node reference (depends on #202)
  • #204 - BSP - Iteration (leaves, traverse) (depends on #202, #203)
  • #205 - BSP - Query methods (find, contains) (depends on #202, #203)
  • #206 - BSP.to_heightmap and BSPMap class (depends on #193, #202, #204)

Phase 4: Noise System

  • #207 - NoiseSource - Core class with point queries ⬅️ CAN START IN PARALLEL
  • #208 - NoiseSource.sample and NoiseSample class (depends on #193, #207)

Phase 5: Integration

  • #209 - HeightMap - Direct source sampling (add_noise, add_bsp) (depends on #193, #202, #207)

Phase 6: Advanced (Lower Priority)

  • #210 - BSP.find_path - Room connectivity graph (depends on #202, #204)

Suggested Implementation Order

Parallel Track A (HeightMap):

  1. #193#194#195#196#197#198

Parallel Track B (BSP):

  1. #202#203#204#205

Parallel Track C (Noise):

  1. #207

After foundations complete:

Nice to have:

  • #210 (BSP.find_path)

Spec Corrections (from design session)

  1. Noise coordinate format: Uses (origin, size) not ((x1,y1), (x2,y2)) - consistent with McRogueFace conventions
  2. Removed: NoiseSample.resample() and NoiseSample.zoom() - users can achieve variants via direct sampling
  3. Added: HeightMap.kernel_transform() with dict-based interface
  4. BSP.find_path: Needs design work on adjacency graph - lower priority

Full specification: docs/PROCEDURAL_GENERATION_SPEC.md

## Sub-Issue Breakdown The procedural generation system has been broken down into 18 granular issues with dependencies configured. ### Phase 1: HeightMap Foundation - #193 - **HeightMap - Core class with scalar operations** ⬅️ START HERE - #194 - HeightMap - Combination operations (depends on #193) - #195 - HeightMap - Terrain generation methods (depends on #193) - #196 - HeightMap - Query methods (depends on #193) - #197 - HeightMap - Threshold operations (depends on #193) - #198 - HeightMap - kernel_transform (depends on #193) ### Phase 2: Grid/Layer Application - #199 - Grid - apply_threshold and apply_ranges (depends on #193) - #200 - TileLayer - apply_threshold and apply_ranges (depends on #193) - #201 - ColorLayer - apply_threshold, apply_gradient, apply_ranges (depends on #193, #197) ### Phase 3: BSP System - #202 - **BSP - Core class with splitting** ⬅️ CAN START IN PARALLEL - #203 - BSPNode - Lightweight node reference (depends on #202) - #204 - BSP - Iteration (leaves, traverse) (depends on #202, #203) - #205 - BSP - Query methods (find, contains) (depends on #202, #203) - #206 - BSP.to_heightmap and BSPMap class (depends on #193, #202, #204) ### Phase 4: Noise System - #207 - **NoiseSource - Core class with point queries** ⬅️ CAN START IN PARALLEL - #208 - NoiseSource.sample and NoiseSample class (depends on #193, #207) ### Phase 5: Integration - #209 - HeightMap - Direct source sampling (add_noise, add_bsp) (depends on #193, #202, #207) ### Phase 6: Advanced (Lower Priority) - #210 - BSP.find_path - Room connectivity graph (depends on #202, #204) --- ### Suggested Implementation Order **Parallel Track A (HeightMap):** 1. #193 → #194 → #195 → #196 → #197 → #198 **Parallel Track B (BSP):** 1. #202 → #203 → #204 → #205 **Parallel Track C (Noise):** 1. #207 **After foundations complete:** - #199, #200, #201 (Grid/Layer application) - #206 (BSP.to_heightmap) - #208 (NoiseSample) - #209 (Direct sampling) **Nice to have:** - #210 (BSP.find_path) --- ### Spec Corrections (from design session) 1. **Noise coordinate format**: Uses `(origin, size)` not `((x1,y1), (x2,y2))` - consistent with McRogueFace conventions 2. **Removed**: `NoiseSample.resample()` and `NoiseSample.zoom()` - users can achieve variants via direct sampling 3. **Added**: `HeightMap.kernel_transform()` with dict-based interface 4. **BSP.find_path**: Needs design work on adjacency graph - lower priority Full specification: `docs/PROCEDURAL_GENERATION_SPEC.md`
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
john/McRogueFace#192
No description provided.