Procedural Generation¶
Learn how to create dynamically generated content for endless replayability.
Coming Soon¶
This guide is under development and will cover:
Procedural dungeon generation
Random enemy spawning
Dynamic loot tables
Procedural quest generation
Name generators
Balanced stat generation
Example Snippet¶
import random
from barebones_rpg import Enemy, Stats, Location
def generate_enemy(level, enemy_type=None):
"""Generate a random enemy scaled to level."""
types = ["Goblin", "Orc", "Troll", "Dragon", "Skeleton"]
enemy_type = enemy_type or random.choice(types)
# Scale attributes based on level
base_str = 8 + level * 2
base_con = 6 + level * 2
base_dex = 10 + random.randint(-2, 2)
return Enemy(
name=f"Level {level} {enemy_type}",
stats=Stats(
strength=base_str,
constitution=base_con,
dexterity=base_dex,
intelligence=5 + level,
charisma=5,
base_max_hp=20 + level * 10,
hp=30 + level * 15
),
exp_reward=level * 25,
gold_reward=level * 10
)
def generate_dungeon_floor(floor_number):
"""Generate a random dungeon floor."""
width, height = 40, 30
location = Location(
name=f"Dungeon Floor {floor_number}",
width=width,
height=height
)
# Place walls randomly
num_walls = random.randint(20, 40)
for _ in range(num_walls):
x = random.randint(1, width - 2)
y = random.randint(1, height - 2)
tile = location.get_tile(x, y)
tile.walkable = False
tile.tile_type = "wall"
# Spawn enemies
num_enemies = 3 + floor_number
enemies = []
for _ in range(num_enemies):
enemy = generate_enemy(floor_number)
x = random.randint(1, width - 2)
y = random.randint(1, height - 2)
location.add_entity(enemy, x, y)
enemies.append(enemy)
return location, enemies
Check back soon for the complete guide!