"Объясняю каждую строчку" - отчёт за апрель. А так же конкурс!
Я всё ещё делаю свою видеоигру на стримах. И, как и было уговорено, выкатываю ежемесячный отчёт. Внутри прогресс, планы и конкурс с маленькими денежными призами.
Что изменилось за месяц?
У нас появились стены! Сквозь эти стены не пролетают враги, пули и игроки. А ещё враги не "складываются" в одного мегаврага, хоть и могут иногда пролететь друг сквозь друга. Мы катаемся вдоль стен, не проходим сквозь стены, даже если они расположены неудобно. Казалось бы, мелочь, но мелочь важная и в меру трудоёмкая.
А после стен у нас появились взрывы, пиу-пиу и прочие спецэффекты. То же мелочь, но ради этой мелочи мне пришлось добавить звук и анимацию. И соответствующий архитектурный обвес под них. Теперь я анимирую покадровой анимацией вообще всё. То есть, у меня нет статичных спрайтов, у меня есть анимация из одного кадра.
И вот когда я закончил со стенами я взялся заново за стрельбу. За последнюю парочку стримов наши враги научились стрелять. Ровно тем же кодом, что и игрок. А потом я взялся эту стрельбу усиливать, чем на данный момент и занят. Все действующие лица могут, если пошаманить в "чертежах" (JSON-файлы с настройками баланса):
- Стрелять в фиксированном направлении
- Стрелять в сторону игрока
- Стрелять во все возможные стороны разными пулями
- Стрелять очередями
И вот на этом мы на прошлом стриме и остановились.
Видения светлого будущего
Со временем я начал приблизительно понимать, чего я хочу от этой игры, и во что я собираюсь её превратить. То, что здесь написано, не обещание, а цель, которой я попытаюсь достигнуть.
К примеру, вот к чему я пришёл касательно геймплея:
- Максимально гладкое и понятное управление
- Расстояние между "чек-пойнтами" не больше двух-трёх минут. Без всяких жизней и "continue"
- Плавное нарастание кривой сложности
- Вообще, стараться быть с игроком максимально честным.
Зачем мне именно это? ЧТОБЫ МАКСИМАЛЬНО ЭФФЕКТИВНО НЕСТИ БОЛЬ И СТРАДАНИЕ!!! Ведь у нас шмап, а хороший шмап - он про боль и страдание. И нести их надо так, чтобы не оставалось никаких оправданий. Не разбивай геймпад об стену, ведь это у тебя руки пока кривоваты. В смысле, "я не вынесу этой потери"? Чек-пойнт был сорок секунд назад! Это нечестно? Ты же похожее уже проходил. Да, это у тебя руки кривые. Но ещё три-четыре попытки и всё получится. Или тридцать-сорок. Но получится обязательно.
Ещё одна вещь, на которую кажется естественным сделать ставку - это расширяемость. Код открыт. Ассеты лежат прям вот в облачке. Чисто теоретически любой может скачать, собрать и обработать напильником. Со временем появятся какие-то редакторы, потому что без них я тупо не смогу продолжить разработку. Пока я не знаю, наколхожу ли я что-то сам, или приспособлю тот же Tiled (шикарная штука, попробуйте её как-нибудь). Но у меня будет возможность клепать с помощью этой гипотетической утилитки уровни. И я точно не буду лишать этой возможности других. А там, может, какое API для модов смастерю. Чисто из любви к искусству.
Что касается ассетов. Они выглядят своеобразно. Потому что у меня нет времени и навыков сделать иначе. Всё, что я смог, это сгладить этот эффект, задействовав специальный софт. Во-первых, aserprite, специальный редактор для пиксельных спрайтов, позволяет ограничить палитру. И там есть несколько предустановленных наборов. Я использую "NES". Во-вторых, для звуковых эффектов задействуется утилитка с сайта bxfr.net, которая позволяет соорудить звуковые эффекты в три клика, но как ты ни кликай, получается что-то похожее на пищание вашей старенькой Денди. В результате сам собой получился эффект, когда каждый, кто видит игру, говорит "о, танчики!". Я намерен пока сохранить это.
Подытожим. В далёком светлом будущем должен получится всратый гибрид Nex machina, Super meat boy и танчиков с денди.
Конкурс! С призами!
Есть у меня класс GameObject. А так же GameObjectsFactory, ActiveGameObjectsStorage и прочие. Проблема в том, что название GameObject отвратительно. А нового я придумать не могу. А ведь это чуть ли не центральный концепт для всей игры. Для меня это настолько важно, что я проведу конкурс с денежными призами ради решения этой проблемы.
Задание: придумать новое название для класса GameObject, и обосновать ваш выбор не очень большим текстом (до 200 слов, больше не надо).
Призы:
- 1 место: 600 рублей, сигна, благодарность в прямом эфире, переименование класса GameObject по вашей задумке в прямом.
- 2 место: 300 рублей, сигна, благодарность в прямом эфире
- 3 место: 100 рублей, сигна, благодарность в прямом эфире
Предлагать свои варианты можно в трёх местах:
- Комментарии к этому посту
- Личка паблика вконтакте: vk.com/explainingeverystring
- На нашем дискорд-сервере (прямо в чат можно, заодно его и оживите): https://discord.gg/SuqNtcH
Факты об игровых объектах, которые могут вам помочь:
- Игровой объект можно нарисовать
- У игрового объекта есть хит-бокс, который ловит пули, и не позволяет ему проезжать сквозь стены
- Его можно обновлять на каждой итерации игрового цикла
- Некоторые игровые объекты могут получать урон от пуль
- Игрок является игровым объектом
- Враги являются игровыми объектами
- Стены является игровым объектами
- Пули НЕ являются игровыми объектами
- Оружие, из которого стреляют игрок и враги, НЕ является игровым объектом
- Игровые объекты конструируются по чертежам. Чертежи лежат в JSON-файлах, вроде этого: https://github.com/chelovekbeznika/ExplainingEveryString/blob/master/DataExample/blueprints.dat
- А части игровых объектов делаются не по чертежам, по спецификациям, которые часть чертежа
Ссылки для тех, кто хочет узнать больше:
Работы принимаются до 10.05.2019 23:59:59. Я планирую стрим на 11 мая, где, в прямом эфире и подведу итоги конкурса. Если кто-то сдаст 11 утром, то на свой страх и риск, потом не обижайтесь.
Единственным критерием при выборе нового имени для GameObject будет моё чувство прекрасного. Оно может отличаться от вашего, поэтому попрошу не обижаться, и не разочаровываться. Со своей стороны могу только пообещать обосновать свой выбор в прямом эфире.
Призы невелики, но азарта всем причастным добавить должны. Как говорится, твори, выдумывай, пробуй, дерзай.
Ссылки и расписание
Следующий стрим в четверг, 2 мая, в 21:00 по Москве. Потом 4-го мая в 17:00. Потом на майские праздники я съезжу домой на недельку. И 11-го числа, в 21:00 (потому что для меня это рабочий день будет) проведу ещё один стрим. И уже после этого постараюсь вернуться к своему обычному расписанию: понедельник, среда, суббота.