📙 Дневник Игродела


Kanal geosi va tili: Rossiya, Ruscha


Превращаю идею и 100 000 рублей в игру для ПК. За 5 месяцев прохожу путь от подготовки до релиза в Steam.
Пишу об итогах дня, процессе и задачах разработки. Делюсь полезными материалами.
Статьи: http://telegra.ph/GDJournal-02-19
Автор: @laidrivm

Связанные каналы

Kanal geosi va tili
Rossiya, Ruscha
Statistika
Postlar filtri


Привет!

Я тут выпал почти на полтора месяца. Месяц писал диплом, потом разгребал дела и боролся с прокрастинацией. Решил выкинуть это время из срока проекта. Так что считаем, что сегодня день 56 😅 Да-да, метод несдвигаемых дедлайнов — это сегодня не про меня.

Ещё решил, что если второй раз случится такая фигня, перейду в режим «как пойдёт». Хотя надеюсь, что так не случится.

Пока было не до игры, всё равно посетил пару геймдев мероприятий. Сегодня — об одном из них. Месяц назад прошла лекция Александра Шишенина «Как взламывать игры». Лектор рассказал историю и классификацию хаков. О том, как писать malware там не было. Зато были принципы атаки и защиты. Конспект: https://teletype.in/@gdjournal/r1dnQvvyX.

Осталось: 94 дня


День 55

Как обещал, пост об игровых мероприятиях.

1) Канал @gamedev_calendar. Бывает ощущение, что посты проплачены, но лучше агрегатора не нашёл. Пишут о мероприятиях всея СНГ. Онлайн и оффлайн.
2) screamschool.ru — школа игровой индустрии на Артплее. Организует собственные лекции и дни открытых дверей.
3) hsbi.hse.ru — Аналогично п.2, но от Вышки. Одно из направлений факультета учит геймдеву.
4) vk.com/devsgo — геймдев-митап в барах.
5) vk.com/sgdnmeetup — геймдев-митап в кальянных. Как и п.4, темы иногда выбирают абстрактные, но интересные. Оба с шоукейсами и приятным сообществом.

Осталось: 95 дней


Video oldindan ko‘rish uchun mavjud emas
Telegram'da ko‘rish


День 54

Пока пытался сделать и выложить что-то достойное, РКН решил прикрыть Телеграм. Слышал, что провайдеры начнут блокировать 16 апреля. Внутренние прокси упали под нагрузкой, но скоро должны подняться. Обход блокировки для ленивых: @socks5_bot.

Раз уж пишу пост, заодно расскажу и покажу, что с прототипом. Игровую часть пока отключил, потому что глючит. Из нового:
• Переоформил титульный экран и меню. Титульный экран приблизил к оригинальному из GameDev Tycoon.
• Поменял музыку. Теперь играет приятный джазец.
• Управлять теперь можно ещё и мышкой.
• Перерисовал персонажа, сделал ему 2 анимации: работать и думать.
• Когда персонаж работает, рандомно звучит один из семи сэмплов печати на клавиатуре. Когда думает — звучит почёсывание головы.

Об остальном напишу, как исправлю механики.

Больно от того, что на простые вещи уходит куча времени. Архитектура не защищает автора от самого себя. Это превращает огород, в котором можно наворотить багов, в бескрайнее поле.

Бегло прочитал ещё две книги, которые рекомендует sfml-dev.org. Это SFML Essentials и SFML Blueprints. Надеялся найти там подходы проще и эффективнее. Увы, работаю дальше с тем, что есть.

Ещё хочу внести в прототип:
• Загрузчик. Звуки и текстуры перевалили 20 мегабайт. Загрузка игры до титульного экрана стала заметна. Чтобы исправить, придётся подгружать файлы параллельно основной работе программы.
• Переменная громкость эффектов. Сейчас они воспроизводятся с громкостью по умолчанию. Если громкость ударов будет меняться, станет реалистично и правильно. Если громкость будет меняться, пока эффект воспроизводится, то вообще кайф.
• Небольшие улучшения кода. Исправить глитч анимации работы (на видео костыльно обошёл его). Вместо нескольких логических переменных, ввести перечислимые типы. Ну и всё такое по мелочи.

