Рубрика развивается при поддержке
Gamedev
chelovekbeznika
707

"Объясняю каждую строчку" - отчёт за апрель. А так же конкурс!

Больше "пыщь-пыщь" богу "пыщь-пыщь"!
В закладки

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

Что изменилось за месяц?

У нас появились стены! Сквозь эти стены не пролетают враги, пули и игроки. А ещё враги не "складываются" в одного мегаврага, хоть и могут иногда пролететь друг сквозь друга. Мы катаемся вдоль стен, не проходим сквозь стены, даже если они расположены неудобно. Казалось бы, мелочь, но мелочь важная и в меру трудоёмкая.

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

И вот когда я закончил со стенами я взялся заново за стрельбу. За последнюю парочку стримов наши враги научились стрелять. Ровно тем же кодом, что и игрок. А потом я взялся эту стрельбу усиливать, чем на данный момент и занят. Все действующие лица могут, если пошаманить в "чертежах" (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 (потому что для меня это рабочий день будет) проведу ещё один стрим. И уже после этого постараюсь вернуться к своему обычному расписанию: понедельник, среда, суббота.

{ "author_name": "chelovekbeznika", "author_type": "self", "tags": [], "comments": 26, "likes": 17, "favorites": 22, "is_advertisement": false, "subsite_label": "gamedev", "id": 48545, "is_wide": false, "is_ugc": true, "date": "Tue, 30 Apr 2019 18:19:44 +0300", "is_special": false }
Проект в сеттинге киберпанка
Вакансия Game Designer
я с вами!
0
26 комментариев
Популярные
По порядку
Написать комментарий...
2

О, ещё одна клёвая игра в кучу гуглплея или стима. Сразу видно что будущий шедевр

Ответить
3

С таким отношением - только торрент.

Ответить
0

Что за извращение качать маленькие игры для мобилы через торрент. Я и без торрента её не скачаю)

Ответить
1

Очевидное Entity или GameEntity. Придумать что-то, более отражающее суть, сложно.

Ответить
1

Чтобы потом плодить сущности, хитро-хитро.

Ответить
1

"Синоним гейм обжекту придумать?" - Вкратце, да.
"А ещё, почему оружие и пули не сделаны через гейм обжекты, можно плз вкратце?" - Вкратце: так исторически сложилось. А если серьёзно, то оружие - часть игрового объекта, а пуля мне показалась слишком уж "мелкой" для того, чтобы стать полноценным действующим лицом.

Ответить
0

Как вариант - Element. Достаточно абстрактно и обобщённо, без заявок на что-то конкретное. На участие в конкурсе не претендую, если что:)

Ответить
1

"На участие в конкурсе не претендую" - Поздно!

Ответить
0

Спасибо, дружище, но, к сожалению кошелька нет. Засчитай как донат что-ли:)

Ответить
0

Чёт не понял задания. Синоним гейм обжекту придумать?

А ещё, почему оружие и пули не сделаны через гейм обжекты, можно плз вкратце?

Ответить
0

Это нормально. Потому что они игровые объекты (тут вкратце закончилось). Как и любые игровые объекты они имеют одинаковую основу и поведение типа внутреннее поля типа вектора для задания положения в пространстве, угол поворота, вектора для скорости, ускорения и так далее (возможно у автора это реализовано немного иначе, но это не суть ). А теперь перестаньте это читать я пропустил "не". И тоже присоединяюсь к вопросу если они действительно не наследники GO.

Ответить
0

Вот-вот, я просто в ue4 тыкаюсь чуть более полугода, и слабо себе представляю причину не выносить оружие и пули в отдельные... сущности. Разве что оружие в игре будет только одно.

Ответить
0

Почему не GameObject? Unity и CryEngine используют и не парятся. У UE есть Actor, но это ещё хуже.
(если бы я писал код только для себя, то назвал бы как-нибудь вроде Pidor или Mudila, но только из любви к ругани)

Ответить
0

Не даёт почти никакой информации о предназначении класса и его производных. Игровой объект? У нас тут C# - и там всё является объектом. Ну, и раз мы делаем игру, то всё является игровым объектом.

Ответить
0

У вас в шарпе нет неймспейсов, как в плюсах? Это могло бы решить проблему.
Другие классические названия - Actor, Entity, Node (с акцентом на иерархичность структуры). Ничего лучше не придумано. Пока не было наследования, можно было ограничиться разделением на player, enemy, static, movable и т.п., но сейчас это уже просто моветон.

Ответить
0

Есть неймспейсы, конечно. Проблема не в том, что имя совпадает (в Monogame нет никакого GameObject и близко). Проблема в том, что само имя мне очень не нравится.

Ответить
0

А вы хотите обязательно что-нибудь необычное, чтобы враги не догадались?

Ответить
0

Ну, хочу найти что-то, что лучше передаст суть. Всё-таки, между "всё, с чем мы в игре работаем" и "GameObject" есть большая разница. Я уж молчу о том, что никакой иерархичности, как в Unity, Godot и им подобным, у меня и близко нет.

Ответить
0

Тогда дарую Pidora и Mudilu в безвозмездное пользование!

Ответить
0

Все таки моё имхо

Вот «все, с чем мы работаем в игре» - это как раз таки классический GameObject. Ты можешь его назвать как хочешь, но сути это не поменяет. Думай не о том что ты хочешь, а чтобы понятно было другим (у тебя же опен сорс проект).

Вариант с Entity тоже норм, но вообще его лучше использовать для каких то «осязаемых» объектов.

Я писал свой движок для создания игр. И тоже одно время думал как же назвать сущность, которая будет описывать все в игре. В итоге все сводилось ко всяким GameObject, Instance, GameInstance, Entity, GameEntity, CoreObject и прочему.. Если что то из этого списка тебе подойдёт - будет хорошо. В моем случае все решилось проще - у меня во всех классах была приставка названия движка (типо как в unreal engine UE, у меня другая аббревиатура). Поэтому у меня получился базовый объект FEObject, а от него уже пошли FEGameObject, FEEntity и прочее..

В твоём случае ты не разрабатываешь движок, поэтому теоретически тебе не нужен какой то core объект (зачем?). Тебе должно хватить условных Objects и Actors, где objects - некие статические объекты, actors - динамические. Ну или их можно по другому назвать. Они унаследованы скажем от “gameObject”-a из mono framework (наверняка там что то такое должно быть). А от них уже будут наследовать какие то более специализированные классы (player, enemy, bullet, gun, wall, cloud, sky и прочее)

Ответить
0

Я имел в виду, что между "всё, с чем мы работаем в игре" и "GameObject" в моей игре, как он сложился, есть большая разница. То есть имя GameObject намного абстрактнее, чем назначение этого класса в игре. Пересмотрите раздел фактов о GameObject.

Ответить
0

BaseGameObject BaseObject CommonGameObject CommonObject, а вообще GameObject это нормально, это у вас просто тараканы в голове, но они есть у всех )

Ответить
0

Еще есть ёмкое - "Definition". Самое что ни на есть "определение". Плюс на сленге "дифинишеном" обзывать можно будет)
http://pa1.narvii.com/6381/70c669010aded1fa0ea15a5b417ee7ae3912f31b_00.gif

Ответить

Прямой эфир

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }