Complete D&D 5th Edition Rules Engine - A comprehensive Python package implementing all core D&D 5e mechanics and official rules. UI-agnostic design works with any interface (pygame, web, CLI, Qt). Includes 8.7MB of bundled JSON data (2000+ files) with 332 monsters, 319 spells, and complete game rules. 100% standalone - no external APIs required, works offline!
A complete Python package implementing D&D 5th Edition core rules and mechanics, including official encounter system, gold rewards, experience tables, and standalone character/monster loaders.
This package contains all game logic for D&D 5e and is UI-agnostic - use it with pygame, ncurses, web, Qt, or any other interface.
Looking for examples or complete applications?
-
DnD5e-Test - Demonstration scripts and examples
- 10+ combat scripts with random character generation
- Official D&D 5e encounter builder examples
- Character and monster creation demos
- All scripts work standalone with just
pip install dnd-5e-core
-
DnD-5th-Edition-API - Complete applications
- Full-featured ncurses interface (terminal-based)
- Pygame dungeon crawler with real-time combat
- PyQt5 Wizardry-style interface
- Character management, inventory, shops, and more
📝 Enhanced PyPI Documentation:
- Updated description highlighting all v0.1.7 features
- Added links to example projects and full applications
- Better showcasing of standalone capabilities
🎯 All Features from v0.1.7 (fully documented):
- Gold Rewards System: Official treasure tables from DMG (levels 1-20)
- Encounter Builder: DMG-compliant encounter generation with balanced difficulty
- Standalone Loaders: Character and monster loading without external dependencies
- All D&D 5e Rules: 100% of core mechanics in the package
🎮 Integrated D&D 5e Data: The package includes 8.7 MB of D&D 5e JSON data (2000+ files):
- 332 monsters with complete stats and abilities
- 319 spells with full descriptions and mechanics
- 65 weapons with damage, properties, and ranges
- 30 armors with AC calculations
- 237 equipment items
- Plus: races, classes, traits, features, and more!
🐉 Extended Monsters from 5e.tools: Access to 89+ additional monsters:
- Monsters not in the official API (Orc Eye of Gruumsh, Goblin Boss, etc.)
- 47 monsters with complete actions and abilities implemented
- Support for downloading monster tokens/images
- Advanced search and filtering capabilities
📦 100% Standalone - No external API or database required - all data is bundled and auto-detected.
Core Mechanics:
- Entities: Monster and Character classes with full D&D 5e mechanics
- Races & Subraces: All official races with ability bonuses, traits, proficiencies
- Classes: All character classes with spellcasting, proficiencies
- Equipment: Weapons (with properties, ranges), Armor (AC calculation), Potions
- Spells: Complete spellcasting system with spell slots, cantrips, DC
- Combat: Actions, Multi-attacks, Special Abilities, Conditions
- Abilities: Six core abilities (STR, DEX, CON, INT, WIS, CHA) with modifiers
- Saving Throws: Full saving throw system with proficiencies
Official D&D 5e Rules (NEW in v0.1.7):
- 📊 Encounter Tables: Official DMG encounter tables (levels 1-20)
- 💰 Gold Rewards: Treasure per encounter from DMG
- ⚔️ Challenge Rating: Accurate encounter difficulty calculation
- 📈 Experience System: XP tables and level progression
- 🎲 Encounter Builder: Generate balanced encounters by party level
Standalone Utilities (NEW in v0.1.7):
- Character Generator: Create random characters without external dependencies
- Monster Loader: Load monsters from bundled data or API
- Data Collections: Access all D&D 5e data easily
- ✅ Bundled JSON Data: 2000+ D&D 5e data files included (8.7 MB)
- ✅ Auto-Detection: No configuration needed - data is found automatically
- ✅ Offline Mode: Works without internet connection
- ✅ Complete: Monsters, spells, weapons, armors, classes, races, and more
- ✅ Extended: 89+ additional monsters from 5e.tools
pip install dnd-5e-coreOr for development:
git clone https://github.com/codingame-team/dnd-5e-core.git
cd dnd-5e-core
pip install -e .[dev]from dnd_5e_core.data import simple_character_generator, load_monsters_database
# Generate random characters without external dependencies
fighter = simple_character_generator(level=5, class_name="fighter", name="Conan")
wizard = simple_character_generator(level=5, class_name="wizard")
print(f"{fighter.name} - Level {fighter.level} {fighter.class_type.name}")
print(f"HP: {fighter.hit_points}/{fighter.max_hit_points}")
# Load all monsters at once
monsters = load_monsters_database()
print(f"Loaded {len(monsters)} monsters")from dnd_5e_core.mechanics import (
select_monsters_by_encounter_table,
get_encounter_gold,
ENCOUNTER_TABLE,
XP_LEVELS
)
# Generate balanced encounter for a level 5 party
party_levels = [5, 5, 4, 6]
monsters, encounter_type = select_monsters_by_encounter_table(
encounter_level=5,
available_monsters=monsters_db,
allow_pairs=True
)
print(f"Encounter: {encounter_type}")
print(f"Monsters: {[m.name for m in monsters]}")
# Get gold reward
gold = get_encounter_gold(5)
print(f"Treasure: {gold} gp")
# Check XP table
xp_for_level_5 = XP_LEVELS[5]
print(f"XP needed for level 5: {xp_for_level_5}")from dnd_5e_core.data import load_monster, list_monsters, load_spell
# List all available monsters
monsters = list_monsters()
print(f"Total monsters: {len(monsters)}") # 332
# Load a specific monster
goblin = load_monster('goblin')
print(f"Name: {goblin['name']}")
print(f"HP: {goblin['hit_points']}")
print(f"CR: {goblin['challenge_rating']}")
# Load a spell
fireball = load_spell('fireball')
print(f"Spell: {fireball['name']}, Level: {fireball['level']}")Note: Data directory is auto-detected - no configuration needed!
from dnd_5e_core.entities import Character
from dnd_5e_core.races import Race
from dnd_5e_core.classes import ClassType
from dnd_5e_core.abilities import Abilities
# Load race and class from API
race = Race.load_from_api("elf")
class_type = ClassType.load_from_api("wizard")
# Create abilities
abilities = Abilities(
strength=10,
dexterity=14,
constitution=12,
intelligence=16,
wisdom=13,
charisma=8
)
# Create character
wizard = Character(
name="Gandalf",
race=race,
class_type=class_type,
abilities=abilities,
level=1,
hit_points=8,
max_hit_points=8,
gold=100
)
# Equip weapon
from dnd_5e_core.equipment import Weapon
staff = Weapon.load_from_api("quarterstaff")
wizard.inventory.append(staff)
staff.equipped = True
print(f"{wizard.name} - Level {wizard.level} {wizard.race.name} {wizard.class_type.name}")
print(f"AC: {wizard.armor_class}, HP: {wizard.hit_points}/{wizard.max_hit_points}")from dnd_5e_core.entities import Monster
# Load from API
orc = Monster.load_from_api("orc")
print(f"{orc.name} - CR {orc.challenge_rating}")
print(f"AC: {orc.armor_class}, HP: {orc.hit_points}")
print(f"Actions: {[a.name for a in orc.actions]}")from dnd_5e_core.entities import get_extended_monster_loader
# Load the monster loader
loader = get_extended_monster_loader()
# Search for monsters
goblins = loader.search_monsters(name_contains="goblin", min_cr=1, max_cr=3)
print(f"Found {len(goblins)} goblin variants")
# Get a specific monster with full data
orc_eye = loader.get_monster_by_name("Orc Eye of Gruumsh")
print(f"{orc_eye['name']} - CR {orc_eye['cr']}")
print(f"HP: {orc_eye['hp']['average']}, Source: {orc_eye['source']}")
# Get statistics
stats = loader.get_stats()
print(f"Total extended monsters: {stats['total']}")
print(f"Sources: {list(stats['by_source'].keys())}")
# Download monster tokens
from dnd_5e_core.utils import download_monster_token
download_monster_token("Orc Eye of Gruumsh", source="MM", save_folder="tokens")from dnd_5e_core.combat import CombatSystem
combat = CombatSystem()
# Add participants
combat.add_character(wizard)
combat.add_monster(orc)
# Start combat
combat.start()
# Combat round
while not combat.is_finished():
current_actor = combat.current_turn()
if isinstance(current_actor, Character):
# Character attacks monster
target = combat.get_monsters()[0]
action = current_actor.actions[0]
damage = current_actor.attack(target, action)
print(f"{current_actor.name} attacks {target.name} for {damage} damage!")
elif isinstance(current_actor, Monster):
# Monster attacks character
target = combat.get_characters()[0]
action = current_actor.actions[0]
damage = current_actor.attack(target, action)
print(f"{current_actor.name} attacks {target.name} for {damage} damage!")
combat.next_turn()
winners = combat.get_winners()
print(f"Combat finished! Winners: {[w.name for w in winners]}")from dnd_5e_core.spells import Spell
# Character must have spellcasting ability
if wizard.is_spell_caster:
# Load spell from API
fireball = Spell.load_from_api("fireball")
# Check if can cast
if wizard.can_cast(fireball):
# Cast spell at target
damage = wizard.cast_attack(orc, fireball)
print(f"{wizard.name} casts Fireball on {orc.name} for {damage} damage!")
# Saving throw
if orc.saving_throw(dc_type=fireball.dc_type, dc_value=wizard.dc_value):
print(f"{orc.name} succeeded saving throw!")This package follows separation of concerns:
- All D&D 5e game rules and mechanics
- Character/Monster creation and management
- Combat resolution and damage calculation
- Spell casting and effects
- Equipment management
- Saving throws, ability checks
- Experience and leveling
- Data loading from D&D 5e API
- User interface (no pygame, no ncurses, no GUI)
- Game loop management
- Graphics rendering
- Sound effects
- Input handling
- Save file management (provides serialization only)
- UI layer (console, GUI, web, etc.)
- Game state management
- User input handling
- Rendering and display
- Save/load game state using provided serialization
# Your game imports dnd-5e-core for game logic
from dnd_5e_core.entities import Character, Monster
from dnd_5e_core.combat import CombatSystem
# You provide the UI
import pygame # or curses, or tkinter, or web framework
# Game loop (you control this)
while running:
# Handle input (your code)
key = get_user_input()
# Call game logic (dnd-5e-core)
if key == "attack":
damage = player.attack(monster)
# Render (your code)
render_game_state(player, monster)The package can load data from:
- D&D 5e API (https://www.dnd5eapi.co/) - Default
- Local JSON files - For offline mode
- Custom data - Implement your own loader
pytest tests/See /docs folder for detailed documentation:
- Entity System
- Combat Mechanics
- Spellcasting System
- Equipment Guide
- Extended Monsters from 5e.tools - See EXTENDED_MONSTERS_MIGRATION.md
- API Reference
MIT License - See LICENSE file for details
See CONTRIBUTING.md for guidelines.
Based on D&D 5th Edition rules © Wizards of the Coast. This is a fan-made implementation for educational purposes.