1: Как это (не) получилось \ Вирмир2, но 1

Вступление

Конкурс. Тема: Реальность и Фантазия. Дополнительное условие: «два геймплея одного жанра».

Долго сидел и думал над условием. Были одни вопросы, мне нужна была конкретика, но ощущал я это всё исключительно туманно, неизвестны были рамки дозволенного. К этому добавлялось то, что я обещал попробовать и сделать игру на неизвестном мне ранее движке.

В голове накидал идеи, одна эпичнее другой и требовала бы по году разработки, а то и больше. К какому-то моменту решил сделать свой любимый финт на конкурсы — склеить все разные идеи в одну. Таким образом появился «Концепт Вирмир2».

Что получилось

В результате участия вышла недоделка, а вот небольшая демонстрация:

Кратко что есть: микро квартира, где игрок может «поспать», «поесть» и главное поиграть в компьютер! А в компьютере игра Вирмир, где игрок ходит, прыгает и «гладит» вражеских рыцарей палкой, а они и не против они игрока в ответ. Цель проста: добраться до выхода включая рычаги, которые отпирают решётки. Игра простая как 5 копеек!

Логотип конкурса повесил на стену, потому что не успел и\или не смог сделать заглавный экран. У отсутствия заглавного экрана есть ещё одна проблема: игра начинается сразу же, что как мне кажется мешает некоторым игрокам.

Оригинальная задумка

Предполагался относительно крупный проект, который реально реализовать в рамках 3−4 недель. Примерно 14.04.2023 начал составлять простой текстовый документ, описывающий все важные моменты игровой идеи. Вышло очень много, поэтому передам лишь основную суть:

