Мощная модульная система для создания пошаговых RPG на движке Ren'Py
Ren'Py RPG Framework - это мощная модульная системы для создания пошаговых ролевых игр, построенная на базе визуальной новелловой системы Ren'Py. Проект демонстрирует глубокую интеграцию Python с Ren'Py и реализацию сложной игровой механики в рамках движка, изначально предназначенного для визуальных новелл.
Основная философия проекта - "Конструктор, а не код". Система позволяет создавать контент через декларативное описание, а не программирование. Как Lego - вы берете готовые блоки (эффекты, навыки, диалоги) и собираете сложные сценарии.
Фреймворк включают в себя систему персонажей, инвентарь, экипировку, боевую систему с эффектами и статусами, скриптовый движок для диалогов и событий, а также систему прокачки и развития персонажа.
Мощная кастомная система скриптов, условий и триггеров, позволяющая полноценно манипулировать ходом боя, от банального проигрывания диалога, до изменения хар-тик, применения эффектов и тд.
Фреймворк не требует никаких познаний в программировании, достаточно скопировать шаблон, поменять значения, и получить результат.
Легко кастомизируемые и добавляемые системы: Типов и атрибутов урона, сопротивлений, уязвимостей и неуязвимостей, физических и магических критических попаданий, статус эффекты, баффы и дебаффы, и полноценная 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 врага
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
При использовании предмета система автоматически применяет все эффекты по очереди. Каждый эффект имеет свою логику и цель применения.