Чтобы создать визуальную новеллу, сначала пишут сценарий со схемой развилок, потом выбирают движок и собирают в нём сцены: фон, персонажа, реплику и кнопки выбора. Новичку без кода хватит онлайн-конструктора, для классической новеллы есть Ren’Py, а Godot подойдёт, если в истории будут мини-игры или своя механика.
Ниже разберём выбор движка и соберём рабочий прототип новеллы в Godot 4: с репликами, развилкой и двумя ветками. Если вы ещё сравниваете движки и языки для игр вообще, начните со статьи как научиться создавать игры.
Что подготовить до первой строчки кода

Визуальная новелла прежде всего текст. Код и картинки только подают историю, поэтому начинать стоит со сценария.
Минимальный набор для первой главы:
| Что нужно | Что именно подготовить | Кто обычно делает |
|---|---|---|
| Сценарий | Реплики по сценам, имена говорящих, места выбора | Сценарист или нарративный дизайнер |
| Схема развилок | Какой выбор куда ведёт и где ветки сходятся обратно | Тот же автор, на бумаге или в любой программе для схем |
| Фоны | Одна картинка на каждую локацию | 2D-художник |
| Спрайты персонажей | Персонаж в полный рост или по пояс, 3–5 эмоций | 2D-художник |
| Звук | Фоновая музыка и пара шумов вроде шагов и двери | Композитор или бесплатные библиотеки звуков |
Как пишут истории для игр и чем сценарист отличается от нарративного дизайнера, мы разбирали в обзорах профессий игровой сценарист и нарративный дизайнер. Про рисованную часть есть материал кто такой 2D-художник.
Совет по развилкам: на первую новеллу берите один выбор на главу и не больше двух веток. Каждая новая развилка удваивает объём текста, и автор бросает проект на середине, не дописав ветки.
Как написать сюжет и сценарий новеллы
Сюжет новеллы удобно собирать от развилок. Сначала решите, какие выборы будут у игрока и к каким концовкам они ведут, потом пишите сцены между ними.
- Сформулируйте завязку в одном предложении. Кто герой, чего он хочет и что ему мешает. Например: «Аня нашла письмо без обратного адреса и решает, открывать ли его при друге».
- Нарисуйте схему. Прямоугольник на сцену, ромб на выбор, стрелки между ними. Для первой главы хватит 5–7 сцен и одного ромба.
- Решите, сходятся ли ветки. Если после выбора ветки снова встречаются в общей сцене, текста меньше. Если расходятся до конца, каждая концовка требует своей главы.
- Пишите сцены репликами. Одна реплика помещается в окно диалога, это 1–3 строки на экране. Длинный монолог режьте на несколько щелчков.
Удобнее всего записывать сценарий сразу в том виде, в каком его прочитает движок:
| Сцена | Кто говорит | Реплика | Фон, эмоция, звук |
|---|---|---|---|
| start | Аня | Ты всё-таки пришёл. | Комната, Аня встревожена |
| start | Макс | Обещал же. Что случилось? | Тот же фон |
| start | Выбор | Открыть письмо → open; Отложить до утра → later | Музыка стихает |
Такую таблицу почти без правок переносят в код: в примере ниже столбец «Сцена» становится ключом словаря, а реплики идут парами «имя, текст». Если сценарий пишет один человек, а собирает другой, таблица заодно снимает споры о том, где какая картинка.
Писать сценарий можно в любом текстовом редакторе или таблице. Отдельная программа для сюжета нужна, когда веток становится больше десятка и схема перестаёт помещаться на лист.
Канал основателя Checkroi Вани Буявца3 800 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединитьсяКакой движок выбрать для визуальной новеллы

