Log of Alprog
1.19K subscribers
98 photos
91 links
加入频道
Будни геймдева
#пиарчик
Dark Crystal Games — студия нетипичная. Мы и не совсем сопливое инди (шутка ли: больше 20 человек!), но и бесконечно далеки от корпоративной культуры серьёзных компаний. Учитывая жанр и масштаб нашей игры, 20 человек (из которых многие заняты частично или удалённо) — это всё-таки полугаражное производство с нотками романтики и переработок.

Не то, чтобы это была уникальная ситуация, но всё же довольно редкая. Поэтому судить о всей индустрии по моему блогу не следует. Если вы начинающий разработчик из стран РУБКи (Россия, Украина, Беларусь, Казахстан), то скорее всего вы рано или поздно будете заниматься Match-3 или Hidden Object. Я в своей жизни написал не один матч-3. И не на одном языке. Так что если вы хотите подготовиться к реальному геймдеву, то вам следует почитать кого-нибудь из этой области.

Вот, например, бложек с говорящим названием «Будни геймдева» — о том, чем реально живёт и дышит отечественный геймдев сегодня и чем занимается изо дня в день (спойлер: не только матч-3). Это бложек о выстраивании процессов, о продвижении, плейтестах и выставках.

Подписывайтесь: @devmygame
Несколько банальных мыслей про облака и кроссплатформу
#лайт
В интересное время живём, друзья. Не так давно прошло E3 и я, как и многие из вас, смотрел большинство трансляций в прямом эфире. Только вот для меня главным событием конференции были не анонсы игр, а упор на облачные сервисы. XCloud у Microsoft, Орион у Беседки, подписка на игры Ubisoft в Google Stadia. О стриминговых сервисах говорили и раньше, но теперь это становится всеобщим трендом.

Тренды в игровой индустрии бывали всякие: мобилочки, VR, да те же батлрояли, в конце концов. Но всё это были ответвления — иногда успешные, иногда не очень — но всё же просто ответвления, а не полный переход к чему-то новому. А вот стриминг может в перспективе охватить 100% индустрии.

Я знаю, о чём вы сейчас подумали. Огромные лаги, которые невозможно преодолеть физически. Но это решается локальными серверами. Это лишь дело времени. Давайте заглянем прямиком в то время, когда игровой датацентр стоит уже и в вашем регионе. Что это будет означать для индустрии? Несколько вещей. И каждая из них интересна.

Во-первых, нас ждёт подписочная модель вместо покупки конкретных игр. Я очень болею за любые сервисы, которые пытаются составить конкуренцию Steam, потому что он мешает развитию индустрии; и подписочные сервисы могут не только посодействовать этому процессу, но и гарантировать, что победитель не станет новым драконом. Ведь подписка меняет само отношение к играм, разрушает главный механизм психологического рабства у конкретного сервиса — коллекционирование.
Во-вторых, кроссплатформенные (в старом значении слова) движки постепенно утратят актуальность. Незачем уметь запускаться нативно на всех платформах, когда можно написать игру под одну, а на остальные стримить. И не урезанный Ведьмак 3 на Switch, как это сделано сейчас, а самый что ни на есть полноценный. Мне этот пункт особенно важен, так как я долгое время следил за развитием кроссплатформенности графики. До 2007 года всем было по фиг на OpenGL в большом геймдеве. Писали на том, на чём было удобно, так что DirectX был де факто стандартом индустрии. Всякая срань, типа Wii и NDS отличалась технически настолько, что там о какой-то кроссплатформенности из коробки речи обычно не шло. Там было полноценное портирование (то есть переписывание значительных частей кода). Самым заметным исключением был, пожалуй, RenderWare — кроссплатформенный движок, который стал популярным в основном благодаря тому, что на PS2 не было никакого графического API. «Sony DirectX», как его называли. Но на консоли выходило не так уж и много проектов. А вот с появлением мобилок кроссплатформенность стала мейнстримом, с OpenGL начали считаться (и именно поэтому массовый геймдев пришёл заодно и на Linux с OSX). И началась эра трансляции шейдеров и безудержных костылей. Cg сдохло окончательно, а на каждую платформу появлялось своё GAPI со своими шейдерами: HLSL, GLSL, MSL, PSSL — вот это вот всё. Писать кроссплатформенно под всё становилось проблемным. Вендорам было выгодно, чтобы вы завязывались только на их устройства. И вот только-только начало что-то устаканиваться в лице стандартного SPIR-V и тулзов вокруг него, как начали наступать облака, отменяющие в этом необходимость. Даже немного грустно. Но зато не нужно будет идти на компромиссы, а снова писать под то, на чём удобно. Кто по-вашему будет популярнее: DirectX или Vulkan? Можно обсудить в чатике.

