Gamedev chelovekbeznika
666

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

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

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

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

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

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

И вот когда я закончил со стенами я взялся заново за стрельбу. За последнюю парочку стримов наши враги научились стрелять. Ровно тем же кодом, что и игрок. А потом я взялся эту стрельбу усиливать, чем на данный момент и занят. Все действующие лица могут, если пошаманить в "чертежах" (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" }
{ "id": 48545, "author_id": 105160, "diff_limit": 1000, "urls": {"diff":"\/comments\/48545\/get","add":"\/comments\/48545\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/48545"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }

26 комментариев 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

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Новая игра Ubisoft на релизе выглядит
точно так же, как и на E3
Подписаться на push-уведомления