Программ для создания новелл много, но почти все сводятся к трём подходам: конструктор в браузере, специализированный движок и универсальный движок с плагином.
| Инструмент | Что это | Нужно ли программировать | Кому подходит |
|---|---|---|---|
| VetkaNovel | Бесплатный онлайн-конструктор, работает и с телефона | Нет | Тем, кто хочет рассказать историю за вечер |
| Ren’Py | Бесплатный движок, созданный под визуальные новеллы, на ноябрь 2026 актуальна версия 8.5.3 | Простой сценарный язык, сложная логика пишется на Python | Классической новелле с текстом, выборами и сохранениями |
| Godot | Бесплатный универсальный движок, на ноябрь 2026 актуальна версия 4.7.2 | Да, язык GDScript или готовый плагин Dialogic | Новелле с мини-играми, картой, инвентарём, своим интерфейсом |
| Naninovel | Платное расширение для Unity | Свой сценарный язык поверх Unity | Тем, кто уже работает в Unity |
Сделать новеллу на телефоне проще всего в конструкторе: VetkaNovel открывается в мобильном браузере. У Godot есть редактор для Android, но собирать новеллу удобнее на компьютере. Если выбираете не только для новеллы, загляните в обзор программ для создания игр на компьютер.
Ren’Py проще на старте: сцены там пишутся почти как пьеса, сохранения и меню уже встроены. Сам движок написан на Python, и сложную логику тоже пишут на нём. Азы языка пригодятся, начать можно с примеров Hello World на Python.
Godot требует больше работы в начале, но не упирается в жанр. Когда в новелле появляется головоломка, бой или прокачка героя, на Godot её не придётся переносить на другой движок. Программы обучения по нему собраны в каталоге в разделе курсы по Godot.
Как создать новеллу в Godot: пошаговая инструкция
Кадры ниже сняты в веб-редакторе Godot 4.7.2. Он открывается в браузере без установки и без регистрации, а меню у него те же, что у обычной программы. На первом экране веб-редактор сам предупреждает, что предназначен для обучения и экспериментов и для рабочих проектов не рекомендуется. По документации Godot у него нет экспорта игры, поэтому для готовой сборки всё равно понадобится версия для компьютера.
- Создайте проект. В менеджере проектов нажмите «Создать новый проект», впишите имя и оставьте отрисовщик «Совместимость»: для 2D-новеллы его хватает, а в браузере работает только он. Нажмите «Создать».

- Выберите корневой узел. На панели «Сцена» нажмите «Пользовательский интерфейс». Появится узел Control, он займёт весь экран игры.
- Прикрепите скрипт. Нажмите на значок свитка с плюсом над деревом узлов. Откроется окно «Прикрепить скрипт узла»: язык GDScript, путь вроде
res://control.gd. Нажмите «Создать».

- Замените шаблон своим кодом. Godot откроет вкладку «Скрипт» с заготовкой. Удалите её и вставьте код из следующего раздела целиком.

- Сохраните сцену и запустите игру. Сохраните сцену сочетанием Ctrl+S (на Mac Cmd+S), затем нажмите треугольник «Запустить проект» в правом верхнем углу или клавишу F5 (на Mac Cmd+B). При первом запуске Godot спросит, какую сцену считать главной: нажмите «Выбрать текущую сцену».
- Пройдите главу. Реплики листаются кликом мыши или клавишей Enter. На развилке появятся две кнопки, и каждая уводит в свою ветку.

После нажатия «Открыть письмо» история уходит в ветку open, после второй кнопки в ветку later. Когда реплики ветки кончаются, на экране появляется «Конец главы».