Ну и наконец последнее, что хотелось бы закинуть в тему облаков, это то, что они неизбежно повлияют на hardware. Может так случиться, что дома мы будем пользоваться достаточно простой железкой, а все мощные вычисления уйдут на сервера. Это может пугать, но на самом деле это отличная оптимизация в масштабах планеты: процессорные мощности не простаивают у нас дома, а распределяются. Видеопамять не дублируется у каждого игрока, а может хранить ресурсы одной игры, обслуживая при этом нужды нескольких (очевидно, железо нужно будет специфическое для таких вещей). И всё это отлично укладывается в общую мировую тенденцию по уберизации и отказу от личного транспорта. В интересное время живём, друзья.
Про видеотуториалы и выжимки из статей
#реклама
В каком виде вы предпочитаете получать информацию, нужную по работе? Видеотуториалы или классический текст? Если первый вариант, то у меня для вас плохие новости. Ролики — это выбор ленивых. Это и очень долго (даже с ускорением, потому что глазами вперёд текста не пробежаться) и, если понадобится вернуться к кому-то моменту, то потом уже не найдёшь (Ctrl+F в видео не работает).

Кроме того, это ещё и очень легко. Включил себе ролик и на самом деле отдыхаешь. Всякого рода менеджеры любят такой фигнёй заниматься: запустят себе плейлист обучающих лекций, и типа это они работают. А давайте я — программист — так буду делать в рабочее время? :) Нет, я, конечно, смотрю иногда доклады, но в свободное время в качестве хобби и саморазвития. А на работе надо работать, поэтому если оперативно нужна информация, то только текст.

В общем, если не врать самому себе, то потреблять информацию в тексте почти всегда эффективнее (кроме редких случаев, когда нужна наглядность). И было бы круто, если бы существовал канал, который бы делал краткие текстовые перессказы видосов. А вот есть такой! И не только из видео, но и из длинных статей. Подписывайтесь: Product Gamedev.

Жалко только, что статьи лишь на тему продакт менеджмента, аналитики и геймдизайна. Был бы такой канал по программированию, цены бы ему не было. А может уже есть такой? Подскажите в чатике.
Про бег и уравнения
#код
По моим наблюдениям практически единственное, что у людей остаётся в памяти из школьной программы по математике — это как находить дискриминант квадратного уравнения. Забавно, но при разработке игр это как раз надо крайне редко. Я вот, например, без гугла и не скажу, где там минус и из кого. А вот тригонометрию всякую помню наизусть, потому что нужно каждый день. Но иногда всё-таки дискриминант тоже нужен. Сейчас приведу пример. Собственно, весь дальнейший пост будет просто иллюстрацией типичного случая, когда нужно немножко математики (серьёзно, ничего другого не будет).

Вот потребовалось мне сделать, чтобы человек на бегу останавливался синхронно с анимацией. У нас в аниматоре есть параметр скорости движения. Один метр в секунду — лёгкий шаг, два быстрый, три и более — бег. И так настроено, что ноги двигаются аккурат с этой скоростью. Резко этот параметр дёргать нельзя (будет скачок), надо плавненько. Но и когда моделька на месте стоит, долго крутить ползунки тоже нельзя — будет ногами в воздухе болтать. В идеале надо чтобы всегда скорость движения персонажа совпадала с анимацией. То есть для этого надо начать тормозить чуть заранее фактической остановки.

А двигается персонаж у нас по точкам. От точки к точке по прямым линиям. Если точка последняя в маршруте или там очень резкий поворот, то, очевидно, в этом месте персонаж должен полностью остановиться (и развернуться). Если же поворот не сильный, то можно лишь слегка притормозить, а то и вообще пройти поворот на максимальной скорости.