Gaminator25. Реальность @ Фантазия. 14.04.2023
Отчёт от Бюро Аномальных Находок (на финал): Игровой диск Вирмир2 влияет на мозг, что заставляет потом мир проявляться в реальность.
На движке Godot.
Вид от первого лица
Заметки:
[СОН или КОМП.ИГРА?] -- (Вирмир2)
Если сон, то: Когда спит, то видит сон Вирмир2 о том, что делал сегодня на ЗАВОДЕ.
Если комп, то: На отпуск получает комп и возможность играть в Вирмир2.
Мир1 -- реальность, больница
Мир2 -- средневековый-фэнтези из Вирмир2
[В2] -- Важность2, не столь нужные вещи, но такой концепт, не проблема если не будет.
-----------------------------------------------------------------------------------------
Вместо сюжета:
Глава 1.
Персонаж1 из дома ходит на работу и обратно, ездит на автобусетрамвае.
Когда приходит домой, то может поиграть в компе Вирмир2.
Когда прошли Вирмир2, то попадает молния и начинается следующая глава.
Глава 2.
Персонаж2 милиционер. Должны посетить пациента в больнице, но начинается дичьчертовщина.
Оказывается, что: Он должен разбудить Персонажа1.
Теперь персонаж проходит то Мир1, то Мир2. Монстры.
Глава 3.
Персонаж2 дошёл до Персонаж1.
Персонаж2 должен в нашем мире победить ЗлодеяКолдуна, а Персонаж1 в мире фэнтези.
Тут должен быть пафосный джэкпот!
Конец.
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
***** Геймплей1 Персонаж1 (Глава1) *****
Игрок:
- База: ходить
- База: взаимодействовать
- База: здоровье
- [В2] голод
- [В2] туалет
- [В2] сон
- [В2] есть деньги
На Заводе:
- Мини-игра, где надо вовремя нажимать на одну из 9 кнопок (матрица с таймером)
- [В2] Мини-игра с конвейером, где надо брать отбракованный объект (лента)
- [В2] Мини-игра 3
- Время идёт, таймер.
- [В2] У кровати сохранение, восстанавливается сон и здоровье за время.
- [В2] В туалете восполнить туалет.
- [В2] Холодильник восполнить еду (за деньги)
- [В2] Автобус в который надо зайти и он едет по пути.
Если не работать на заводе или много проигрыша мини-игр, то дают меньше денег.
Если не ходить на работу, то тогда не будет появляться еда в холодильнике (покупается за деньги).
Если опоздать на автобус(по времени), то опоздаешь на работу и дадут меньше денег.
Если играть в Вирмир2, то время течёт медленнее.
Если на заводе, то время течёт быстрее.
Если сон на 0, то тогда Персонаж1 может "уснуть"(затенение экрана),
Если голод, то урон по здоровью.
Если нужда в туалет, то ПРЯМ ТУТ + урон по здоровью + меньше контроля? ------------------------ ненужно?
Если здоровье на 0, то [конец игры].
Нельзя спать, если очень голодный (чтобы не было софтлок?)
***** Геймплей2 Персонаж1(3) (Вирмир2) *****
Игрок: 
- База: ходить
- База: взаимодействовать
- База: здоровье
- атаковать меч
- прыгать
- [В2] защита щит
- Если здоровье 0, то [конец Вирмир2] -- начать уровень снова
- Враги ближнего боя, ходит, махает
- [В2] Враги дальнего боя, ходит, стреляет
- Рычаги
- Двери
- Аптечки
- [В2] Чекпоинты между зонами
Цель карты -- пробраться до финиша (Кристалл)
Цель Вирмира2 -- победить Колдуна.
Сохранение в конце карты.
[В2] Есть чекпойнты.
Чтобы игрок быстро не проходил, то с каждым днём открывается только 1 карта.
Всего 3 карты.
***** Геймплей3 Персонаж2 (Глава2) *****
Игрок
- База: ходить
- База: взаимодействовать загадки решать
- База: здоровье
- атаковать стрелять
- есть очень простой инвентарь (патроны, ключи)
* База: Если здоровье 0, то [конец игры].
- Есть Мир1 и Мир2.
- Мир1: Есть комнаты спокойствия для сохранения
- Мало патронов, выпадают из врагов или можно найти
- (Больные) Враги, медленно ходят, ближний бой. Иногда с них падают патроны
- Можно найти патроны
- "Ключи" (несколько видов, цветные, формы и т.д. чисто по описанию)
- "Двери" 
Вдохновение: Resident Evil
Интерактивные объекты: патроны(подбор), открыть дверь, подобрать предмет (достать из коробки)
***** Геймплей4 (Глава3) *****
Игроки теперь меняются по нажатию кнопки. Геймплей3 и Геймплей2.
Появляется Финальный Босс в двух мирах
- Здоровье
- Стреляет

Если кратко (хе-хе, ну да, ну да), то игра была поделена на 3 главы, 3 «геймплея». Подразумевалось, что глава-геймплей ведётся от лица разных персонажей, так сказать.

В первой главе (Глава1) играем за Персонажа1, который живёт в квартире и ходит на работу НА_ЗАВОД.jpg, где выполняет простую нудную задачу — нажатие на кнопки, мини-игра. Придя домой он включает очень увлекательную (нет) игру под названием Вирмир2, где управляет рыцарем и проходит уровни. А ещё Персонаж1 должен был спать, ходить в туалет и кушац, а еда покупалась на деньги, которые давали за то, что ходишь на работу. При этом на работу надо ездить на автобусе, хотя в рамках реализации это был бы скорее трамвай.

dKomtsz

(схематичное изображение локации, нарисовано специально для статьи)

Собственно уже в первой главе была внесена реализация темы конкурса, а в итоге я и сократил свою игру до минимального необходимого Главы1.

Вторая глава (Глава2) по сюжету резко меняет игрока на Персонажа2, который в концепте был «Милиционер». В Главе1 мы ходили и спокойно интерактивили с кнопками, делали ближний бой и прыгали, а в Главе 2 я хотел всё это перевернуть в медленный шутер от первого лица, с явным вдохновением от Resident Evil. Врагами бы выступали зомби с бубликовидными телами. Почему такой формы? Не знаю! Наверно снова подсознательные метафоры о «пустых» людях с ноткой геймплейного решения сложности прицеливания.

