TDS: потс-мортем
Это перевод моего поста с итча, если вы хотите прочитать его в оригинале, вот ссылка.
Теперь, когда Девтобер закончился, пришло время подвести итоги. Если честно, во время самого Девтобера я особо ничего нового не узнал, не считая, возможно, следующих моментов:
- Работать над игрой до часа ночи и просыпаться в 6:30 утра, чтобы идти на работу — это вполне реалистичный график.
- Даже если у вас есть играбельная демка, не требующая установки, и вы постите обновления каждый день, всем все равно будет наплевать. Нужно либо прикладывать куда больше усилий для пиара, либо пилить что-то совершенно экстраординарное. Наверное. Я не проверял.
Однако, я многое узнал во время разработки вне Девтобера, которая началась еще в сентябре 2018-го, когда игра была просто движком на вебЖЛ. И да, этот пост также и постмортем для всей игры, так как я достиг той точки, когда даже мне не нравится, в каком направлении движется разработка. Почему — сейчас узнаете.
Что пошло не так:
- Геймплей. Главная идея игры, помимо очевидного «убей их всех, не сдохни, купи новые пушки, ГОТО 0», заключалась в том, чтобы заставить игрока мыслить тактически, выбирая подходящее оружие для борьбы с каждым видом врагов. Но оказывается, когда враги прут со всех сторон, самое подходяще оружие — это то, которое наносит наибольший урон за наименьшее время. Звучит невероятно, верно ?! Хотя я думаю, что на самом деле я смог бы заставить это работать, если бы перебалансил оружие, снизил цены, сделал врагов жестче, а общий геймплей — медленнее, как, например, в Sunless Skies.
- Наследование. Это главная причина, по которой я отказался от TDS, именно из-за этого архитектура игры скатилась в говно. Просто не используйте его, поверьте мне. Используйте компоненты.
Что пошло так:
- Компоненты. Я их начал использовать при реализации различных видов пуль (например, пули, которые рикошетят от стен; пули, которые взрываются с осколками
и т. д. ), и сперва я делал их подклассами основного класса Bullet, пока не понял, что с подклассами скомбинировать эти виды не получится. После этого я перешел на компоненты (о чем я уже писал ранее) и к подклассам уже не возвращался. - Оружие. Я хотел гибкую систему, которая позволяла бы мне создавать всевозможные паттерны стрельбы, но я ничего не мог придумать, не считая того, что основной паттерн должен состоять из нескольких подпаттернов, которые, в свою очередь, уже состоят из пуль, содержа их положения, скорости, вариации в положении, вариации в длине скорости, вариации в угле скорости
и т. д. , но вводить все это вручную — это уж чересчур. Я загуглил «bullet hell pattern implementation», но ничего не нашел. Тогда я придумал класс-конструктор паттернов, использующий шаблоны «строитель» и «текучий интерфейс», который позволял бы пользователю добавлять новые пули в подпаттерны, трансформировать и копировать их. И оказалось, что такая система работает довольно неплохо, взгляните, например, на реализацию тяжелого пулемета, его паттерн состоит из трех подпаттернов, с 5 пулями в каждом, что означало бы, что мне пришлось бы вводить данные для 15 пуль, если бы я сделал это без класса-конструктора, и я даже не говорю о пушке босса-алмаза, стреляющей радугой, которая выпускает 72 пули с разными скоростями и цветами:
Что пошло и так, и сяк:
- Векторная графика. С одной стороны, ИМХО, она выглядит стильно, и очень похожа на графон из Geometry Wars и олдскульных игр, типа Asteroids или Tempest (чего я и добивался), но при отрисовке линии выходят пикселизованными, это — следствие рендеринга во фреймбуффер, что необходимо для использования эффектов пост-процессинга, типа bloom. Я взглянул на алгоритмы антиалиасинга, но они, похоже, скорее подходят для текстурированных поверхностей, что неудивительно, поскольку алгоритмы сглаживания линий (например, алгоритм Сяолиня Ву) просто рисуют плавные линии с самого начала.
- Редактор. Мне пришлось запилить собственный редактор векторной графики, так как ни один из имеющихся мне толком не подходил, и это и правда оказалось куда лучше, чем вбивать координаты точек вручную, однако в нем было много недостатков, из-за которых мне все равно частенько приходилось редактировать полученный JSON вручную. Главная проблема, на мой взгляд, заключалась в том, что я решил использовать canvas для рисования фигур вместо SVG. С помощью SVG я мог легко использовать какой-нибудь MVVM-фреймворк и просто забиндить позиции точек к данным во вью-модели, и мне не пришлось бы заново перерисовывать канвас каждый раз, когда происходят какие-либо серьезные изменения.
- Физика. Реализовать собственный физический движок — это то, что я всегда хотел сделать с тех пор, как решил стать разрабом (то есть, примерно с 2006-го года). И по большей части мне это удалось. Я представлял объекты в виде нескольких окружностей и использовал равномерную сетку для broad-phase. В общем, обнаружение коллизий было довольно тривиальным. А вот разрешение их было уже куда сложнее. Для этого мне нужно было бы найти те окружности, которые столкнулись первыми, и я не нашел эффективного способа это сделать, поэтому мне пришлось прибегнуть к костылю и вместо этого использовать хитбоксы, образованные окружностями, что было куда грубее, и периодически выглядело очень странно. В следующий раз я, наверное, просто возьму чужой движок.
- Оказывается, разрабатывать движки веселее, чем разрабатывать игры! Да-да, это так!
Ну и что теперь:
Ну, я не забрасываю TDS полностью. Пока что. У меня все еще есть некоторые запланированные фичи и багфиксы, такие как дисплей денег, ребаланс некоторых врагов и пушек, изменение некоторых волн, возможно, добавление новых пушек и врагов, но на этом все. Я не планирую выдрачивать игру до состояния готового продукта или добавлять в нее звук.
- 03 ноября 2019, 23:42
- 07
А почему не добавлять звук? Это же недолго в LabChirp понажимать Randomize
Потому что. Можно расходиться и не ждать особо интересных игр за авторством господина Furryfoksu!
Потому что надо выбрать звуковое API и освоить его. И изучить, как работают звуковые синтезаторы.
Примерно вот так :)
Нет-нет, это не так. Это всего лишь означает, что ты разработчик движков, а не игр.
Шпиль-крафт-верк-мейстера ответ.
Не забывай приписывать "ИМХО" к утверждениям про веселье. Потому что конечный результат для геймера - это игра. Движков миллионы, в них не сыграешь, а разработать их может порядочно много людей. Надеюсь, у тебя будет хорошая команда/компания, если ты всерьёз в это всё идёшь.
Если без шуток, то, возможно, разработка игры понравилась бы мне больше, будь у меня движок получше. И мы вроде про веселье от процесса разработки, а не от самой игры говорили.
...Да, это верно.
Пропустил слово. Про Spatial hashing наверно, или нет!
Спасибо, пофиксил.
Это только про редактор, или в целом про игру? Если второе, то у меня есть сильное подозрение, что такое обилие SVG-объектов напрочь бы съело производительность. Я сам в своем поделии отказался от SVG отчасти по этой причине.
Только про редактор, конечно.
кситилон, если движков миллионы, то пи3даболов вроде тебя квадриллионы. Анализируй это
Ты вообще понял, что написал?
А откуда такой менторский тон, я не понял? Нуб, ты хоть знаешь кому пишешь?
А я не понял, причем тут Кситилон и миллионы движков. Хочешь с Кситилоном отношения выяснять - ему и пиши.
Явно не очень адекватному человеку.
ТЫ мне зачем пишешь тогда? Касаемо твоих поделий мне и так все понятно. Игры - не твое. Займись чем-нибудь, что более соответствует твоему уровню. Например, чисткой сортиров в местных забегаловках - от тебя пользы побольше будет
Понятно. Таблетки принять не забудь.
Это биполярочка - писать не в тему коммент к посту, а потом удивляться, что автор поста отвечает на коммент, не понимая к чему он?
Девушке из третьей части Metal Gear Solid? Или это просто Босс, а большой - это один из Снейков? Уже забыл)
У своего второго отца спросить не забудь
Дурачок, будь аккуратнее. А хочешь постов в свою засратую тему касаемо своих всратых поделий - пиши бомжам у себя на помойке, они тебя поймут. У меня, в отличие от них, с авторами недоделок желания лояльничать нет никакого
Я вижу, что таблетки так и не были приняты. Прискорбно.
О себе лучше поволнуйся. Устройся на работу и требуй надбавки к пенсии за чистку сортиров в заведениях своего начальства, старик
Не надо проецировать.
Биг Босс, а что случилось-то? В чем причина такой мощной агрессии?