From godot-prompter
Implements procedural generation in Godot 4.3+ with seeded randomness, FastNoiseLite terrain, BSP dungeons, cellular automata caves, and wave function collapse using GDScript and C#.
How this skill is triggered — by the user, by Claude, or both
Slash command
/godot-prompter:procedural-generationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
All examples target Godot 4.3+ with no deprecated APIs. GDScript is shown first, then C#.
All examples target Godot 4.3+ with no deprecated APIs. GDScript is shown first, then C#.
Related skills: 2d-essentials for TileMapLayer usage, 3d-essentials for 3D terrain meshes, math-essentials for vectors and transforms, godot-optimization for chunk loading and performance.
Always use seeds for reproducible generation. This enables shareable seeds, replay, and deterministic testing.
# RandomNumberGenerator — per-instance, seedable
var rng := RandomNumberGenerator.new()
func generate_level(level_seed: int) -> void:
rng.seed = level_seed
var width: int = rng.randi_range(20, 40)
var height: int = rng.randi_range(15, 30)
var enemy_count: int = rng.randi_range(3, 8)
var treasure_chance: float = rng.randf_range(0.05, 0.15)
# AVOID: Global randf()/randi() — not reproducible across calls
# USE: rng.randf(), rng.randi(), rng.randf_range(), rng.randi_range()
private RandomNumberGenerator _rng = new();
public void GenerateLevel(ulong levelSeed)
{
_rng.Seed = levelSeed;
int width = _rng.RandiRange(20, 40);
int height = _rng.RandiRange(15, 30);
int enemyCount = _rng.RandiRange(3, 8);
float treasureChance = _rng.RandfRange(0.05f, 0.15f);
}
Tip: Generate a seed from a string for shareable level codes:
var seed: int = "MyLevel".hash()
FastNoiseLite for height maps, biome distribution, 2D terrain. Key params: noise_type (Perlin / Simplex / Cellular / Value), frequency (lower = larger features), seed. For terrain, sample noise at each tile coord, threshold the value to pick a tile.
See references/noise-generation.md for the basic noise-map recipe, noise-type reference table, and 2D terrain + TileMapLayer walkthrough.
Binary Space Partitioning recursively splits a rectangle into smaller rectangles, carves a room inside each leaf, connects siblings with corridors. Produces grid-aligned room-based dungeons (think roguelike).
See references/bsp-dungeons.md for the full recursive partition + room placement + corridor connection algorithm in GDScript + C#.
Fill a grid with random walls/floors at ~45% density, then iterate "a cell becomes a wall if ≥ 5 of 8 neighbors are walls" 4-5 times. The result is organic cave shapes — no straight corridors.
See references/cellular-automata.md for the full GDScript + C# implementation with TileMapLayer integration.
WFC is a constraint solver: given a tile set with adjacency rules, pick the lowest-entropy cell, collapse it to a valid tile, propagate constraints, repeat. Produces tile-rule-respecting output but is non-trivial to implement.
See references/wave-function-collapse.md for concept overview and a simplified GDScript + C# implementation.
| Symptom | Cause | Fix |
|---|---|---|
| Same level every time | Not seeding the RNG | Set rng.seed before generation |
| Different results on different platforms | Using global randf() / randi() | Use a dedicated RandomNumberGenerator instance |
| Noise looks blocky | Frequency too high | Lower frequency (try 0.01–0.05) |
| Caves are all wall or all floor | fill_chance too extreme or too few iterations | Use fill_chance 0.40–0.50 and 4–6 iterations |
| BSP rooms overlap | Split position too close to edge | Ensure min_room_size buffer in split calculation |
| WFC contradiction (no valid tile) | Adjacency rules too restrictive | Add more allowed neighbors or implement backtracking |
| Generation takes too long | Processing entire map in one frame | Use await get_tree().process_frame to spread across frames, or use a thread |
RandomNumberGenerator, never global randf()/randi()FastNoiseLite frequency and octaves are tuned for the game's tile/world scalenpx claudepluginhub jame581/godotprompter --plugin godot-prompterUnity procedural generation design-to-code translation. Noise-based terrain/placement, tile & grid systems, dungeon/room generation, seed & reproducibility, content budget & constraint systems, runtime vs baked generation. DESIGN INTENT format: INTENT/WRONG/RIGHT/SCAFFOLD/DESIGN HOOK. Based on Unity 6.3 LTS.
Designs procedural content systems with seeds, constraints, and validation gates for game content generation. Useful when generating levels, loot, encounters, or world content that needs determinism and quality control.
Provides Godot 4 GDScript patterns for architecture, signals, scenes, state machines, and optimization. Useful for building games, game systems, and best practices.