qMKJ3rg
Геймплей3

Третья глава (Глава3) предполагает гибридность как геймплея, так и истории между Персонажем2 и персонажем из Вирмир2, которым управляет Персонаж1 (в итоге этого персонажа я назвал как Персонаж3). Игрока должно было кидать то в шутерный геймплей, то в рыцарский. Перекидывание так же крылось и в сюжетном антураже.

О Сеттинге, Сюжете и Атмосфере

В Главе1 за Персонажа1 (этот режим и сеттинг я назвал Геймплей1) всё должно было быть серым, обычным, возможно, антиутопия. Затем я подумал, что складывая ограничения, навыки и время это место не просто должно быть серым, но ещё и очень минималистичным. Да чего скрывать, оно должно передавать типичную серость окружающего мира (хотя таким я его не вижу).

Геймплей2 (или Вирмир2)  же должен был быть классическим рыцарским фэнтази за Персонажа3. Фентезийно мрачное настроение, которое явно контрастировало бы с блеклой серостью Геймплей1, должно было бы подчеркнуть различия, а динамичный игровой процесс усилить разноплановость. Всего планировалось лишь 3 уровня.

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

Персонаж2 в Геймплей3 исследует и воюет в зомби в Больнице, куда попал Персонаж1 после удара током, что игроку конечно не известно. По ходу раздумий был вариант заменить место действия под улицы города из Геймплей1, метался от одной идеи до другой, но решил что хочу видеть именно Больницу как замкнутое пространство.

К какому-то моменту Геймплей3 превращался в так сказать Геймпрей4, а именно в гибрид Геймплей3 и Геймплей2. Сюжетно оба мира начали существовать в одном. Персонаж2 пересекался с (виртуальным) Персонаж3, сеттинг\локации тоже пересекались: проходя по больничным коридорам и зайдя в дверь игрок мог очутиться в замке.

Финал был такой, что игрок доходит до босса-Колдуна, побеждает его, а Персонаж1 просыпается, конец.

T02FLbn
Как бы это могло выглядеть

Дедлайн близко

Времени практически не было, хотя почти каждый день всего конкурса я так или иначе думал о концепте и толком ничего не делая по нему.

Решено было ещё больше сократить свою Эпичную задумку. Это было третье сокращение (другие не были задокументированы), последнее до принятия окончательного решения «сделать и всё тут».

Результатом стал вот такой рисунок постфактум:

yOjgo3u

Забавно, но даже из этого концепта была выброшена одна вещь! А именно система с ключами, которые должны были выпадать, чтобы разрешить воспользоваться рычагом.

Из Геймпрей1 было вырезано почти всё, кроме главного антуражного элемента и остался Сон с Голодом без подкрепляющих их игровых особенностей.

Геймплей3 был полностью выкинут, как и Персонаж2.

Геймплей2 наверно меньше всего пострадал в плане «фантазия@реальность», хотя тоже значимо подстриг: От размера локации была выкинута идея чекпойнтов, не реализованы враги стреляющие, а ещё всего 1 короткий уровень против 3 полноценных.

Тот уровень что получился это наверно должна была бы быть 1/3 от одного полноценного. Дело не столько в масштабах, сколько в идее того, что стычка с врагом должна даваться не так просто. В итоге получилось очередное избиение палкой тупых болванчиков.

А ещё в игры я хотел показать фразу «Взгляни вокруг Оглянись назад, Духи с тобой связаться хотят, — это реальность, а на мониторе — это фантазия» или что-то такое очевидное, поучительное. Но даже это не было реализовано.

Изучение игрового движка Годот

Кратко о моём геймдевном бэкраунде, если суммировать: Game Maker головного мозга, немного Unity, пару раз открывал Unreal Engine, застукан за движкописанием на C++ OpenGL\DirectX.

Движок я не сравнивал с другими, а принял «вызов» по его изучению с нуля, словно ничего не знаю о своём опыте. На удивление такой подход сработал, хотя так или иначе приходили мысли о том, что «о, это почти как в GameMaker».