Код новеллы на GDScript
Весь прототип умещается в один скрипт. Мы запускали его в Godot 4.7.2: кадры выше сняты с этого кода без правок.
extends Control
# Сценарий: метка → список реплик. Словарь с ключом "choice" — развилка.
var story := {
"start": [
["Аня", "Ты всё-таки пришёл."],
["Макс", "Обещал же. Что случилось?"],
["Аня", "Я нашла письмо без обратного адреса. Откроем?"],
{"choice": [["Открыть письмо", "open"], ["Отложить до утра", "later"]]},
],
"open": [
["Аня", "Тут адрес и время: завтра, семь утра."],
["Макс", "Значит, идём вместе."],
],
"later": [
["Аня", "Ладно. Но я его всё равно открою, когда ты уйдёшь."],
],
}
var label := "start"
var index := 0
var name_label := Label.new()
var text_label := Label.new()
var choices := VBoxContainer.new()
func _ready() -> void:
var box := VBoxContainer.new()
box.set_anchors_and_offsets_preset(Control.PRESET_BOTTOM_WIDE)
box.offset_left = 40
box.offset_right = -40
box.offset_top = -240
box.offset_bottom = -40
add_child(box)
name_label.add_theme_font_size_override("font_size", 28)
text_label.add_theme_font_size_override("font_size", 24)
text_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
box.add_child(name_label)
box.add_child(text_label)
box.add_child(choices)
show_line()
func _input(event: InputEvent) -> void:
var pressed: bool = event.is_action_pressed("ui_accept") \
or (event is InputEventMouseButton and event.pressed)
if pressed and choices.get_child_count() == 0:
index += 1
show_line()
func show_line() -> void:
var lines: Array = story[label]
if index >= lines.size():
name_label.text = ""
text_label.text = "Конец главы"
return
var line = lines[index]
if line is Dictionary:
for option in line["choice"]:
var button := Button.new()
button.text = option[0]
button.pressed.connect(jump.bind(option[1]))
choices.add_child(button)
return
name_label.text = line[0]
text_label.text = line[1]
func jump(target: String) -> void:
for button in choices.get_children():
choices.remove_child(button)
button.queue_free()
label = target
index = 0
show_line()
Разберём, что здесь за что отвечает.
- Словарь
storyхранит сценарий. Ключ, например"start", называет ветку, значение содержит список её реплик. Реплика записана парой «имя, текст», а развилка записана словарём с ключом"choice". _ready()собирает интерфейс: контейнер внизу экрана, подпись с именем, подпись с текстом и пустой контейнер для кнопок.show_line()показывает текущую реплику. Если вместо реплики попалась развилка, функция создаёт по кнопке на каждый вариант.jump()убирает кнопки и переводит историю в выбранную ветку с первой реплики._input()листает реплики по клику и по Enter, но молчит, пока на экране висят кнопки выбора.
Чтобы дописать главу, меняйте только словарь. Для новой ветки добавьте ключ со списком реплик, для новой развилки вставьте ещё один словарь {"choice": …} в нужном месте списка.
Если пишете на GDScript впервые: отступы в нём значат то же, что в Python. Строка с лишним или недостающим табом ломает скрипт, и Godot подсветит её ещё до запуска.
Фоны, персонажи и музыка
Прототип выше показывает только текст. Картинки и звук добавляются узлами, без новой логики.
- Фон. Узел TextureRect на весь экран, первым в дереве, чтобы остальное рисовалось поверх.
- Персонаж. Ещё один TextureRect со спрайтом. Эмоции меняются подменой картинки в его свойстве
texture. - Музыка. Узел AudioStreamPlayer с файлом трека, включается флажком Autoplay в инспекторе: свойства узлов Godot показывает по-английски даже в русском интерфейсе.
Музыку для новеллы часто заказывают отдельно. Что входит в работу автора саундтреков, мы разбирали в обзоре профессии композитора.
Картинки и звуки перетащите в панель «Файловая система», и Godot сам их импортирует. Чтобы фон менялся вместе с репликой, добавьте в каждую реплику третье поле с путём к картинке и выставляйте его в show_line().
Самодельная схема хороша, пока глав немного. Когда понадобятся сохранения, журнал прочитанного, анимация появления персонажей и переменные вроде отношения героини к игроку, проще взять готовый плагин. Как такие переменные и правила проектируют в больших играх, рассказано в обзоре профессии геймдизайнера.
Dialogic 2: готовая система диалогов для Godot
Dialogic это бесплатный плагин под лицензией MIT, который превращает Godot в редактор визуальных новелл. В нём есть персонажи с портретами, таймлайны с репликами, развилки, переменные и сохранения.
На ноябрь 2026 у Dialogic 2 статус альфа-версии, последний выпуск 2.0 Alpha 20. Плагину нужен Godot 4.5 или новее, а разработчики предупреждают, что между альфа-выпусками код может меняться, поэтому перед обновлением делайте копию проекта.
Установка по инструкции Dialogic:
- Скачайте ZIP нужной версии на странице выпусков на GitHub.
- Распакуйте из архива папку
addonsи положите её в папку проекта. В проекте появится путьres://addons/dialogic. - Откройте «Проект» → «Настройки проекта…», вкладку «Модули», и отметьте «Включено» напротив Dialogic.
- Перезапустите Godot. Вверху редактора, рядом с вкладками 2D, 3D и «Скрипт», появится вкладка плагина.
Дальше работа идёт в редакторе плагина. Персонажи создаются кнопкой Add Character и хранятся в файлах .dch, сцены с репликами называются таймлайнами и лежат в файлах .dtl. Таймлайн можно собирать блоками или писать текстом вида «Имя: реплика», а запускается он в игре одним вызовом Dialogic.start() с именем таймлайна.
| Что сравниваем | Свой скрипт | Dialogic 2 |
|---|---|---|
| Порог входа | Нужно понимать GDScript | Можно работать почти без кода |
| Сохранения и журнал | Писать самому | Есть в плагине |
| Стабильность | Ваш код, ваши правила | Альфа, возможны изменения при обновлении |
| Нестандартный интерфейс | Любой | Через стили и собственные сцены плагина |
Как собрать игру и опубликовать новеллу