Завтра иду на gameday.screamschool.ru. Вечером напишу, как и где узнать о подобных игровых мероприятиях.

Осталось: 96 дней


Sonniss.com - GDC 2015-2018 Game Audio Bundles.rar
851.3Kb
Ну и раз написал о звуке, архив с четырьмя торрент-файлами. В сумме 75 Гб звуков для игр. Лицензия позволяет использовать в коммерческих проектах.


Video oldindan ko‘rish uchun mavjud emas
Telegram'da ko‘rish


День 43

С книгой всё. Теперь в меню и миссии играет музыка. Появились звуки у бустов, выстрелов, ракет и взрывов. Обнаружил, что у SFML есть свои странности.

Первая. Объект, у которого проигрывается звук, называется слушателем. Он определяется тремя трёхмерными векторами: местоположением, направлением вверх и направлением вперёд. Направления вверх и вперёд не обязаны быть ортогональными, но совпадать не могут.

Вторая. Не получилось расположить слушателя и источники звука в одной плоскости — хотя в 2D они именно так и расположены. Если так сделать, звук от источников слева будет слышно только в левом наушнике и наоборот.

После поста — видео с тем, что получилось. Начал переделывать это всё во второй прототип Startup Story.

Осталось: 107 дней


Video oldindan ko‘rish uchun mavjud emas
Telegram'da ko‘rish


День 40

Разобрал восьмую главу. Добавил поддержку частиц, анимации и шейдеров.

Частицы — объекты из четырёх вершин. Вершины собираются в один массив, чтобы отрисовать их все сразу. Так работают ракетные пламя и выхлоп. Частицы появляются из генераторов. Несколько генераторов могут производить единый массив частиц. Например, если это ракета с тремя соплами.

Анимацию сделал покадрово, через спрайтшиты. Это хорошо заметно у взрыва. Там 16 кадров, которые за секунду меняют друг-друга. Если экран обновляется 64 раза в секунду, то кадр взрыва меняется раз в 4 обновления. Кадры лежат в одном файле, поэтому достаточно выбрать прямоугольник, в который влезает взрыв и сдвигать его по изображению.

Шейдеры — один из способов сделать пост-эффекты. Это когда меняется уже отрендеренная картинка. Шейдер применяется к экрану целиком. Поэтому то, что отрендерили, сначала загоняют во временный буфер. Этот буфер — текстура, которая содержит экран целиком. Для примера включен шейдер «свечение», который выделяет яркие объекты.

Чтобы сэкономить время и не рисовать текстуры вручную, использовал материалы к книге. Поэтому гифка слегка отличается от тех, что были раньше :)

Осталось: 110 дней




Пятюню организаторам, которые делают онлайн-регистрацию, но не делают рассылку, что отменили событие. Даже объявление на дверь аудитории на повесили.
10 увлекательных лекций из 10!


День 38

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

Пилю визуальные эффекты: поддержку частиц, анимаций и шейдеров. Осталось всего 2 главы. Как разберу, начну делать второй прототип — с нормальным кодом и основным игровым циклом.

Вечером иду на лекцию «Эволюция игровых механик». Снова от вышкинской ВШБИ, на этот раз в КЦ ЗИЛ. С меня конспект :)

Осталось: 112 дней


Video oldindan ko‘rish uchun mavjud emas
Telegram'da ko‘rish
В настройках — работающая смена управления.


День 35

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

Также улучшил код UI. Абстракция такая. Интерфейс состоит из компонент. Компонента — контейнер, кнопка или вывеска. Контейнер связывает остальные компоненты. С кнопкой понятно. Вывеска — короткий текст, типа заголовка. Каждая компонента может быть неактивной, выделенной или активной и менять состояния.

