×
Назад в хаб

Ren'Py RPG Framework

Мощная модульная система для создания пошаговых RPG на движке Ren'Py

О проекте

Проект в активной разработке!!!

Ren'Py RPG Framework - это мощная модульная системы для создания пошаговых ролевых игр, построенная на базе визуальной новелловой системы Ren'Py. Проект демонстрирует глубокую интеграцию Python с Ren'Py и реализацию сложной игровой механики в рамках движка, изначально предназначенного для визуальных новелл.

Основная философия проекта - "Конструктор, а не код". Система позволяет создавать контент через декларативное описание, а не программирование. Как Lego - вы берете готовые блоки (эффекты, навыки, диалоги) и собираете сложные сценарии.

Фреймворк включают в себя систему персонажей, инвентарь, экипировку, боевую систему с эффектами и статусами, скриптовый движок для диалогов и событий, а также систему прокачки и развития персонажа.

Система скриптов

Мощная кастомная система скриптов, условий и триггеров, позволяющая полноценно манипулировать ходом боя, от банального проигрывания диалога, до изменения хар-тик, применения эффектов и тд.

Простая архитектура

Фреймворк не требует никаких познаний в программировании, достаточно скопировать шаблон, поменять значения, и получить результат.

RPG механики

Легко кастомизируемые и добавляемые системы: Типов и атрибутов урона, сопротивлений, уязвимостей и неуязвимостей, физических и магических критических попаданий, статус эффекты, баффы и дебаффы, и полноценная 1vs1 боевая система.

Скриншоты и демонстрация

Визуальные элементы и геймплей проекта

Примеры реализации

Конкретные примеры кода из проекта с пояснениями

Создание эффекта яда

Реализация статусного эффекта "Яд", который наносит периодический урон в течение нескольких ходов.

# Создание эффекта яда
poison_effect = DamageOverTimeEffect(
    name="Яд",
    duration=3,
    icon="icons/poison.png",
    damage=5,
    damage_type="earth",
    description="Наносит 5 урона землей каждый ход",
    target="enemy",
    animation="poison_anim",
    sound="audio/poison.mp3"
)

# Регистрация эффекта в системе
register_effect(poison_effect)
Как это работает:

Эффект автоматически наносит урон в конце каждого хода цели. Система сама обрабатывает длительность, визуальные эффекты и звуки.

Реализация навыка "Огненный шар"

Создание сложного заклинания с уроном, визуальными эффектами и перезарядкой.

# Создание навыка "Огненный шар"
fireball = Skill(
    name="Огненный шар",
    min_damage=20,
    max_damage=30,
    damage_type="fire",
    cost=15,
    animation="fireball_anim",
    sound="audio/fireball.mp3",
    voice_sound="audio/voice/fire.mp3",
    icon="images/icons/fireball.png",
    description="Выпускает сгусток огненной энергии",
    action_description="запускает сгусток огненной энергии!",
    player_phrase="Превратись в пепел!",
    cooldown=4
)

# Регистрация навыка
register_skill(fireball)
Как это работает:

Навык автоматически интегрируется в боевую систему, включая расчет урона, потребление маны, визуальные эффекты и систему перезарядки.

Создание скрипта для диалога при низком HP

Реализация реактивного диалога, который срабатывает при определенных условиях в бою.

# Создание скрипта для реакции на низкое HP врага
script_engine.register_script(
    script_id="goblin_low_hp",
    trigger="enemy_hp_low",
    actions=[{
        "action": "dialogue",
        "lines": [
            ("Гоблин", "Ай! Моя спина! Ты пожалеешь об этом!"),
            ("Эмили", "Закрой свою грязную пасть, тварь!")
        ]
    }],
    conditions={"hp_percent_less": 50},
    priority=5
)
Как это работает:

Скрипт автоматически срабатывает, когда здоровье врага падает ниже 50%. Система сама проверяет условия и запускает диалог.

Создание сложного предмета с несколькими эффектами

Реализация предмета, который сочетает в себе несколько различных эффектов при использовании.

# Создание сложного зелья с несколькими эффектами
combat_stimulant = Consumable(
    name="Боевой стимулятор",
    icon="images/items/combat_stimulant.png",
    description="Добавляет адреналин и накладывает яд на оружие",
    value=60,
    effects=[
        AddAdrenalineEffect(15),
        ApplyStatusEffect(weak_poison_effect, "enemy")
    ]
)

# Добавление в базу данных предметов
item_db["Боевой стимулятор"] = combat_stimulant
Как это работает:

При использовании предмета система автоматически применяет все эффекты по очереди. Каждый эффект имеет свою логику и цель применения.