![](https://habrastorage.org/getpro/habr/upload_files/fba/2e6/d0b/fba2e6d0bb2dccdc15443c11b80a8411.png)
Введение
Кратко расскажу о себе: имею около 10 лет опыта с GameMaker, выпустил пару игр в Steam. Делал пару-тройку конкурсных игр на Unity, один раз на Unreal Engine 4 (об этом детально рассказывал в статье на другом сайте). У меня нет цели попробовать абсолютно все движки, однако, взглянуть на те, что оказались на слуху — почему бы и нет? Таким движком оказался Godot. Много о нём слышал, решил попробовать в деле.
Скрытый текст
Очень давно попробовал взглянуть на Godot сделав на нём «ремейк» своей старой игры-шутки Zhulik.exe. В движке есть готовые вещи для работы с User Interface (UI). А этот интерфейс это важная основная часть Zhulik. Но я скажу честно: я открыл движок и закрыл его. Забыв на, боюсь сказать, годы. Это сложно назвать даже попыткой, честно говоря.
Настоящей «первой попыткой» знакомства с Godot было участие в конкурсе разработки игр Gamainator 25. Назвал проект очень странно и просто — «1». Это буквально её название. А выглядела она примерно так:
Конкурс не накладывал ограничений на движок игры. Поэтому решил поэкспериментировать и взять Годот. На моё удивление, но я смог собрать некий прототип за 2 дня! Игрой это было назвать сложно. Сделал прототип и написал статью о разработке где-то в мае 2023 года. (ссылки на сторонний ресурс)
Challenge (вызов-испытание)
Под конец апреля 2023 года было решено создать крохотный чат в ТГ по этому движку. Целью было совместное обучение и изучение небольшой группой знакомых. Похоже, мы все видели потенциал Godot. И мы подумали себе challenge — каждый делает свой рогалик. Печальный исход такой: за 5 месяцев никто не сделал игру. Это был провал. Я смог сделать только вот такое:
К началу марта 2024 года один из участников предложил взять уже состоявшийся 20 games challenge. Хоть в названии 20 игр, но на деле челлендж на создание 10 игр с нарастающей сложностью. Никаких временных рамок в оригинале не было, поэтому мной были предложены и приняты такие условия: до конца 2024 года сделать все 10 игр, получается по одной игре в месяц.
Итак, поехали!
Игра 1. Понг | Pong
На выбор были Pong или Flappy Bird.
Достаточно простая игра, осилил за 7 дней. Вся сложность заключается в непонятном для меня движке. Не так просто принять идею Nodes, а именно что всё кругом Node. У Ноды может быть только один скрипт расширяющий функционал, а наследовать скрипт можно лишь от одного родителя. Приходилось выдумывать странные конструкции. Впрочем, иерархический подход понятен — примерно как в Unity, но такого не было в GameMaker, что может вызывать сложности с переходом с ГМ на Годот. Графикой я решил пренебречь и выглядела игра примерно вот так:
Сложно рассказать что-то интересное о Понге. Разве что я решил замахнуться дальше, чем просит челлендж и сделал: игру на двух игроков, на игрок против ИИ, ИИ против ИИ, а ещё зачем-то меню и паузу. Но главное что там было — это костыли, которые я городил даже в таком простом проекте.
Игра 2. Арканоид | Breakout
На выбор были Breakout или Jetpack Joyride.
Прогресс по этой игре пошёл куда лучше: взял за основу прошлый Понг, переименовывал и изменял какие-то моменты. И игра готова! Из особенностей: эта игра стала первой из нескольких, которые делал на стриме. Вот, можете глянуть даже запись на Twitch. Управился за 3 часа, если не считать основу в виде Понга. Результат такой:
Но есть нюанс. Начались проблемы с дедлайном и эту игру я делал в спешке в последний день месяца. Собственно, поэтому похоже и успел за 3 часа!
![Ещё скриншот вам цветной. Как видно, Арканоид у меня называется Понг. Ещё скриншот вам цветной. Как видно, Арканоид у меня называется Понг.](https://habrastorage.org/getpro/habr/upload_files/2e9/4ae/15d/2e94ae15dce5ef2c79654875b8f42d9c.png)
Уже с этой игры появляется базовые знания сохранения hi score, что, конечно, не сильно отличается от такового из того же GameMaker. Однако, не все игры будут использовать это, особенно последние.
Игра 3. Космические Инвайдорзы | Space Invaders
На выбор Space Invaders или Frogger или River Raid.
Эта игра уже посложнее будет. Вновь я срываю свои сроки и бегу делать игру прямиком на стриме. В этот раз почти 5 часов ушло. Графику я взял из своего старого прототипа аркады, который должен был стать ремейком ещё более старой игры. Прототип недоделал. А вот графика хоть так пригодилась.
Конечно у меня были различные баги, но здесь меня поджидали особо коварные: почему-то коллизия на дне не работает. Коллизия снаряда с врагом-клоном не работает. Под врагом-клонами я подразумеваю врагов, которые наследуются от сцены врага. Проблема оказалась в том, что почему-то слой коллизии у клонов был отличный от своего родоначальника. Было ли это связано с каким-то багом в наследовании сцен? Не знаю. Впрочем, я читал, что лучше не использовать наследование сцен в Годоте.
Игра 4. Астероиды | Asteroids
На выбор Asteroids или Spacewar! или Indy 500
Снова взял за основу прошлый проект. Т. е. ещё с Понга тянется эта «игровая династия». И вновь стримил это дело на 4 часа. Опять взял графику со своего старого прототипа-аркады, но теперь ещё и разбавил старой же графикой с совсем древнего проекта, который был написан ещё на Си++ и OpenGL, есть древнее видео.
С этого проекта я попробовал заливать на youtube короткие shorts.
Это первая игра, из-за которой стал срывать сроки. По плану её нужно было закончить в июне, а я отчитался в нашу группу по движку только в июле, правда, 2-го числа. Забегая вперёд, это будет крайне плохой тенденцией. Кстати, кажется, в игре не работает условие победы, ха.
Игра 5. ПАК МЭН | Pac Man
На выбор Pac Man или Tic-Tac-Toe или Conway’s Game of Life
Я начал этот проект скопировав Астероидс. Странное решение, но я решил пробовать именно продвигаться «от прошлой игры к следующей». Конечно, пришлось заменить практически всё.
Данная игра резко отличается как по своей структуре, так и по сложности создания. Это я, разумеется, заметил на контрасте с прошлыми играми. Мне даже казалось, что в челлендже что-то напутали, так как комплексность ПакМэна сильно отличается в сторону усложнения.
Я прибегнул к статье-разбору (ссылку потерял), где описывается как работает оригинал, а главное, как работает ИИ призраков. Признаюсь, что всё было не так-то просто реализовать.
![Скриншот финальной версии игры Скриншот финальной версии игры](https://habrastorage.org/getpro/habr/upload_files/afe/ab3/d15/afeab3d15a253a68c5d77ad786389091.png)
В этой разработке я познакомился с тайловыми картами в Годот и авто-тайлингом (не совладал, ставил руками), что он предлагает. Честно сказать — я запутался в этих тайлах. Ещё одной особенностью этой игры стало то, что я решил использовать сторонние графические ассеты. Меня всегда тянет сделать новую уникальную графику, даже если это какой-то «технический» спрайт, который увидит только я сам. А вот тут решил попробовать побороть себя (у нас же всё же «вызов»!) и вот получался ПакМэн с волшебником и скелетами.
Намучился с искусственными интеллектом призраков. Хоть и использовал чит в виде статьи-разбора. Смог реализовать только лишь один уровень, без изменения скорости игрока или призрака. Должен признать, что я сильно устал от этой игры и движка. У меня появились мысли о завершении челленджа на полпути.
Игра должна была быть «сдана» в июле, однако, я закончил её только 18 августа. Вот и пошёл я по наклонной с этими дедлайнами.
Игра 6. Супер Игарио Братаны | Super Mario Bros
На выбор Super Mario Bros. или Pitfall или VVVVVV
Конечно же выбрал делать Марио. Я, кстати, толком не играл в Супер Марио на NES, а лишь относительно недавно проникся этой серией уже с современных воплощений. Но я знаю, что это икона видеоигр.
Сначала всё казалось достаточно просто, потому что я смотрел на игру с опытом GameMaker.
После ПакМэна я начала «выгорать» или как назвать то, что я устал и не хотел больше копаться в Годоте? Но именно с проблемами и трудностями узнаёшь о движке (а может и себе? Ну это уже философия). Марио продолжал подкидывать дров. Я был готов уже бросить этот челлендж.
Простая с виду затея оборачивалась сложностью на сложности, проблемой на проблеме. Мой игрок стал походить на кучку квадратов, а не персонажа игры — весь в специальных коллайдерах Area2D для детекции столкновений, подбора предметов или разбивания ящиков головой. Я уже реализовывал всё как мог, а не прибегая к лучшим практикам.
![Так выглядит персонаж игрока в редакторе. Весь в прямоугольных коллайдерах. Так выглядит персонаж игрока в редакторе. Весь в прямоугольных коллайдерах.](https://habrastorage.org/getpro/habr/upload_files/631/181/9c6/6311819c643aa7a0964ad2b4e3bdf5b5.jpg)
Продолжаю учиться использовать чужие готовые ассеты — скачал из интернета, кажется, даже несколько ассет-паков, а потом намешал в игре. Было проблемой вырезать нужный спрайт из spritesheet. В Годот почему-то область текстуры\спрайта называется TextureAtlas, а не TextureRegion, например. Да и если такому региону поставить repeat в «как обрабатывать края», то он не повторяет их. Для этого, похоже, предлагается писать свой шейдер. Копилось множество мелких проблем, которые в совокупности выводили из себя.
![Вот как мне пришлось делать флагшток. Спрайт на спрайте через спрайт. Вот как мне пришлось делать флагшток. Спрайт на спрайте через спрайт.](https://habrastorage.org/getpro/habr/upload_files/2ea/cc7/354/2eacc73540dad859e38d45b56595410b.jpg)
Было множество различных багов и проблем, но завершил игру с двумя уровнями. Один из уровней полностью или частично повторяет первый уровень из Супер Марио с NES.
Эту игру я успел сделать в срок. Нужно было в августе — в августе и сделал. Исправился с дедлайнами … так мне казалось.
Игра 7. Колотить-Копать | DigDug
На выбор Worms или Dig Dug
Хоть мне и нравятся Червячки (Worms), но мне показалась какой-то нереальной задачей сделать такую игру на Годот. И я имею ввиду скорее разрушаемость мира. О DigDug я не слышал ничего, но выбрал её посмотрев как она играется. Выглядело это проще — разрушаемость уровня можно было реализовать тайлами. Достаточно просто, несмотря на то, что до этого я кое-как совладал с тайлами.
Максимальный срыв дедлайнов. Эту игру было нужно сделать в сентябре, но я сдал её лишь в декабре! Но у меня уважительная причина связанная с делами в реальном мире. Тем не менее, сроки все под откос. У меня оставалось пара месяцев до окончания года и челленджа. Начал я этот проект в середине ноября. За основу взял предыдущего Марио. И началось всё так:
Продолжая попытки использовать сторонние ассеты для этой игры я выбрал использовать выдранные из оригинальной игры. Не знаю что привело меня к этой мысли, но вероятно я подумал, что так будет эффективнее, чем искать спрайты и придумывать как их использовать.
С этой игрой тоже всё было не так гладко. Хоть разрыв в разработке с прошлой игрой дал немного времени передохнуть и остудиться после перегрева, но всё же ситуация вновь быстро нагнеталась. Я очень долго мучился с ИИ, а конкретнее с поиском пути, который никак не хотел работать правильно! То игрок застревал в стенах, то враги вставали как вкопанные (ха!), то они уходили куда-то совершенно непонятно куда.
![ЗАМУРОВАЛИ, ДЕМОНЫ! ЗАМУРОВАЛИ, ДЕМОНЫ!](https://habrastorage.org/getpro/habr/upload_files/451/08f/058/45108f05804b0fc753cc4e2f33d79234.png)
![Враг сбежал из поля игры. Даже им невыносимо участвовать в этом проекте! Враг сбежал из поля игры. Даже им невыносимо участвовать в этом проекте!](https://habrastorage.org/getpro/habr/upload_files/d74/38f/cae/d7438fcaea0e7b1b695ca5d7cb069c64.png)
С мучениями, но я завершил и эту игру! Чем дальше, тем проекты всё сложнее, а неврвов завершить их не хватает. Лично я начинал разочаровываться в Годот натыкаясь на различные, казалось бы, мелкие недочёты и нелогичности, но которые ломали общий поток разработки. Вот что вышло:
Игра завершена 8 декабря 2024 года. Осталось меньше месяца, чтобы сделать ещё 3 игры. Это просто нереально.
Игра 8. Крэш Бэндикут | Crash Bandicoot
На выбор Super Monkey Ball или Star Fox или Crash Bandicoot
Ощущал себя героем фильма, где он по непонятным причинам продолжает бессмысленную борьбу со злом. Столь же нелогичным, как и это сравнение, было решение продолжать челлендж. Ожидая, что в 3D будет проще. Не знаю почему я так думал.
По понятным причинам я не стал брать за основу прошлые проекты, ведь они были 2D. Хотя по условиям нужно было сделать 2.5D платформер, если выбираешь Крэша. Однако, в Годот чёткое разделение 2д и 3д, от чего нет совместимости между этими измерениями. Ноды прописаны в своём родителе к какому пространству относятся, конечно, кроме более абстрактных нод вроде Анимационного проигрывателя.
Как с прошлыми играми у меня не получилось. Ранее я садился и делал игру смотря на список, который описан на сайте челленджа. Например, что игрок ходит-прыгает, монеты собираются и т. д. Для Крэша мне показалось всё достаточно расплывчато и обощёно было. Добавить какие-то ловушки, каких-то врагов, какие-то ещё вещи. Крэш первая игра, для которой я взял листок бумаги и начал обдумывать что необходимо сделать.
Зарисовка на бумаге
![Вот такое я написал для себя, чтобы хоть как-то уместить в голове что нужно делать. Вот такое я написал для себя, чтобы хоть как-то уместить в голове что нужно делать.](https://habrastorage.org/getpro/habr/upload_files/944/1a9/a9f/9441a9a9fe2ac835de7cee108e37bc32.jpg)
12 декабря 2024 года началась разработка. Своим прогрессом я делился не только в ТГ группе, но и в своём BlueSky (на самом деле там и другие игры были). Например, анимацией походки Крэша, которую я сделал наспех.
Продолжая тематику использования готовых ассетов скачал текстуры и модели из игр про Крэша. Было несколько моделек, но я решил остановиться на классическом с Sony PlayStation 1. Я быстро сделал свои анимации в Blender, потому что выдернутые имелись только текстуры и модели. Уровни я тоже делал в Blender используя аддон ReSprytile. Не смог подобрать модельку для врага, поэтому взял свою старую. Звуки нашёл выкаченные из оригинальной игры, подобрал их. Фоновую музыку взял свою, которую делал для одного проекта-прототипа, который так и не увидел свет.
Могу сказать, что в эти моменты, несмотря на какие-то недочёты во время разработки, у меня аж проснулось второе дыхание, вдохновение! И даже желание поиграть в Крэша!
Казалось, что все те недочёты и выгорания ушли, а Крэш игра компенсировала всё. Или может это говорил опыт? Так или иначе, дело шло. И достаточно быстро, как мне кажется. Декабрь я считаю «ленивым месяцем», когда уже скоро новый год, работать не хочется, у многих «выходные дни». Вот и я так «лениво» решил удариться максимально в последние игры.
В качестве ориентира, чтобы хоть как-то разобраться как надо делать 3д в Годоте, скачал себе пример от GDQuest с их контроллером от третьего лица. Это был тоже платформер, но я взял скорее какие-то идейные вещи по организации, хотя, некоторые строчки кода таки скопировал.
![Примерно так начиналась игра. Хоть это и 21 декабря Примерно так начиналась игра. Хоть это и 21 декабря](https://habrastorage.org/getpro/habr/upload_files/b91/7af/4c4/b917af4c4ad0f11553d00492eca21309.png)
Пытался заставить Годот открывать blend файлы от Блендера, такое возможно, однако, у меня сыпались какие-то ошибки и это заставило мне передумать подход к моделям — я их моделил и экспортил, хотя, всё как в нормальных движках. Но Годот как-то умеет загружать бленд-сцены, но мне это осилить не удалось.
Были некоторые недопонимания у меня. Мне казалось, что если Годот загрузил модель\сцену из файла 3д модели, то у него есть доступ к mesh. И я могу назначить этот mesh на любой нод класса MeshInstance3D, но как оказалось — ничего я не могу! Это сбивало с толку. Вот же Mesh! Установи его как Mesh для этого Instance! Но нет, Годот так не хочет. И разные такие вещи не помешали мне дойти до завершённой игры.
Крэша я разрабатывал с 12 по 26 декабря 2024 года, ровно две недели у меня ушло на этот проект.
В итоге вот так выглядит игра:
Особо сил придало то, что когда я выложил игру и видео на Reddit в ветку по Godot, то оно набрало целых 1000+ upvotes, не знаю как для вас, но для меня это значительное достижение! Получив воодушевление я выложил помимо самого исполняемого файла ещё и исходники!
Ещё две игры. До нового года осталось 4 дня. Это невозможно. Невозможно сделать даже одну игру…
Игра 9. DrOOwN | DooM
На выбор Wolfenstein/Doom или Mario Kart
Уже было 28 декабря. Хоть я и понимал, что челлендж невозможно завершить к нужному сроку, но я продолжал идти упорно. Под вдохновением от Крэша.
Я решил, что воспользуюсь уже готовой графикой из своей игры Drawngeon, что сократит время разработки. По намеченным планам с челленджа всё выглядело достаточно просто: пара видов оружия, пара врагов, да и одного уровня хватит.
Всё как в тумане. Я просто брал и делал. Но я и снова использовал хитрости-читы так как время поджимало, а успеть хотелось. Взял со своего старого челленджа по рогалику, о котором я писал в самом начале статьи, контроллер игрока от первого лица, который основан на контроллере из игры «1»! Вот такие моменты в разработке мне кажутся очень показательными — помимо опыта в дело идёт и то, что остаётся от прошлых проектов, нарабатывается база, которую можно пере-использовать. А вот лифты для этого проекта я сделал из платформ из Крэша.
![Скриншот с начала разработки. На тестовой локации. Скриншот с начала разработки. На тестовой локации.](https://habrastorage.org/getpro/habr/upload_files/9fc/390/40d/9fc39040d080b6a5ae77b7fd3d8b112a.png)
Одной из небольших проблем было то, что я не научил игрока шагать по лестницам. Я знал хитрость, что можно поставить на визуальную модель лестницы коллайдер плоского рампа, однако, хотелось «как в Думе» всё же. Не осилил этот момент.
Хотел я добавить и второй уровень, прямо из Дума. Найдя такой уровень готовой моделью посмотрел как он выглядит в игре и мне это не особо понравилось, потому что 1) там есть весьма высокие лестницы 2) его будет очень сложно пере-текстурировать. Поэтому я пошёл нелогичным путём и начал делать свой единственный уровень.
Для уровня использовал аддон Cyclops Level Builder для Годота. И когда я уже был он практически готов, вся игра более-менее работало, как вдруг …
![Одни ошибки и пропажа всей геометрии уровня. Это было сокрушительно! Одни ошибки и пропажа всей геометрии уровня. Это было сокрушительно!](https://habrastorage.org/getpro/habr/upload_files/0df/81c/ac5/0df81cac5db7518deac72055587f3243.png)
Посыпался весь уровень, сломав отображение и насыпав кучу ошибок. Меня так сильно это расстроило и подкосило, что я побежал на тот же самый Реддит жаловаться, чего никогда не делал. Но в итоге мне удалось исправить, путь и немного откинув прогресс обратно:
![Уровень до того, как случился казус Уровень до того, как случился казус](https://habrastorage.org/getpro/habr/upload_files/978/2ef/f29/9782eff298460b2998c9d5d10498972a.png)
А вот так выглядела попытка загрузки уровня из Дум:
![Лестницы есть непреодолимый враг персонажа Лестницы есть непреодолимый враг персонажа](https://habrastorage.org/getpro/habr/upload_files/de8/46c/40c/de846c40c7f228d464406a5e40010134.png)
Игровой процесс финальной версии выглядит вот так:
Как и с Крэшем я пошёл показывать своё достижение на Реддит. Да и в своём ТГ канале упомянул. Однако, на Реддите оно не получило столь же ажиотажа, как Крэш. Звучит ожидаемо, ведь где Крэш и где нарисованный от руки шутер.
С этой игрой вышла забавная ситуация: по совету я отправил в Discord оригинального челленджа 20 игр Крэша и Дум. По ошибке держатель сайта указал, что у Дума есть веб-билд, чего на деле не было. Но тогда я подумал и решил попробовать сделать это! Оказалось всё достаточно просто и действительно можно сыграть в неё онлайн теперь!
Это тоже очень крутой момент, как по мне. Теперь как минимум мои Крэш и Дум увековечены на сайте оригинального 20 games challege!
Я успел сделать игру к 31 декабря 2024! За 3 дня! Ура! 9 из 10 игр! Успех! Хотя, я так не считал, но мне писали, что 90% челленджа можно считать успехом однозначно. Путь действительно был непростой и есть результаты.
На этом можно было бы и заканчивать …
Игра 10. Godortal | Portal
На выбор Minecraft или Portal
… если бы не моё упорство!
Не удалось воплотить челлендж как я задумывал (в оригинале не было сроков). Мне пару раз писали, что «челлендж ведь на год, а год не прошёл» намекая, что ещё не конец. Я подумал, что это может быть интересным проведением январских каникул, ещё одного «ленивого месяца». Да что там, сделаю за недельку. Как же я ошибался…
Одной этой игры хватит на целую отдельную статью, поэтому постараюсь покороче.
Начал 3 января. Очень давно на GameMaker я уже частично реализовывал технологию порталов — попытался найти бумажные заметки и адаптировать их, но ничего не вышло. Пришлось начать с самого начала. Вновь начал исписывать бумагу различными идеями и вычислениями. Спустя всю реализацию понимаю, что решение было достаточно простое и делится на две части: визуальная и математическая.
Под визуальной я понимаю то, как портал выглядит. И, как я её назвал, математической визуальной просто не может быть. А математика достаточно проста: нужно трансформировать точку и взгляд наблюдателя относительно одного портала и трансформировать это потом на относительность другого портала. Возможно, звучит непонятно.
Как же я намучился с этим! Всё было экспериментально. По логике выстраиваю вычисления — не работают! Пробую ещё, работает, но не так! Это немного начало напоминать мне ситуацию с ПакМэном или Марио! Но раз уж я взялся за это дело, то должен довести до конца! Мне потребовалось достаточно много времени, чтобы верно сообразить какие надо проделать трансформации. И это с учётом того, что есть куча статей и видео на эту тему. Но я словно специально старался пере-придумать всё сам, хотя потом и сдался и подглядывал в одну статью по порталам, но на движке Unity.
Для быстрого наброска уровней я использовал ноды CSG объектов, мне хватило лишь кубов. Из них я строил базовую форму уровня. А по началу тестировал всё на playgound-локации. Сами локации я решил делать как в проекте Крэша — в Blender через аддон ReSpryTile. Текстуры рисовал в программе Aseprite. Совмещал Blender и Aseprite через аддон-мост под названием Pribambas.
Графику я решил делать специально для этого проекта. Мне показалось, что хорошо будет смотреться pixel art 3D. Такой стиль и сделал, хотя изначально я думал взять наработки старого проекта из 2011 года, который не ушёл дальше идеи. От проекта этого в наследство достался разве что дизайн портальной пушки и частично дизайн дверей.
![Моделирование портальной пушки в Blender 3.6 Моделирование портальной пушки в Blender 3.6](https://habrastorage.org/getpro/habr/upload_files/5be/0c5/7a7/5be0c57a7fdbd429c9cf6e1d58046b38.png)
Показывал в BlueSky как верчу эту портальную пушку. То же видео, но здесь:
Следующим шагом после визуального портала была телепортация. Сложности с этим я испытывал ещё больше! Хотя я почти разу же сообразил как можно реализовать их в Годот — нужно менять слой коллизии у объекта телепортации когда он входит в портал, а когда выходит из зоны портала, то восстанавливать оригинальный слой. Сама концепция работает хорошо. А вот нюансы вновь заставили попотеть и потерять несколько нервных клеток. С какими-то аспектами я до сих пор не совладал и у меня просто уже нет сил на них.
Сначала у меня были простые коробки для коллизии портала, чтобы игрок не проваливался. Затем я сделал специальную модель для коллизий (что кстати не удобно в Годоте — пришлось добавить визуальную модель, а затем ей создать коллизию). А в конечном итоге сделал добавочный коллайдер пола, который включается и подстраивается под высоту оригинального пола уровня — сделал это, потому что иногда игрок таки проваливался вниз.
Сцена (префаб, класс) персонажа игрока стал настоящим «нодовым монстром». В нём столько нод, столько скриптов, столько логики, что пара игр вместе взятых из начала челленджа целиком сравнится по объёмам!
Телепортация объектов на скорости не работала должным образом. Мне помогли решением в ТГ чате, где организовали наш челлендж. Правда, работает это не на все 100% как надо. А игрок по-прежнему не может преодолевать порталы на высоких скоростях — бьётся ногами в пол, а иногда застревает в потолке.
Периодически я отдыхал от проблем с логикой и математикой отвлекаясь на создание текстур и\или 3д моделей. Например, я решил сделать модель персонажа на основе болванки-капсулы, а вышел персонаж Амонгус (популярный в некоторых кругах персонаж игры Among Us)!
Попробовал сделать модель не в Blender, а Blockbench, который ориентирован на низко-полигональное моделирование и использование текстур низкого разрешения. Казалось, что это то, что надо! Но на практике мне это не особо понравилось. Блендер оказался лучше, что логично.
![Торт в программе Blockbench Торт в программе Blockbench](https://habrastorage.org/getpro/habr/upload_files/a12/7f5/eaa/a127f5eaafdf9bd7253c594f5428b027.png)
Придумав уровни и создав их graybox, решил сделать их модель в Блендере. В том же чате ТГ мне сказали, что это неправильный подход, когда делаешь модель уровня целиком — лучше бы я делал модульные уровни. Третий уровень моей игры — копия первого уровня из Portal. А вот четвертый уровень я даже попытался сначала сделать в редакторе Portal 2!
Какое-то время, после основных визуальных порталов и телепортаций объектов, я занимался созданием логических схем. Вернее таких базовых объектов, которые можно было бы таскать из игры в игру и строить из них загадки как логические схемы. Вышло это правда весьма сомнительным.
Все недочёты и баги начали раздражать и создавать хаос, что я завёл список багов, которые нужно пофиксить. В список записал и то, что нужно сделать, например, модельки. И я медленно, но верно двигался к цели. Но признаться, на какие-то баги я просто закрывал глаза и убирал их из списка подальше как «не очень важные», хотя они были критическими (вроде застревания в потолке). Ближе к концу у меня словно уже не выдерживали нервы и я хотел просто отделаться от этой игры!
Хоть графика была вся моя, но вот звуки я решил взять готовые. В игре есть пара-тройка моих звуков, но большая часть из них это звуковые ассеты, которые как-то давно купил. Пак там был внушающий конечно.
А вот музыку написал сам, пытаясь подрожать оригинальному Portal. Вышло ли у меня это? Не знаю. Учитывая, что на это ушло не так много времени из всего срока разработки, то хорошо, если люди не будут выключать звук в 0% услышав то, что я там насочинял. Кстати, я добавил в игру подобие музыкального плеера — во время паузы игрок может выбрать трек. Или выключить музыку (если это работает).
Заключительной вещью стало перетаскивание кубе через портал. Сам по себе куб телепортировался хорошо. Игрок проходил тоже приемлемо. Но переход персонажа с кубом был кошмаром, в первую очередь для куба — его кидало по всем возможным вселенным и уровням, возможно, он даже видел зарождение Вселенной! Мне такой расклад не нравился и я решил потратить время если не на решение проблемы, то на её маскировку — сделал так, что когда игрок берёт куб, то он визуально подменяется ложным кубом! Настоящий всё ещё существует, сталкивается, но игрок не видит как его носит из стороны в сторону во время прохода через портал. Пара трюков и костылей позволяет снизить риск потери куба в меж-пространстве. Обманная, но победа!
Демонстрация шаткого состояния куба в его лучшем случае:
И вот. 31 января 2025 года. Я доделал этот проект как смог. Что было в моих силах. Я сделал Портал. На это ушёл целый месяц! УРА! Я очень рад, что смог завершить не столько челлендж, сколько эту игру!
Получился такой магнум опус этого челленджа:
Написал о своих результатах на Реддит, задали несколько вопросов, а я ответил на них. Вновь набрал 1к местных плюсов. Игру можно скачать с itch, я не осилил Web-билд.
Итог
Это было грандиозное путешествие в изучение движка Godot длиною почти в год! От простого Понга до сложного Портал! Честно говоря, жаль, что из нашего небольшого сообщества в Телеграмм канале до финала (пусть и с опозданием в 1 месяц) дошёл только я. Последние три игры вышли, на мой взгляд, особо хороши и даже потенциальны! Можно сделать свой 3д платформер по типу Крэша, бумажный шутер или некую портальную игру. Или совместить всё это в одном проекте!
Огромный опыт движка, основанный на граблях ценен, как мне кажется. И я постараюсь высказаться по этому поводу.
Пользователи движка, пожалуйста, не обижайтесь, но Годот штука крайне нестабильна. Мне кажется, что брать этот движок это очень огромный риск того, что какой-то элемент внутри движка окажется с багом, фикс которого вы будете ждать несколько лет! Если дождётесь. Он очень страдает от банальных UX болячек, куча казалось бы крохотных недочётов делает инструмент сложно используемым. Я бы не рекомендовал делать коммерческие или длительные в разработке проекты. У движка есть потенциал и если исправить огрехи, то это будет весьма крутая штука. Но пока Годот сгодится для небольших конкурсов, где и проекты не столь объёмны.
Буду ли я использовать этот движок? Не в ближайшее время. У меня есть некоторые планы по возвращению в GameMaker, возможно, на контрастах я осознаю что был неправ и Годот идеален, а может наоборот это лишь закрепит моё ощущение сомнительности движка. Но использую ли я его когда-нибудь в будущем? Определённо. Как вы понимаете, мои вкусы весьма специфичны.
Если вам понравился этот материал, то я был бы благодарен вашей поддержке (подписке) в соцсетях. В статье были ссылки, но продублирую более явно:
Boosty, где вы можете меня поддержать;
Всем спасибо за внимание!
Комментарии (22)
Jijiki
09.02.2025 18:303d уровни прикольные, вы молодец. планируете развиваться до 3д анимаций вид от третьего лица с 2 камерами? (свободная и залоченная, соответственно или там с одной, вообщем с двумя видами - от третьего лица и как у вас от первого)
я всё таки почти доделал демо-сцену рогалика - 1 локация (9 тайлов и пещера процедурная)
есть подход называется спринт не знаю как его выполняют люди, которые любители - так как 3д жанр необьемный, проще сделать функционал под локацию (именно код) (1-3). сделать функционал под спавн, сделать функционал под ну банальные вещи что будет там много не надо под этот подход - 1-5 обьектов с персонажами.
Далее логичнее сразу отсраненно от нагрузки слова игра (на спринте болваночно завершать проект - первично закрывая на этом отсраненном масштабе первые огрехи ), далее отдыхать, посмотреть его и там уже доделывать в старом режиме (аля игра механики и прочее)
Jijiki
09.02.2025 18:30в том смысле что изза сложности мы игру не доделаем сразу, но сразу можем написать заглушки нужных спавнов, респов, тайликов, (например 3 локации с переключателем на телепорт в каждую локацию, 1 пещера допустим, 3 екрана меню, и вопрос с сериализацией состояний, по сути это стартер пак 3д бродилки)
насчет лестниц и покрытий по которым ходить я генерирую куски - чанки(чанки в масштабе 1к800 примерно), и там в кусках у меня зоны где может ходить игрок, соотв просто ходим либо по нормалям, либо по карте высот + нормали, тоесть имея карту высот задача упрощается по сути до состояния как в анирале (там где зеленым материалом показываем где можно ходить)(ну от дизайна и желания зависит еще как вы например хотели делать, я пока такое решение нашел)
DarkDes Автор
09.02.2025 18:30планируете развиваться до 3д анимаций вид от третьего лица с 2 камерами?
Не совсем понял про какую это игру.
Про подход спринт не слышал (или под другим именем, разве что). В статье я упомянул только в начале про конкурсы, но я очень часто и много участвовал в них. На небольшом сайте по инди-играм часто проводились таковые. И могу сказать, что конкурсы\джемы это хорошая тренировка делать игру более-менее законченной ИЛИ наметить то, что нужно для неё. Собственно, два моих релиза в Steam основываются как раз на участиях в конкурсе. И в одной из них действительно были заглушки на части локации, я просто перегородил ход игроку!
eugenk
09.02.2025 18:30Приветствую. Сейчас как раз осваиваю. Подкупает довольно простая интеграция с С/C++ и довольно развитый GUI. Делаю сейчас игрушку по мотивам flood-it https://unixpapa.com/floodit/ Там как раз это необходимо, ибо решатель головоломки довольно жручий по вычислениям. Но вобщем-то чисто тренировочный проект. Может залью на яндекс-игры или гуглплей как бесплатную.
Такой вопрос. А с вычислительными шейдерами Вы не разбирались ??? Вроде годот позволяет это. Следующая моя задумка предполагает физически правдоподобное моделирование плавания рыбки, и там без этого никак.
Ну а в целом большое спасибо за публикацию. Исходники кстати выложить не хотите ???
DarkDes Автор
09.02.2025 18:30Здравствуй! Интересно! Я вот интеграцию Си с Годотом не смотрел, но я бы попробовал Си\Си++ в Unreal, а то до этого там использовал только Blueprints.
До вычислительных шейдеров не дошёл, увы. Вообще, много аспектов не покрыто этим челленджем честно говоря. У 10 игр есть продолжение, собственно, называется челлендж ведь 20 игр. Так что в теории можно продолжать, но я это делать вряд ли буду.
Я думал о доступности исходников и выложил бы до 10-ой игры. А от Крэша можно скачать по ссылке кстати!
burandby
09.02.2025 18:30Очень интересно, спасибо за пост. Даже самому захотелось попробовать тему про 10 игр ибо я считаю, что такое делание по нарастающей лучший вариант выучить движок. Честно, сам пытался что-то склеить на годоте, но в нем меня запутала система StaticBody3D, Meshrender3D, CollisionBody3D в разных нодах (в отличие от юньки, где один Box это один Box со всеми скриптами). На блюскай подписался, очень интересно посмотреть что будет дальше.
burandby
09.02.2025 18:30P.S.: Обожаю такие статьи, где ты не просто читаешь гору текста подряд без всякого изъяснения, а пояснения, проблемы во время разработки и картинки и видео.
DarkDes Автор
09.02.2025 18:30Спасибо! Да, старался и долго писал эту статью! У меня есть другая большая статья, но на другом сайте. не знаю, имеет ли смысл её копировать на Хабр.
В самом начале меня тоже путали эти вещи про статик, меш и прочее. Кажется, я и сам не заметил как "осознал" структуру этого. И момент, что лишь один скрипт на объект (ноду) сбивал с толку. Думаю, 1 объект = 1 скрипт я до сих пор не прочувствовал полностью.
BosonBeard
09.02.2025 18:30Статья получилась весьма мотивирующая, спасибо!
DarkDes Автор
09.02.2025 18:30И вам спасибо за комментарий! Рад, что статья кому-то оказывается полезной и мотивирующей!
Mr_Cheater
09.02.2025 18:30Очень интересно, спасибо!
По поводу 2.5d - поправьте, если ошибаюсь, но насколько я знаю, 2.5д - это, грубо говоря, просто выставленная определенным образом 3д-камера в 3д-окружении, но с возможностью использовать 2д и 3д ассеты, т.к. все взаимодействие происходит в двумерном мире.
А есть движки, в которых можно прям изначально выбрать 2.5д шаблон?
DarkDes Автор
09.02.2025 18:30Спасибо за комментарий!
Всё именно так, в 2.5д играх обычно основное пространство это 3д, куда добавляются 2д или 3д ассеты.
Я делал 2.5д игру на GameMaker, который позиционируется как 2д движок, но через код там есть доступ к очень базовому 3д. И вот тут ситуация была чуть иная: уровни, спрайты и прочее это всё было 2д, а в коде я расширял размерность до 3д. А в том же Unreal я делал 2д игру, однако, там использовались и 3д сцены, и коллайдеры, и прочее, однако, можно назвать и это 2.5д.
Честно сказать, я не могу припомнить шаблоны 2.5д в тех движках, что я использовал. Разве что в Unreal был пример 2д платформера, а как я писал выше, в Анриле любое 2д происходит в 3д пространстве. Вероятно, аналогичное есть и для Unity.
Mr_Cheater
09.02.2025 18:30Спасибо за ответ!
Я не работал с GameMaker, интересные нюансы в разных движках.
Motohara
09.02.2025 18:30Круто, поздравляю с успешным завершением челенджа, делать что-то на протяжении года это похвально. Было интересно узнать с чем были сложности и мысли по поводу работы с новым движком. Это часто помогает, да и просто интересно читать. Крэш и правда хорошим получился, даже лёгкую ностальгию поймал(ещё немного доработать и от оригинального и не отличить). Отдельно выделю 3д модели, красивые...
DarkDes Автор
09.02.2025 18:30Благодарю! Да, я во время разработки Крэша сам очень сильную ностальгию словил и захотел поиграть, что вероятно сделаю в обозримом будущем!
Andezion
09.02.2025 18:30Очень круто!
Я писал "игры" на С/С++(SDL/SFML), но сейчас пробую перейти на Godot
Спасибо за статью!!
DarkDes Автор
09.02.2025 18:30Однажды я планировал попробовать SDL\SFML, опробовать свои силы, так сказать. Ведь я вообще начал свой путь с Си и даже несколько раз пытался сделать "движок"! Теперь это конечно звучит смешно т.к. во всех аспектах было всё не то, нелогичные решения и прочие "зато я свой напишу". Впрочем, я до сих пор не избавился от вредного "зато своё". Спасибо!
AerisMK1
09.02.2025 18:30Отличная статья, можно сказать даже вдохновляющая, видно как автор через пробы и ошибки познает движок, а игры с каждом разом получаются все лучше. Последняя игра так вообще спокойно могла быть в стиме. Надеюсь будет больше статей такого формата.
DarkDes Автор
09.02.2025 18:30Загадывать не люблю, но на последние две игры у меня были планы. Возможно, что когда-нибудь в будущем доделаю их (соединив в одну игру) и будет релиз. Или нет. Тут большое поле неопределённости.
Знаете, я очень любил писать статьи после конкурсных участий. Не каждое расписывал, но вы можете посмотреть список ссылок. Я дублировал эти статьи на разных площадках. И появляется вопрос: стоит\нужно\можно ли на Хабр какие-то из этих статей разместить тоже? Они уже старые довольно.
Carbonium
09.02.2025 18:30Последняя игра так подкупает стилем, что нечто шутеро-подобное в этом виде я бы обязательно купил в steam. По поводу старых статей, на хабре есть формат погружения в ретро, возможно вы бы могли сделать серию статей, добавив примечания к своим старым статьям. Спасибо большое за шикарный материал!
islamrustamov
С 2024 года начал вкатываться в геймдев (в качестве хобби) и начал с гейммейкера. Сначала тащился от него и от его "новичковой дружелюбности", но через полгода работы с ним понял, что мне капец как не нравится гейммейкер.
Пересел с него на годот и ваще кайфую. Намного больше нравится gdscript, нежели gml, анимации через твины строить это прям то, что нужно было да и в целом на маке поддержка годота лучше, чем гейммейкера (он через полчаса начинал лагать просто жесточайше и приходилось перезапускать)
Возможно мне гейммейкер не зашел из за "моего скилл ишью", а возможно реально гейммейкер не дотягивает до годота, кому как.
DarkDes Автор
Интересно, а чем именно не понравился Гейммейкер? Похоже, что каждому своё. Если бы я раньше познакомился с Юнити, а не ГМ, то наверно на нём остался бы, набирался бы опыта там, а не в ГМ. Глядишь и более резко отзывался бы о Годоте т.к. противопоставлять Годот и Юнити попроще, чем мои "10 лет опыта в ГеймМейкер"