Переход с браузерной RPG на Godot: мой опыт
Доброго времени суток!
Смотрю, многим зашли мои прошлые дев-влоги, так что продолжу делиться историей разработки. Сегодня — о первом знакомстве с движком Godot и о том, как я переносил туда всю функциональность своей браузерной RPG.
После пары месяцев с HTML, CSS и JavaScript
Я решил: хватит мучиться — пора переходить на движок. Перейти на Godot было непросто. Увидел, как один разработчик делает там свою игру, и подумал: «Почему бы не попробовать самому?»
На старте я почти ничего не понимал.
Узлы, инспектор, дочерние сцены, инстанцирование — всё это было для меня тёмным лесом. И это я ещё про интерфейс молчу. Сам язык GDScript до сих пор знаю лишь на уровне, достаточном для ориентации и исправления ошибок.
Перенос из браузерки
Перекинуть весь функционал напрямую из JavaScript в GDScript было невозможно. CSS-стили и HTML-верстку тоже не скопируешь. Всё пришлось делать с нуля. Каждый элемент интерфейса, каждый кусок логики я собирал при помощи ChatGPT — вместе с его багами и потерями контекста.
Со временем научился сам размещать элементы на сцене, выстраивать структуру и править код.
План перехода
Без плана было бы нереально. Я составил список шагов:
Перенести все скрипты и функционал.
Перетащить стили и интерфейс (CSS → сцены, HTML → структура).
Перерисовать визуал под новый формат.
Проверить, чтобы игра запускалась.
Пока не перенесены все скрипты, игру не проверить — один файл проект не запустит.
Первый запуск
Когда я наконец собрал всё и запустил игру — получил тонну ошибок. ChatGPT адаптировал 18 JS-файлов (каждый по 300–800 строк), но допустил множество ошибок.
Перенос шёл постепенно, по одному файлу. Процесс поиска и исправления багов выглядел так:
Копировал ошибку из консоли.
Отправлял её в GPT вместе с контекстом.
Получал исправленный вариант.
Если не работало — откатывался и повторял.
Если код умещался в 100 строк — чат справлялся. Если больше, он терял нить, создавал новые баги, и приходилось возвращаться к прошлым версиям.
Так продолжалось почти месяц.
Немного цифр
Для понимания масштаба работы:
18 JS-файлов (300–800 строк каждый) → GDScript
15 CSS-файлов (gamestyle.css — 600 строк) остальные поменьше
6 HTML-страниц
74 картинки
Это было только начало. Сейчас проект вырос до:
56 скриптов
40 сцен
291 картинки
Визуал — вечная стройка
Параллельно с кодом шла постоянная переработка визуала.
Где-то переносил интерфейс из браузерки, где-то перерисовывал элементы, потому что старый стиль переставал нравиться. Иногда делал заглушки, чтобы хотя бы протестировать функционал.
Перерисовка визуала — процесс бесконечный, думаю, многие разработчики игр это понимают.
Что дальше
После переноса я начал улучшать старые механики и внедрять новые.
Дальнейшие посты будут уже не такими сумбурными: каждый будет посвящён конкретной системе или механике — инвентарю, карте, боевой системе, оптимизации.
А пока — несколько скриншотов версии после полного переноса из браузера.
Итог
Переход с браузерной игры на Godot стал серьёзным вызовом. Каждый день я сталкивался с ошибками, уставал, откатывался, но шаг за шагом собирал свой мир.
Игру нельзя просто переписать с одного языка на другой. Её нужно написать заново.
Баги не исчезают. Они просто переходят в следующую версию🐺
Подписывайтесь на мой телеграм канал, там помимо дев-влогов я выкладываю арты из игры, и просто по фану рисую с нейронками, залетай если тебе интересный нейросети и контент сделанный с помощью них: t.me/neirosea
Следующие 5 скринов уже на движке годот после переноса большинства механик и визуала из браузерки(система инвентаря с драг энд дроп)
Но что было в карте тогда и сейчас, совершенно разный вид игры, сейчас я полностью переработал карту и локации, в будущих постах увидите:)
Система прокачки героя, простенькая, но даже такую было сложно создать а потом еще и перенести на годот
Таверна, сейчас кажется уже странной что в окошке целое помещение, так что от этого дизайна я тоже уйду к полноценной локации, с кайфушной музыкой и атмосферой:)
Хочется поделиться еще скринами из создания, но многие затерялись, да и пост будет слишком уж длинной простыней:)