Вот и получается, что в каждый момент времени у нас есть текущая скорость, расстояние до ближайшей поворотной точки и скорость, которая должна быть на финише. Если персонаж разгоняется до максимальной скорости, скажем, за один метр пути, а тормозит за два, и при этом у нас 100 метров до финиша, то вопросов не возникает. Но как быть, если расстояние до следующей маршрутной точки всего метр? Сколько времени мы можем позволить себе разгоняться на этом пятачке, прежде, чем начать тормозить, чтобы остановиться точно в конце? А может у нас уже ненулевая скорость и вообще нет времени сопли жевать и пора экстренно тормозить? Может быть даже резче обычного (если дверь закрылась прямо перед носом). Ну и, конечно же, надо, чтобы всё эта байда от FPS никак не зависела.

Как быть в этой ситуации? Известно как: составлять систему уравнений и решать, как в школе. Сперва я, правда, вычитаю дистанцию, которую персонажу в любом случае надо пройти, чтобы компенсировать разницу между начальной и конечной скоростями. Так что в начале и в конце манёвра мы имеем одинаковую известную скорость v1. А в конце ускорения (и перед началом торможения) неизвестную скорость v2. Ещё нам известна общая длина пути s, а также a1 и a2, то есть ускорения разгона и торможения соответственно, но неизвестны их длительности t1 и t2.

Записываем это в виде формул равноускоренного движения и понеслась. Я имею привычку набрасывать решения в paint.net, так что весь процесс вы можете наблюдать в шапке поста. В конце остаётся посчитать коэффициенты и найти корни квадратного уравнения.

Вот примерно так у нас теперь персонажи ходят. Всё, правда, несколько сложнее, потому что надо ещё погемороиться с поворотами, но это уже другая история.

Обсудить
Две истории моей юности про вирусы
#код
Чатик ожил и пристыдил меня за молчание на канале. Что ж, давайте я вам расскажу две истории про вирусы. В первой я буду выступать злостным создателем вредоносного ПО, а в другой, напротив, окажусь доблестным антихакером (блин, количество баек, которые я могу рассказывать в барчиках стремительно сокращается из-за бложека).

Когда мне было лет 14, я уже два года писал примитивные игры на бейсике, делал карты для Half-Life (иногда даже на заказ), и тому подобные вещи. Словом, файлы моего производства распространялись среди знакомых довольно широко и запускались несмотря на угрозы антивируса без подозрений. А ещё мы тогда играли в StarCraft через HyperTerminal (некоторые подписчики, наверняка, таких слов даже не слышали, но это была такая штука, позволяющая соединяться в локальную сеть через телефонные модемы). Само собой, я тоже захотел сделать сетевую игру. После успешного релиза и плейтеста моих крестиков-ноликов на WinSockets, у меня появился мой первый (и последний) коварный план по написанию вирусов. Идея была поистине хитроумной для моих лет. Я собирался написать клиент шахмат, который бы также позволял лазить по файловой системе другого игрока, пока ты якобы размышляешь над ходами. Му-ха-ха! Оценили масштаб вероломства?

От злодеяния меня тогда остановила только внутренняя тяга к свету и уважение личных границ… Сейчас, глядя на код тех крестиков-ноликов, можно подумать, что меня также остановила техническая неспособность написать что-то столь сложное, как шахматы. Но пару лет спустя, уже в университетские годы, когда я написал сетевые «точки» (родственник игры «го»), я всё-таки встроил в клиента возможность лазить по чужой файловой системе. Встроил, сыграл с жертвой, но не воспользовался. Потому что я кайфанул от самого факта «взлома», а шпионить за людьми всё же нехорошо.

Первая история была для разминки, но вторая будет более захватывающей. Родители никогда не воспринимали всерьёз моё увлечение разработкой игр, поскольку не особенно отличали это занятие от собственно игр, долго отговаривали поступать на программиста, но в какой-то момент всё же смирились и даже в середине первого курса подарили мне личный ноутбук. Даже у старшего брата не было отдельного компа, а у меня был. И я с гордостью таскался с этой почти 5-килограммовой махиной в универ. Опять же, некоторые подписчики могут офигеть, но тогда это был нормальный вес для ноутбука и в них, представьте себе, пихали даже CD-ROM.

Так вот. Родители на тот момент хотя и расщедрились, но всё же не особо видели во мне программиста. Всё изменилось, когда однажды родители подхватили вирус. Стандартное по тем временам дерьмо про то, что комп заблокирован, и вы должны куда-то там перевести деньги. Курсор не реагирует, диспетчер задач не вызывается, безопасный режим не помогает. Переустанавливать винду не хочется.

