С перерывом в 6 лет пилю игру под названием DRAWING в жанре bullet-hell. Вот ссылка на itch.io. Играть можно прямо в браузере.
Вот вы мне не поверите, но я начал делать эту игру аж в 2016 году. В доказательство могу предъявить дату моей регистрации на DTF. У меня тогда было очень много командировок по работе, и чтобы как-то проводить время вечерами в гоcтиницах, я решил запилить игру. Да-да, я знаю, это не самое очевидное решение, как можно потратить время в незнакомом городе поздно вечером :-)
Я довольно давно люблю играть в компьютерные игры, но почти все они за редким исключением надоедали мне довольно быстро. Так что я очень редко когда их проходил.
И тут мне пришла в голову идея: раз мне нравится играть в игры, но при этом не нравится в них играть долго, может быть мне стоит запилить свою игру? Для меня это сразу много разных видов деятельности: от кода до рисования, от звука до продвижения, не заскучаешь. К тому же я неплохо владел Photoshop ещё с института, так что норм.
После быстрого сеанса гугления выяснилось, что инди-разработчики давно уже не пилят игровые движки самостоятельно, а используют для этого специальный софт. После недолгого дополнительного гугления мой выбор пал на Unity. Честно говоря, уже не помню, на каких именно аргументах этот выбор был основан.
Я понимал, что сделать MMORPG на 100500 игроков с прекрасным нэкст-ген графоном мне явно не под силу, поэтому я сразу определился с жанром: top-down shooter. Этот жанр требует минимум кодинга и баланса. В общем, я был полон оптимизма и готов был стать вечерним инди-разработчиком.
Ну, что, Unity скачан. Поехали!
Я посмотрел первый ролик на Youtube: как сделать главгероя и привязать к нему камеру. Вроде бы, ничего сложного. Следующий шаг - сделать так, чтобы герой мог двигаться.
И тут - БАМС! Оказывается, мои навыки кодинга изрядно растаяли с момента последнего подхода к PHP. Это единственный язык, на котором я писал что-то сам в далёком-далёком 2006 году. А тут нате вам - C#!
Моя скорость работы над игрой упала буквально до нуля. Мне было непонятно буквально всё: как вставить файл в ассеты, как создать анимацию, как объявлять переменные в C#, какие вообще сущности есть в Unity и ПОЧЕМУ ЭТОТ КОД НЕ РАБОТАЕТ, Я ЖЕ ВСЁ СДЕЛАЛ, КАК В ОБУЧАЮЩЕМ РОЛИКЕ!!!
Было реально трудно, каждый новый вопрос вызывал несколько других, решение приходилось искать очень и очень долго. Постепенно моя игра расширялась, кое-что начало работать, но крайне медленно. Так прошло два-три, может четыре, месяца.
Изначально моей идеей был корридорный шутер в стиле 12 is better than 6, но я понял, что располагая всего лишь одним работником в лице самого себя, я не смогу закончить такую игру за какое-то разумное время.
Я решил снижать количество фич в игре. Но мысли, как бы ещё урезать идею до приемлимых размеров, закончились довольно быстро. И вот сижу я такой перед монитором и понимаю: мне такой объём работ не вывезти... Как раз в это время я решил сменить основную работу, потому что там было слишком много командировок.
В итоге у меня исчезло свободное вечернее время, а размеры проекта требовали невероятно много этого самого времени. А ещё, как на зло, на мониторе у ноутбука появилось чёрное пятно размером со спичечный коробок.
Ну, я и забил, как очень часто делают все начинающие инди.
Прошло примерно 6 лет, за это время я сменил работу ещё один раз, у меня родились ещё двое детей, и я переехал жить во Францию.
Однако, примерно в декабре 2021-ого года я вспомнил о своей попытке в геймдев. И решил снова попробовать. Думаю, что сильнее всего повлияло желание немного раскачать навык программирования, а делать софт совершенно неинтересно. К тому же, делать игру можно в режиме хобби, а вот как писать какой-то другой софт в таком режиме - ума не приложу.
К тому моменту у меня уже был один пет-проджект - подкаст "Планы на завтра" про будущее и долгосрочное мышление, - однако, я решил вновь заняться играми. Больше пет-проджектов хороших и разных!
Итак, файлы на старом ноуте уцелели, а новый бегает намного быстрее. Unity вновь установлена.
Окинув взглядом картину из прошлого, я смело порезал идею до top-down bullet-hell shooter, теперь я вдохновлялся скорее Crimsonland. С таким количеством работы, мне кажется, я справлюсь. За прошедшие с момента первой попытки 6 лет я вообще научился намного лучше оценивать размеры любого проекта и вообще думать в рамках проектного мышления.
Первая строчка кода в новом [старом] проекте была написана на новогодних каникулах 2021 - 2022. Вначале работа шла довольно активно, мне удалось не только реализовать все фичи с прошлого раза, но и сделать несколько других. Но я совсем не подходил к проекту с марта по сентябрь этого года, было сложно заниматься хобби в таких условиях. Но внутренняя мотивация всё равно перевесила, так что я решил доделать игру хотя бы до играбельной версии.
Что и было выполнено буквально несколько дней назад!
Сейчас я понимаю про программирование и геймдев намного больше, чем понимал буквально несколько недель назад, и уж точно больше, чем в 2016 году.
Недавно я дочитал Чистый код Роберта Мартина. В общем и целом, мой код - просто ужасный, нет, он ПРОСТО УЖАСНЫЙ!
Интерфейсов нет, классы кривые-косые, архитектура хаотичная, невероятно много повторений одного и того же кода, из хорошего - только более-менее внятные названия переменных.
Чтобы расширять возможности в игре, например, хотя бы просто добавить несколько дополнительных видов врагов, мне придётся почти полностью с нуля переписать весь код. Графоний пока останется именно таким, какой есть.
Поэтому в моих планах в ближайшее время взяться за архитектуру кода с нуля, чтобы игру можно было развивать. Когда-нибудь я допилю её до early access в Steam, но боюсь даже загадывать когда именно.
Очень прошу всех заходить на kushchin.itch.io, пробовать и комментировать!
Комментарии (21)
Iannamen
28.11.2022 01:39+2Оно норм играется, да ещё и, по словам автора, в коде норм нейминг. Это успех, имхо.
celen
28.11.2022 02:13+1Хорошая игрушка, хардкордная. Выявил баг - нередко (дважды за 11 сыгранных игр) враг материализуется в момент начала волны прямо под нами и мгновенно убивает игрока.
kushchin Автор
28.11.2022 09:46Спасибо! Действительно, проверки на спаун в месте расположения игрока в коде нет. Обязательно добавлю.
viruseg
28.11.2022 09:24+5Умер, потому что после 14 минут в игре стало 5 фпс. Если бы не проблемы с оптимизацией, то игра суперпростая. Это была моя первая попытка.
Попробуйте для просчёта логики врагов и пуль использовать Unity Job System и Burst. Если делать такие вычисления в основном потоке, нормального фпс можно не ждать.
Zara6502
28.11.2022 10:37живу не дольше минуты, не люблю игры с быстрым принятием решений. не в укор игре, это я странный такой )
графика интересная, одновременно и простая и функциональная.
HellWalk
28.11.2022 14:09+1Чтобы расширять возможности в игре, например, хотя бы просто добавить несколько дополнительных видов врагов, мне придётся почти полностью с нуля переписать весь код.
Это норма (с)
В 2017 году написал первую версию боевой системы для своей браузерной пошаговой MMORPG, через год пришло понимание, что надо все переписывать. Теперь код новой версии уже и показывать не стыдно - делаю сразу публично на github
kushchin Автор
28.11.2022 14:35Ок, значит я не один такой, спасибо!
Может посоветуете какие-нибудь книги по архитектуре именно игр?
Zara6502
29.11.2022 05:24Все такие книги будут привязаны к среде разработки/API/SDK и т.п. То есть в вашем случае нужно смотреть всё что касается Unity, на ютубе полно такого материала. По своему опыту скажу, что вопрос архитектуры игр ничем не отличается от проектирования архитектуры любого ПО.
Как пример - если вы используете процедурные языки или ассемблер, то там может быть очень много привязки к размерности ячеек памяти, экрана. Если это ООП, то как правило добавляя что-то в класс вы не меняете кардинальным образом игру.
d4rw1n1s7
29.11.2022 11:19+1Простенько, но затягивает, поздравляю, вы на верном пути =)
Парочка нюансов, на мой взгляд:
- слишком часто падают увеличилки здоровья, они должны быть реже, так как повышают общий запас возможности выживать при танковании урона;
- дробовик имба, нужно к нему патроны, и ограничить их запас на итерацию, а сам дробовик выдавать после первого босса;
- не хватает боссов, пусть они будут теми же толстыми мобами, просто побольше, побыстрее, потолще, со свитой больше чем на итерацию, и сразу с дробовиком во все стороны.kushchin Автор
29.11.2022 11:32дробовик имба, нужно к нему патроны, и ограничить их запас на итерацию
Да, именно так и было в изначальном варианте! Певое оружие, AKA "стрелочки", имеет бесконечные патроны, а для дробовика и последующих видов оружия надо собирать патроны, и они быстро заканчиваются. Но я порезал эту фичу, чтобы закончить играбельную версию.
Скорее всего верну в последующих апдейтах.
не хватает боссов, пусть они будут теми же толстыми мобами, просто побольше, побыстрее, потолще
И это тоже было вначале! Такой толстый моб, который стреляет двумя дробовиками.
слишком часто падают увеличилки здоровья
Спасибо, учту, баланс трудно настраивать даже в таком минималистичном окружении.
Radish
Крутая игруха.