Идея архитектуры движка, если я верно понимаю, в том, что всё кругом есть ноды т. е. это минимальный атом структуры, так сказать. У ноды есть дочерние ноды и\или родительская. Одна нода наследуется от другой.

oWCgvlU
Квартира
3EoyW0R
Замок

Основной сложностью лично для меня стало понимание и принятие нод, самой концепции. И что на одну ноду можно нацепить лишь один скрипт, в отличии от Unity (ну вот, опять сравнения сами собой идут!).

Смирился с идеями Ноды, даже 1 скрипт на ноду, что мне казалось странным ограничением. Но затем я обнаружил какую-то даже связь с GM в том, что по идее объект в GM можно описать тоже как один лишь скрипт (так кстати представляется игровой объект в редакторе кода GMEdit от YellowAfterLife).

Вообще по ходу изучения движка я подмечал какие-то схожести с GM больше, чем с Unity. В итоге если поставить GM как 0, Unity как 10, то Godot был бы как 4 как мне кажется. Это не оценка, а положение схожести.

iDihEmD

Мой проект был 3D, следовательно посмотрел лишь поверхностные вещи трёхмерности в Godot. Даже интерфейсы особо не попались мне, кроме ProgressBar и Lable.

Пробовал импортнуть 3D модели, но я не сразу разобрался с этим. Какие-то вещи не были столь интуитивны, например, я не понимал как из самого файла с моделью получить именно что сам Mesh. В итоге оказалось, что это настраивается во вкладке Import, которая всегда была на экране, но в упор не видел её. Пока это один из тех моментов, который мне не понравился структурно: модель это файл из которого ещё нужно вытаскивать Mesh. ОДНАКО, этот файл считывается как Сцена, который можно расположить на уровне, что оказалось буквально как в Unity.

Сцена. Возможно это кому-то может показаться тоже непонятно, но я по каким-то причинам (возможно, ещё школьным) сразу же принял это. Сцена — это тоже Нода! А нода со своими дочерними нодами может быть Сценой! А сохранённая Сцена может быть добавлена в другую Сцену как нода! Сцена Нода, Нода Сцена, Сцена! А если выражаться терминами Unity, то Сцена это аналог Префаба.

Процесс обучения и информация

Документация (оффлайн, в движке) у меня не вызывала особых проблем, она достаточно техническая, хотя есть в онлайн документации и целые уроки для старта.

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

Так же в комментариях к коду я сохранял какие-то ссылки на видео, не знаю насколько будет интересно, но поделюсь ими:

https://www.youtube.com/watch?v=5YT4bFw9k4U

https://www.youtube.com/watch?v=An3uHrAoHRw

https://www.youtube.com/watch?v=CLzMHG9Fplo&list=PLf0k8CBUad-tFUslhUCZt3oO0J3RdmdFc&index=6

https://www.youtube.com/watch?v=qMBJaVL-vKc

https://www.youtube.com/watch?v=25JVDP0S4WY

Разумеется это не все видео и далеко не все ссылки, которые были открыты в этом обучающем путешествии.

Уровень

Прототипы уровней я собрал используя CSG, которые встроенны прямо в Godot. Выглядело это конечно как крайне упрощённая версия того, что доступно скажем в Unreal Engine.

Если пытаться просто объяснить CSG, то это метод создания уровней (или даже объектов), когда мы либо «складываем», либо «вычитаем» примитивные формы. Например, взяв большой куб и вычтем из него куб поменьше и вот у нас комната! … без окон и дверей правда, но думаю понятно!

yKIDcVK
Моя попытка показать CSG

Для локации «Квартира» (Геймплей1) я накидал такой CSG концепт, но дальше заменил это всё моделью. А вот локация «Замок«(Геймплей2) полностью состоит из таких вот примитивов с операциями, накидал её честно говоря в спешке от чего можно заметить там странные решения, которые в итоге потом использовались для спидрана!

Быстрая графика в Блендере