В веб-редакторе экспорта нет. Скачайте проект архивом через «Проект» → «Инструменты» → «Загрузить исходный код проекта» и откройте его в Godot на компьютере: веб-редактор хранит файлы во внутренней базе браузера, обычной папки на диске у него нет.
Сборка в программе для компьютера идёт так:
- Откройте «Редактор» → «Управление шаблонами экспорта…» и установите шаблоны для нужных платформ. Без них Godot не соберёт игру.
- Откройте «Проект» → «Экспортировать…», нажмите «Добавить…» и выберите платформу: Windows, Linux, macOS, Android, iOS или Web.
- Укажите путь и нажмите «Экспортировать проект…». Для Android дополнительно понадобятся инструменты Android SDK, это расписано в разделе об экспорте.
Где выкладывать готовую новеллу:
- Steam. По правилам Steam Direct за каждую новую игру платят взнос 100 долларов. Он не возвращается, но компенсируется в выплатах, когда скорректированная выручка игры достигает 1 000 долларов.
- RuStore. Магазин приложений для Android-сборки, если новеллу хотят ставить на телефон.
- itch.io. Площадка для инди-игр, где удобно выложить первую главу и собрать первые отзывы. Из России сайт открывается не всегда: при сбое загрузите страницу позже.
Частые ошибки и что с ними делать
Большую часть этих проблем мы поймали сами, пока собирали прототип для статьи.
- Клик по экрану не листает реплики. Причина: обработка ввода в
_unhandled_input(). Корневой Control по умолчанию забирает клики мыши себе, и до этой функции они не доходят, а Enter работает.
Решение: ловить ввод в_input(), как в коде выше. - Кнопки выбора копятся или реплика проскакивает. Причина: старые кнопки остались в контейнере, и проверка на развилку срабатывает неверно.
Решение: перед переходом в ветку убирать кнопки из контейнера и только потом удалять их, как в функцииjump(). - Скрипт не запускается, строка подсвечена красным. Чаще всего это отступ: в GDScript смешались пробелы и табы или пропал таб в теле функции.
Решение: выровнять строку по соседним. Табы редактор помечает серыми стрелками слева от текста, на кадре со скриптом их видно. - Проект пропал из веб-редактора. Файлы веб-редактора лежат в хранилище браузера и стираются вместе с данными сайта или кнопкой Clear Persistent Data.
Решение: после каждого рабочего дня скачивать проект архивом. - Вкладка Dialogic не появилась. Плагин лежит не в
res://addons/dialogic, не включён во вкладке «Модули» или Godot старше 4.5.
Решение: проверить путь, флажок и номер версии внизу окна редактора, затем перезапустить Godot. - Сюжет разросся, ветки путаются. Код тут не поможет.
Решение: вернуться к схеме развилок и свести лишние ветки к общим сценам.
Где освоить Godot и разработку игр системно
Прототип из статьи показывает механику, а полноценной новелле нужны сохранения, меню, анимация и сборка под несколько платформ. Если хочется делать игры дальше, разберитесь в движке по курсу: в каталоге собраны программы по Godot и по разработке игр в целом.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия «Разработчик игр на Unity с нуля» Перейти на сайт курса | 132 445 ₽ | 3679 ₽/мес. | 10 месяцев | Обзор курса | |
| Разработчик игр на Unity Перейти на сайт курса | 132 840 ₽ | 3690 ₽/мес. | 12 месяцев | Обзор курса | |
| ДО Профессия Разработчик игр на Unreal Engine 5 с нуля Перейти на сайт курса | 174 536 ₽ | 4849 ₽/мес. | 6 месяцев | Обзор курса | |
| VR-разработчик на Unreal Engine 4 Перейти на сайт курса | 31 273 ₽ | 4588 ₽/мес. | 1 месяц | Обзор курса | |
| Разработчик игр на Unreal Engine Перейти на сайт курса | 135 720 ₽ | 5655 ₽/мес. | 9 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по разработке игр
Для сценарной части пригодятся курсы по сценарному мастерству. А если думаете превратить хобби в работу, начните с обзора как стать разработчиком игр.