В определённый момент я запихиваю в привод диск какой-то игрушки и слышу, что играет музыка автоплея, хотя самого окна на экране нет. В это мгновение я понимаю, как вирус работает. Я тогда как раз читал книгу форума VBStreets — сборник различных нетривиальных ухищрений с Visual Basic. Среди всего прочего там был пример по созданию дополнительных рабочих столов в Windows. Если кто не знал, такая возможность программно была встроена даже в XP, просто не была протянута в интерфейс. И вот то, как вёл себя вирус, было чертовски похоже на запуск примеров кода по рабочим столам (если тебя переключили на другой стол, ты никак не можешь повлиять на другие).

Что же делаю я? Я сообщаю родителям, что могу написать антивирус, сажусь за ноутбук, пишу за час-другой программу, которая создаёт новый десктоп и открывает там окно-переключалку между столами; создаю файл autoplay и записываю его на болванку. Затем вставляю свежезапечённый диск в заражённую машину и — о чудо — на экране появляется окошко с кнопкой, возвращающей управление компьютером. После чего уже руками нахожу и убиваю остатки вируса. Стоит ли говорить, как после этого выросло уважение ко мне со стороны родителей?

Обсудить
А ты готов для iOS?
#реклама
Помните я под новый год рассказывал про свой самый страшный баг и хак за всю карьеру? А почему так вышло? Я ведь уже был профессиональным разработчиком. Ещё не мидл, конечно, но какой-то опыт и понимание уже были. А потому что меня закинули в iOS — на абсолютно новую для меня тогда территорию. С++ и Objective-C я тогда не знал от слова совсем, вот и обжёгся.

В наше время, конечно, ситуация поменялась и вам вряд ли сразу потребуется знание крестов, так как на смену им пришёл Swift, но дров по незнанию наломать можно не меньше. С той же многопоточкой, например. Так что если вы уже опытный программист, но iOS для вас тёмная или пока ещё слабо изученная область, то прежде чем нырять туда с головой, было бы неплохо подготовиться.

Например, сходить на базовый курс ios разработчика, где вы научитесь верстать интерфейс, работать с тамошней ORM и многопоточкой, взаимодействовать с API и писать автотесты.
Мешочек годноты.
#лайт
Принёс вам немножко ссылочек на годноту. Прежде всего, пару дней назад мы наконец-то выпустили в ранний доступ Encased — наш амбициозный «русский Fallout». Публика встретила нас хорошо: рейтинг «very positive» на steam и отличный обзор на Rock Paper Shotgun.

В игре сейчас более-менее отполишен (если это слово вообще применимо к раннему доступу) только пролог. Это часа 3, если идти по главному квесту; и часов эдак 12, если исследовать всё вокруг и выполнять все побочки. Дальше мы выпускаем вас в открытый мир, который на данный момент, честно сказать, заселен больше багами, чем контентом. Но, понятное дело, по мере приближения к релизу, в раннем доступе будет открываться всё больше и больше локаций, квестов, предметов и скиллов. И если купите игру сейчас, то сильно поможете доделать её в срок: нанять ещё пару рук нам бы явно не помешало.

Но главный дисклеймер состоит, пожалуй, даже не в том, что игра в раннем доступе, а в том, что она весьма олдсукльна и хардкорна. Будьте готовы читать много текста. Здесь это важно. Также будьте готовы к смерти от первого же моба, если будете пытаться проходить его в лоб плохим билдом персонажа. Игра позволяет пройти почти каждую игровую ситуацию (включая этот бой) различными способами, но абсолютно беспощадна к невнимательным игрокам или принимающим неправильные решения. Вероятно, ближе к релизу появятся упрощенные режимы игры (например, отключающие голод и жажду), но пока это лютый хардкор.

Но для менее хардкорных игроков у меня тоже есть хорошая новость! Мои большие друзья из TortugaTeam на днях зарелизили свой Spaceland. Это тоже пошаговая тактика, но текста тут сильно поменьше, а пощады к игроку — побольше. Я толком ещё не поиграл (уж извините, надо хотфиксить Encased), но следил за разработкой с самых ранних её этапов, ещё до анонса. Если коротко, то Spaceland — это такая облегчённая версия XCom. Точно также, как их предыдущая игра Braveland (где я даже в титрах есть ^_^) была облегчённой версией Kings Bounty. Так что если зашёл Braveland, то Spaceland тем более надо брать.