Удивительно как быстро я накидал базовые формы и модели для окружения комнаты: стол, монитор, стул, кухня, холодильник и кровать.

HeDcpqE

Но оказалось не всё так радужно! Во время моделирования у меня появилось резкое желание использовать один давно установленный плагин, но я забыл, что блендер только что обновился, а плагин соответственно не адаптирован под новую версию. Ну и всё вылетало! Всё аж йокнуло, но я был уверен, что сохранялся. Спокойно переоткрываю файл с моделями и … ничего нет! Весь процесс в никуда! Тогда у меня можно сказать бомбануло от самой ситуации и уверенности в сохранении, которая противоречила реальности.

Но спокойствие! Медленно, спокойно осматриваю интерфейс Блендера и вижу кнопку о восстановлении прошлых сессий. Программа отрывает папку, а там несколько файлов, среди которых есть и с сохранённым прогрессом по моделям. Хвала автосохранению!

7FcEtrk
Рыцарь2012; Из игры; Рядом рычаг. Вдали решётка. Блендер. Скриншот в цвете.

Отголоски прошлого достигли меня в модели рыцаря, которую достал из своих старых запасов. Модель где-то 2012 года, когда-то тогда хотел сделать сетевую игру с сокомандниками, ещё в школьные годы это было. Игровая задумка называлась CrownGame. Рыцарь был взят как placeholder, но как известно нет ничего более постоянного, чем временное.

Отступление или Тайна Монолита

В комнате через окно слева виден загадочный объект, прозванный игроками Монолит. В чем же его мистическое предназначение? Мне не хочется рушить всю таинственность, но отвечу на это честно и прямо!

Мне кажется какие-то вещи в этой простой поделке могут быть интерпретированы как какой-то глубокий смысл, который первоначально не был заложен, но в итоге хорошо ложится. Возможно это даже какая-то тема для СПГС.

Так вот, коробка эта является ничем иным как гробом для персонажа игрока! В силу своих малых знаний движка и сверх лимитах по времени я не придумал ничего лучше, чем отправить персонажа в позицию, где он бы был заблокирован в передвижении и взаимодействии. Я и не подумал и не проверил, что данная коробка видна из окна. Но выходит, что такая композиция словно говорит «дышит в затылок"(хоть и в бок), напоминая о том, что ничто не вечно и скоро эта коробка будет достигнет свою цель.

iGZb1a0
Монолит в окне. Окно в монолите.

Итог

Что же я могу сказать подведя итог. Стоит выделить целых два итога: 1. по проекту и 2. по движку.

Честно говоря и думаю очевидно для всех, но игра у меня не удалась. Возможно, что концепт прототипа альфа версии и вполне себе, но свою оригинальную задумку я не воплотил.

По движку могу сказать следующее: имея опыт в GameMaker и немного Unity можно поставить Godot между ними, при этом я бы даже рекомендовал некоторым желающим попробовать начать делать игры с этого движка, если хочется именно 3D. Параллельно с этой разработкой я так же участвовал с другой игрой в качестве художника, но уже на движке Unity и ощущения так сказать свежи. Лучше начинать в Godot.

К тому же движок полностью бесплатный и с открытым исходным кодом, есть сообщество, плагины и материалы для обучения. Это для тех, кто скажем не хочет сталкиваться с подписочной моделью GameMaker (но сам движок можно попробовать бесплатно, а вот для создания EXE — подписка, если не покупался ранее).

Можно скачать то, что у меня получилось вот по этой ссылке с Dropbox: https://www.dropbox.com/s/cffgetv5v85×045/G25_G2.zip?dl=0

Возможно, когда-то пойдёт чистка всякого хлама с сервиса у меня, так что возможно, когда-нибудь эта ссылка перестанет работать.


Расскажите пробовали ли вы движок Godot? И если да, то какое о нём мнение у вас? Сложный или простой он, для каких игр на ваш взгляд подходит?

Если вас интересуют какие-то конкретно технические моменты реализации из моей игры, то спрашивайте!

Всем спасибо, всем пока!