После поста будет очередная гифка. Начал писать классы и логику игровых объектов.

Пока программирую, не набирается материал для постов. Думаю над новой рубрикой.

Осталось: 115 дней


Video oldindan ko‘rish uchun mavjud emas
Telegram'da ko‘rish
Если окно неактивно, игра на паузе.


День 31

Отошёл от перелётов и вернулся в рабочий ритм.

Перед тем, как ловить баг с фпс, перебрал и разбил на модули код. Ошибка пропала, так что даже не знаю, в чём была причина.

Продолжаю разбирать «SFML Game Development». Добью до последней главы — там о мультиплеере, пока не надо.

Добавил в игру пользовательский ввод через шаблон «Команда». Именно он рекомендуется для этой задачи в «Шаблонах игрового программирования». После поста скину гифку, что теперь умеет код. Игра собрана из книжных примеров, поэтому не похожа на прототип, который кидал раньше.

Число в конце поста слегка угнетает, но заставляет работать ещё жёстче, чем до путешествия.

Осталось: 119 дней


День 26

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

Сцена теперь рисуется по дереву. У дерева есть корень, родительские и дочерние элементы. У дочерних элементов геометрические преобразования считаются относительно родительских. У родительских — относительно мира.

Чтобы рисовать объекты в правильной последовательности, добавил слои. Верхний слой точно рисуется позже нижнего. Как рисуются объекты внутри слоя — не важно, они друг-друга не перекрывают.

Также сделал скроллинг карты. У карты зациклена текстура, получился бесконечный фон. В архитектуре появился класс «Мир». Туда перенёс инициализацию игровых объектов и сцены из класса «Игра».

Правда, где-то в коде проблема: после десяти секунд фпс падает до одного. Дебажу.

Как закончу с этим, бегло прочитаю четвёртую главу. Если там попроще, то продолжу разбирать книгу. Если нет — пока переключусь. Займусь артом, например, а то там дальше референсов дело не ушло.

Осталось: 124 дня


День 23

Сделал менеджмент ресурсов. В SFML текстуры, звуки, шрифты и даже шейдеры похожи. Поэтому на них хорошо лёг один и тот же интерфейс. Чтобы не переписывать один и тот же код, использовал шаблоны плюсов — впервые за пару лет :)

Поправил классы для игровых объектов. Теперь у них есть строгая иерархия. Правда, бывает и другой подход — компонентный. Он используется, когда типов игровых объектов много и иерархия становится перегруженной. Если почувствую, что это мой случай, пойду изучать http://optank.org/game-development-design/.

Снова переделываю отрисовку. На этот раз добавляю поддержку геометрических преобразований и относительных координат. Преобразования — поворот, перенос и масштабируемость. Относительные координаты — когда место одного объекта в пространстве задают через смещение относительно другого объекта.

Ещё начал рисовать диаграмму классов — какие есть, кто что наследует и кто с кем взаимодействует. Выложу, как закончу разбирать книгу.

Осталось: 127 дней


День 22

Сделал так, чтобы игра нормально работала с тиками. Тик — один проход игрового цикла. Было несложно: зафиксировал время на апдейт и стал сравнивать его со временем с последнего апдейта. По мнению авторов книжки об SFML, так получается точнее, чем с фиксированным фреймрейтом или sleep'ами. Когда буду полировать, сверюсь ещё с этой статьёй: https://gafferongames.com/post/fix_your_timestep/.

Теперь копаю, как работать с медиаресурсами: картинками, звуками, шрифтами и шейдерами. До этого разобрался сам с картинками и шрифтами, но в книге речь о ситуации, когда ресурсов много. Ресурсы грузятся долго. Когда их много и нет контроля, возникают фризы. Поэтому следующим в игру впиливаю менеджмент медиаресурсов.

Осталось: 128 дней



20 ta oxirgi post ko‘rsatilgan.

96

obunachilar
Kanal statistikasi