Ну и последняя годная ссылочка, которую я собирался вам сегодня принести, это канал Евгения Кистерева, наиболее известного по игре Skyhill. Он ворвался в телеграмм-блогинг буквально на днях и начал, собственно, с постов про Encased и Spaceland, чем косвенно пнул меня под зад самому написать о релизах. А то нехорошо получается: в других каналах о нас пишут, а сам я молчу. У Евгения, также как и у меня, есть чатик. Он пока относительно маленький, но учитывая общую известность Кистерёва в индустрии, которая сильно повыше моей, думаю, он скоро будет большим и интересным. Так что залетайте.

Но и про мой чатик не забывайте, ага.
Ловите меня в Минске
#микро
DevGamm наконец-то выложил расписание докладов в Минске. Я выступаю 22 ноября в 12:45. Расскажу про нашу сериализацию. Доклад будет основан на моих постах в этом блоге, но, конечно, будет переработан в более удобоваримый для разговора формат + дополнен новой информацией и пространным вступлением.
Кто собирается ехать, ловитесь. Пообщаемся.

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

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

Но давайте сделаем шаг назад и вернёмся год эдак в 2010-ый. Инди ещё не имеет негативного значения. На дворе самая заря инди-лихорадки, только-только появляются первые звёзды и истории успеха. Инди-разработчик — это старатель, соль земли, человек будущего. Все хотят им быть. В это же время рождается вечный срач об определениях, потому что каждый старается натянуть его под себя, даже если делает клон Match-3 на зарплате. Но при этом старается сузить определение таким образом, чтобы отсечь всех остальных для того, чтобы им себя противопоставлять.

Так, кто-то настаивает, что главное это финансовая независимость, а кто-то — что творческая. Одни говорят про размер команды и бюджет, другие считают обязательным условием жанровую или геймплейную необычность. Радикалы твердят, что тру-инди должно быть бесплатным. Наиболее вменяемые (типа меня), стараются больше не использовать слово инди, так как оно ничего не объясняет.

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

Поэтому слово начинает потихоньку исчезать из разговора двух адекватный людей, как термин, но по-прежнему остаётся в качестве лозунга и для маркетинга. Никто не обижается, если его называют инди. Отношение меняться стало несколько позже. Я начал открещиваться от ярлыка «инди» году в 2016-ом.

У меня это произошло по довольно личным причинам и вероятно не многие согласятся, но конкретно у меня накопилась обида и разочарование на весь класс инди-разработчиков. Эта новая геймдев-интеллигенция, которая должна была нести просвещение и вершить революцию в индустрии, вся измельчала и обеззубела. Вместо резкой критики мейнстрима и прорывных идей, всё скатилось до всратых мобильных ранеров и коллективного подбадривания друг друга. «Видно, что старался. Повесь на холодильник». По моим представлениям современное инди в России как класс представляет собой в массе своей эдакие кружки по интересам для студентов, где они не столько игры делают, сколько друзей ищут. И чай пьют, ага.

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

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

обсудить
В блоге перекати-поле, зато есть вакансии
#лайт
Ох и запустил же я блог. Хотя и событий, вроде, было много: с лета, вот, собираюсь написать #неотчёт о DevGamm Talks в Калининграде; с осени неотчёт о полноценном DevGamm в Минске. Тем более, что я там выступил с докладом, а наша игра взяла номинацию Best PC. Вполне себе темы для поста. Или вот недавно сходил на местный Global Game Jam в качестве жюри. Событие, конечно, не мирового масштаба, но другой бы уже давно заметочку настрочил, а я что-то нет.

Можно было и просто на разные хайповые темы поговорить, на которые мысли разные имеются: про то, как в наше время угнетают движкописателей, про горький опыт собеседований или то, что программистам переплачивают. Или вот с++20 обсудить, в конце концов. Комитет стандартизации прямо сейчас его в Праге обсуждает на минуточку. А я молчу.

Не знаю, будут ли посты на все озвученные темы — не получается у меня как-то быть блогером. Здесь нужен режим, регулярность. А на удалёнке с этим прямо тяжело.

Но не будем о грустном. Я чё забежал-то? Главным образом, чтобы напомнить, что мы вообще-то программистов ищем. К сожалению, ищем только в Санкт-Петербурге, удалёнку нельзя (чтобы не страдали от сбитого режима, как я), но зато есть вакансии на разный опыт, так сказать, хоть для мидла, хоть для лида. Если не сами к нам залетайте, так друзей своих подначивайте. Проект у нас и правда годный, в России такого мало делают. Ну, вы и сами знаете.

обсудить