чем занимается программист пикабу
Чем занимается программист пикабу
Здесь мы пытаемся сделать удобнее жизнь тех, кто ещё помнит или только недавно открыл для себя серию Command and Conquer. Тибериевая вселенная, вселенная Red Alert, вселенная Generals; оригинальные игры или моды на них.
C возвращением, командующий!
Пикабу в мессенджерах
Активные сообщества
Тенденции
Программист
Бесплатно помогаю пикабушникам учить программирование, часть 27: «Мы составили план обучения по Swift»
Пикабушника @lycrois, которая любезно согласилась помогать мне в обучении программированию, составила план обучения по Swift.
Также мы завели группу в Telegram, где оперативно отвечаем на часто возникающие вопросы: https://t.me/+uKgZmAzvhpRjZjNi
Все это было и будет бесплатно. Добро пожаловать всем желающим =)
Генератор VPN Trial-аккаунтов (полезный сайт)
└ Источник: FREEHUB (заслужили твоей подписки?)
Нашел полезный сайт, который генерирует пробные аккаунты: ZenMate VPN, AdGuard VPN и Ivacy VPN » то есть вам не нужно тратить свое время, просто выбираем на сайте желаемый пробный аккаунт и получаем логин/пароль, после входим в аккаунт и пользуемся, как по мне очень удобный сайт для тех у кого нет оплаченных VPN, но циклично нужно скрывать IP или заходить на сайты недоступные в вашем регионе.
🤷🏻♂️ ЧТО НУЖНО ДЕЛАТЬ:
└ Выбираем желаемый VPN
2. Кликаем на выбранный VPN.
└ Получаем пробный аккаунт
Все скидки и промокоды в одном месте
Вы там как, готовы к осенним распродажам? Чтобы не пропустить самые интересные и выгодные предложения, подпишитесь на полезный телеграм-канал Пикабу со скидками. Да, Пикабу не только для отдыха и мемов, но и для экономных покупок!
В «Пикабу Скидки» вы найдете актуальные предложения:
• доставки еды (KFC, Delivery Club, «Папа Джонс»);
• книги («Читай-город», «Литрес», Storytel);
• услуги и сервисы («Делимобиль», Boxberry, «Достависта»);
• маркетплейсы и гипермаркеты (Ozon, «Ашан», «Яндекс.Маркет»);
• одежда и обувь (Adidas, ASOS, Tom Tailor)
• бытовая техника и электроника («М.Видео», «Связной», re:Store);
• товары для дома (IKEA, «Леруа Мерлен», Askona);
• косметика и парфюмерия («Л’Этуаль», «Иль де Ботэ», Krasotka Pro);
• товары для детей («Детский мир», TOY, Mothercare);
• образование («Нетология», GeekBrains, SkillFactory);
• и еще куча-куча всего.
Чем отличается сисадмин от программиста?
Программеры курят быстро, потому что мысль. Потому что она уйдёт и придётся думать её снова. У админов мыслей нет, поэтому они курят медленно. Они делают это в те моменты, когда всё работает и ничего не падает. Поэтому они курят редко.
Программеры уходят с работы ночью. Потому что мысль. Некоторые из них уходят вечером и думают мысль дома. Некоторые, у которых есть ноутбук, думают её в метро. Админы домой не ходят. Потому что если они пойдут домой, что-нибудь упадёт. И придётся идти на работу. А на работу они ходить не любят. И не ходят. Они там живут. У них обычно есть отдельное гнездо за отдельной дверью, часто запираемой на отдельный замок.
Как называть женщину-программиста?
Слушайте, со всей этой модой на феминативы, мне тут пришло в голову отличное название для женщин-программистов.
Она должна, конечно, носить черные костюмы, и выглядеть как Тринити из Матрицы.
В комментариях можете накидать свои варианты того, как она может выглядеть.
АСУТП программист
Часто когда говорят о выборе IT в качестве профессии обходят стороной АСУТП, вроде как не программирование вовсе, а еще многие глумятся над нашими языками программирования. Я 5 лет отработал АСУТПшником, и теперь я хочу немного рассказать о его специфике.
Все что крутится на ПЛК является самым ответственным и называется средним уровнем. Он работает годами без остановки, внезапно заглючить они не имеют права и на всякий случай их ставят сразу два, если с одним что-нибудь случится, второй включится в работу автоматом. Все что видит оператор это SCADA система, проще говоря «отображалка», она крутится на компьютере, их тоже на всякий случай два и больше, они, как и свойственно всему что работает на винде, могут виснуть глючить, вылетать и в конце концов совсем сдохнуть, но рабочий процесс повлиять не должно т.к. все крутится на ПЛК.
Для программирования ПЛК существуют несколько языков (недоязыков) программирования которые объединяет стандарт МЭК 61131-3.
Вот например так выглядит FBD
Но это все дичь на которой уже особо не работают, либо применяют очень локально. В основном же используется ST, который очень похож на паскаль:
FOR Iter := 1 TO Array_Sz DO
fnd_max := MAX(fnd_max, arr[Iter]);
Еще возможно вставки на языке Си.
Что касается верхнего уровня, то тут зоопарк языков намного шире. В зависимости от того с какой SCADA системой вам придется иметь дело тут и VBA ( в основном), C, Python, SQL, а еще может быть какой-нибудь свой скриптовый язык. Также не забываем про всякие вспомогательные утилиты, а их можно писать на чем душа пожелает, хоть плюсы, хоть питон.
Когда я устраивался на работу мне сразу сообщили что 100 дней в году я буду проводить в командировках. По факту к счастью получалось меньше. Это сильно зависит от самого программиста. Я как хронический домосед и интроверт был не в восторге от перспективы поездок но ситуация была такова что выбирать не приходилось. Самое главное это куда, на какие объекты. Может быть нефтедобыча или за полярным кругом. Сами смотрите хотите ли вы туда. Я обычно гонял южнее полярного круга, но с запада на восток почти всю страну объездил. Любой проект который делает программист отвезут на «объект» и там придется его еще запускать, и там по любому понадобится присутствие программиста, может он просто будет смотреть если до этого все сделали чётко, а может в мыле будет допиливать весь код на месте. Все зависит от заказчика. Места у меня были разные, бывало жил в городе в хорошей гостинице, а бывало что в тайге прямо на станции.
у меня было >100к среднегодовая, и это не Москва даже близко. Откройте хх, там и 200к есть. Обычно пишут зарплату «от» но верхней планки нету. Меня взяли на работу совсем без опыта, и без соответствующего образования, специфика работы такая что ты не можешь загуглить, нету ответов в гугле, надо читать документацию, документацию на оборудование вы может найдете а вот регламенты заказчика? это вообще с грифом ДСП. надо изучать много специфичных и очень непопулярных вещей. Чем больше больше узнаете, тем больше ваша ценность. Если вы потом сможете затащить проект, сумма контракта которого исчисляется сотнями млн руб. то ваша зарплатная планка улетит в небеса а вас как спеца будут боготворить. Были у меня и такие примеры.
Как правило новички сливаются быстро, низкая зп на старте и частые командировки быстро их деморализуют но те кто перетерпел и удержался становятся ценными спецами. Не надо бояться ответственности, бывают ситуации когда ты один на один с проблемой, нет не то что гугла даже просто сотовой связи. Зато получаешь подписанный акт выполненных работ, адреналин, уважение заказчика и очередную охуительную историю в копилку для рассказа в офисе. А может наоборот заказчик позвонит директору со словами «больше этого мудака к нам не отправляйте». Тогда могут и выпизднуть. В любом случае
АСУТП это наверное как отслужить в армии для программистов. По началу было напряжно но потом как то привыкаешь, и с ухмылкой смотришь на «молодняк» с мыслью «щас вас на ПНР(пуско-наладочные работы) на месяцок и посмотрим на вас». я почувствовал растущий мох, стало уютно на этом месте, а это значит мое развитие остановилось. Кто знает может когда нибудь мне надоест постоянная гонка технологий и я вернусь в эту профессию.
Чем занимается программист пикабу
Пикабушника @lycrois, которая любезно согласилась помогать мне в обучении программированию, составила план обучения по Swift.
Также мы завели группу в Telegram, где оперативно отвечаем на часто возникающие вопросы: https://t.me/+uKgZmAzvhpRjZjNi
Все это было и будет бесплатно. Добро пожаловать всем желающим =)
Чем отличается сисадмин от программиста?
Программеры курят быстро, потому что мысль. Потому что она уйдёт и придётся думать её снова. У админов мыслей нет, поэтому они курят медленно. Они делают это в те моменты, когда всё работает и ничего не падает. Поэтому они курят редко.
Программеры уходят с работы ночью. Потому что мысль. Некоторые из них уходят вечером и думают мысль дома. Некоторые, у которых есть ноутбук, думают её в метро. Админы домой не ходят. Потому что если они пойдут домой, что-нибудь упадёт. И придётся идти на работу. А на работу они ходить не любят. И не ходят. Они там живут. У них обычно есть отдельное гнездо за отдельной дверью, часто запираемой на отдельный замок.
АСУТП программист
Часто когда говорят о выборе IT в качестве профессии обходят стороной АСУТП, вроде как не программирование вовсе, а еще многие глумятся над нашими языками программирования. Я 5 лет отработал АСУТПшником, и теперь я хочу немного рассказать о его специфике.
Все что крутится на ПЛК является самым ответственным и называется средним уровнем. Он работает годами без остановки, внезапно заглючить они не имеют права и на всякий случай их ставят сразу два, если с одним что-нибудь случится, второй включится в работу автоматом. Все что видит оператор это SCADA система, проще говоря «отображалка», она крутится на компьютере, их тоже на всякий случай два и больше, они, как и свойственно всему что работает на винде, могут виснуть глючить, вылетать и в конце концов совсем сдохнуть, но рабочий процесс повлиять не должно т.к. все крутится на ПЛК.
Для программирования ПЛК существуют несколько языков (недоязыков) программирования которые объединяет стандарт МЭК 61131-3.
Вот например так выглядит FBD
Но это все дичь на которой уже особо не работают, либо применяют очень локально. В основном же используется ST, который очень похож на паскаль:
FOR Iter := 1 TO Array_Sz DO
fnd_max := MAX(fnd_max, arr[Iter]);
Еще возможно вставки на языке Си.
Что касается верхнего уровня, то тут зоопарк языков намного шире. В зависимости от того с какой SCADA системой вам придется иметь дело тут и VBA ( в основном), C, Python, SQL, а еще может быть какой-нибудь свой скриптовый язык. Также не забываем про всякие вспомогательные утилиты, а их можно писать на чем душа пожелает, хоть плюсы, хоть питон.
Когда я устраивался на работу мне сразу сообщили что 100 дней в году я буду проводить в командировках. По факту к счастью получалось меньше. Это сильно зависит от самого программиста. Я как хронический домосед и интроверт был не в восторге от перспективы поездок но ситуация была такова что выбирать не приходилось. Самое главное это куда, на какие объекты. Может быть нефтедобыча или за полярным кругом. Сами смотрите хотите ли вы туда. Я обычно гонял южнее полярного круга, но с запада на восток почти всю страну объездил. Любой проект который делает программист отвезут на «объект» и там придется его еще запускать, и там по любому понадобится присутствие программиста, может он просто будет смотреть если до этого все сделали чётко, а может в мыле будет допиливать весь код на месте. Все зависит от заказчика. Места у меня были разные, бывало жил в городе в хорошей гостинице, а бывало что в тайге прямо на станции.
у меня было >100к среднегодовая, и это не Москва даже близко. Откройте хх, там и 200к есть. Обычно пишут зарплату «от» но верхней планки нету. Меня взяли на работу совсем без опыта, и без соответствующего образования, специфика работы такая что ты не можешь загуглить, нету ответов в гугле, надо читать документацию, документацию на оборудование вы может найдете а вот регламенты заказчика? это вообще с грифом ДСП. надо изучать много специфичных и очень непопулярных вещей. Чем больше больше узнаете, тем больше ваша ценность. Если вы потом сможете затащить проект, сумма контракта которого исчисляется сотнями млн руб. то ваша зарплатная планка улетит в небеса а вас как спеца будут боготворить. Были у меня и такие примеры.
Как правило новички сливаются быстро, низкая зп на старте и частые командировки быстро их деморализуют но те кто перетерпел и удержался становятся ценными спецами. Не надо бояться ответственности, бывают ситуации когда ты один на один с проблемой, нет не то что гугла даже просто сотовой связи. Зато получаешь подписанный акт выполненных работ, адреналин, уважение заказчика и очередную охуительную историю в копилку для рассказа в офисе. А может наоборот заказчик позвонит директору со словами «больше этого мудака к нам не отправляйте». Тогда могут и выпизднуть. В любом случае
АСУТП это наверное как отслужить в армии для программистов. По началу было напряжно но потом как то привыкаешь, и с ухмылкой смотришь на «молодняк» с мыслью «щас вас на ПНР(пуско-наладочные работы) на месяцок и посмотрим на вас». я почувствовал растущий мох, стало уютно на этом месте, а это значит мое развитие остановилось. Кто знает может когда нибудь мне надоест постоянная гонка технологий и я вернусь в эту профессию.
Как я стал программистом
Читал пост на пикабу, где человек рассказывал как попал в Data Science. История заключалась в том, что он много часов в день отдавал на учёбу, очень старался и в итоге всё выучил и попал на работу в IT компанию. У меня ситуация совсем другая. Я никогда не был таким пробивным и волевым человеком, сидеть за учёбой по 6+ часов, чтобы всё эффективно понимать и запоминать у меня не получалось, но тем не менее всё получилось и я хочу рассказать, что всё в ваших руках, главное найти правильный подход.
Как всё начиналось.
Я школе и вообще большую часть своей жизни никогда не интересовался программированием, из компьютерных интересов у меня были только игры. После школы я поступил в техникум, формально его закончил, отслужил в армии и устроился на работу и близко не связанной с программированием. После трёх лет работы меня всё очень достало и я начал задумываться о смене профессии. Тогда я тоже особо не думал, чем буду заниматься, поэтому просто подал документы в ВУЗ на программиста. Про образование в вузе это отдельная история, оно никакое)
Но там меня очень замотивировали, мол учись и всё будет хорошо.
Для себя я изучил рынок, посмотрел более менее универсальный языки и средние зарплаты и выбрал C#.
Язык выбрали, идём дальше.
Потом я решил пойти на курсы. Курс направлен на разработку более-менее умных сайтов, с базой данных и т.д. За курс я отдал примерно 800$ и хочу сказать, что всё это я мог сделать дома бесплатно.
После курсов.
Как стать программистом (мой опыт)
Для ЛЛ:
1. Захотеть;
2. Некоторое время учиться;
3. Некоторое время искать работу;
4. Трудоустроиться;
5. Запилить пост на пикабу.
Спасибо за внимание.
Дальше будет очень много букв и парочка картинок из интернета: всё то же самое, что в 7 строках сверху, только намного подробнее и на моём личном примере. Если интересно, приятного чтения.
Если честно, то я несколько раз пытался «ворваться в программирование» путём «а не прочитать ли мне книжку-учебник». Этот путь у меня несколько раз оказывался провальным, поскольку я осиливал не более трети книги, а потом переставал её понимать и бросал эту затею. Но это были больше шалости, нежели что-то серьёзное.
Курс представлял из себя:
— видео-уроки, которые открывались каждую неделю;
— методические материалы на (в среднем) полтора десятка листов А4;
— домашнее задание по программированию, которое проверяет робот, когда ты ему через платформу передаёшь исходный код своей программы.
Увы, Яндекс и МФТИ к тому моменту ещё не успели оформить следующий курс на coursera, и мне предстояло искать что-то иное.
Решил попросить совета у друга (профессиональный программист с IT образованием), где бы поучиться С++ более серьёзно. Читать учебники, как показывал мой опыт, оказалось не совсем то, что мне нужно было. Ответ друга был примерно следующий: «Ну, на плюсах особо сейчас никто не пишет, кроме железячников и тех, кому нужна высокая производительность» (отчасти это так, да простят меня более знающие товарищи). В общем, посоветовал несколько популярных языков, мол, «на выбор».
Не придя ни к какому решению, я решил пойти другим путём и ринулся на hh.ru. Там отфильтровал вакансии по языку программирования и. ничего. Одна херня: «программисты все важны, программисты все нужны». Одно меня устроило: стоимость специалистов практически не отличалась друг от друга. Из этого всего я сделал вывод, что вполне можно доверить принятие решения Великому Рандому и не париться.
Начало курсов прошло «как по маслу»: было довольно просто (особенно после сложного курса на coursera). А затем всё курсы становились сложнее, и опять начались проблемы со временем.
В этот период я нередко засиживался до 2-3 часов ночи, чтобы доделать домашнее задание. Не скажу, что мне не доставляло удовольствие сидеть и писать код, но после 2-3 курсов я просто выдохся. Я закончил очередной курс и просто не смог начать следующий.
Прошло около полугода, прежде чем ко мне пришли две жабы (моя собственная и супруги). Они втроём вместе с самой супругой убедили меня продолжить обучение. Я нашёл в себе силы освежить в голове пройденный материал, прочесть книжку «Архитектура компьютеров» (читал запоем) и взяться за новые курсы (из уже оплаченных). Дело вновь стронулось с мёртвой точки, я с удвоенными силами и энтузиазмом принялся «грызть гранит науки». Хватило меня ещё на пару месяцев, а потом.
На скорую руку я оформил резюме по типу «я маленький, но гордый птыц, я умею тыц-тыц-тыц; пусть подтверждённого опыта немного, но я могу много чего иного«. Затем стал потихоньку раскидывать резюме всем тем, под чьи требования я хоть сколько-нибудь подходил. Я старался не кидать резюме на те вакансии, где моей компетентности не хватало. Игнорировал я только опыт работы: вместе «без опыта» я включал в свою рассылку и интервал «1-3 года», а иногда и больше.
Затем последовала нескончаемая череда отказов без собеседований. Мне пришлось пересмотреть свои зарплатные ожидания на 10% ниже от первоначального, а также очень внимательно переписать текст в резюме. Сохранив общую идею о том, что я меняю профессию и поэтому боевого опыта в программировании у меня нет, я изложил текст резюме более строго, что ли? Это помогло, собеседования стали появляться. по 1-2 в неделю.
На конец мая у меня набралась небольшая коллекция отказов на собеседованиях. Лучшее из них «Вы нам не подходите потом, что»:
— «У вас слишком высокие амбиции. Вы через год заходите повышения с %оченьмалоденегдлямосквы% на %чутьбольшеденег%. А вот Володя уже 10 лет здесь работает и не жалуется» (я был несказанно рад за Володю);
— «У вас нет опыта работы» (да-ладно?! это была первая строчка в моём резюме);
и гран-при:
— «Всё хорошо. Мы вам будем платить %вмакдакеплатятбольше% первые 3 месяца, пока вы учитесь; затем будем платить %вмакдакеплатятвсёещёбольше% ещё 6 месяцев, а уже когда Вы начнёте приносить прибыль фирме %вмакдакестольконеплатятнокэтомумоментувысдохните%».
Если честно, то тут немного преувеличение. Мне попадались, в основном только адекватные люди и фразы были более любезными. Просто мы не приходили к общему мнению на собеседованиях. Это нормально. За исключением одних, о которых ниже.
Как известно, в при трудоустройстве в IT сфере очень часто либо до, либо после собеседования нужно выполнить тестовое задание для подтверждения знаний в области профессиональной деятельности.
С тестовыми заданиями вышло всё очень хорошо. Я не отказывался писать тестовые задания ни в одной конторе, которая предлагала мне его пройти. За несколько месяцев у меня набралось несколько программ в репозиториях (места для обмена программами), которые, по факту, стали моим каким-никаким «портфолио». Очень удачно получилось.
С другой стороны, когда я стал искать работу и выполнять тестовые задания, пришлось подзабить на учёбу в очередной раз (на основную работу-то не забьёшь).
Ребята (хорошо известная на пикабу фирма, но не совсем любимая) вышли на меня сами. Девочка-hr отправила вакансию и даже позвонила. Пригласили на собеседование, которое прошло очень хорошо. Довольно быстро дали положительный ответ и выслали приглашение. По зарплате тоже пообещали даже чуть выше моих ожиданий. Всё настолько хорошо, что я невольно ожидаю какой-то подвох. Но, потом, моя основная цель сейчас «зацепиться за профессию» и набраться боевого подтверждённого опыта в области программирования, желательно при этом, чтобы было какие деньги в семью принести, а там уже видно будет. Не время сейчас привередничать, когда «работа сама тебя нашла».
Собственно, как говорил в начале, чтобы стать программистом нужно: захотеть, немного поучиться, немного поискать работу и трудоустроиться на неё.
Всё очень просто. ведь так?
Ожидания vs реальность. Чем на самом деле занимаются геймдизайнеры, программисты, проджект-менеджеры, художники и продюсеры
Продолжаем разговор по списку тем:
4) Ожидания vs реальность. Чем на самом деле занимаются геймдизайнеры, программисты, проджект менеджеры, художники и продюсеры.
5) Как стать продюсером.
1) Чем занимаются геймдизайнеры.
Чем может быть занят геймдизайнер:
— Составление ТЗ (технического задания) на какую-то новую запланированную фичу в игре. Требуется подробно и понятно расписать, как будет работать фича, рассмотреть все неочевидные нюансы работы фичи, чтобы у программистов осталось минимальное пространство для неверных толкований.
— Расчет, анализ и перерасчет баланса игры.
— Анализ проектов конкурентов.
— Анализ внутренних проектов, составление предложений по улучшению их показателей.
2) Чем занимаются художники
Создают яркие образы для миллионов игроков. Несут прекрасное в массы. В работе художника много творчества и самовыражения.
Вам достаточно часто будут говорить, что результат вашей работы не подходит по каким-то критериям или стилистике, будет много правок и переделок, вашу задачу могут передать другому исполнителю, который справится быстрее и лучше. Многие художники воспринимают близко к сердцу критику своей работы. В результате все вокруг учатся говорить с художниками помягче, а те стараются отрастить кожу потолще, чтобы спокойнее реагировать на такие моменты.
Значительную часть работы будут составлять вещи, которые вы не умеете рисовать/не рисовали раньше/не хотите рисовать.
3) Чем занимаются программисты.
Проектировать и строить игровую реальность в окружении профессионалов. Строить изящные и продуманные структуры.
Часть времени всегда будет неизбежно тратиться на фикс багов.
Если у компании есть активные выпущенные проекты:
— неизбежно и регулярно возникают ситуации, когда на релизнутой версии игры что-то где-то отвалилось и надо починить срочно и прямо сейчас.
— на носу объявленное игрокам обновление, а какой-то функционал еще не готов или тестировщики нашли баг за 2 часа до релиза.
В таких условиях написать оптимальный и изящный код не всегда возможно. Да и менеджеры, если сроки критично поджимают, могут выбрать более корявый вариант реализации, который будет готов к сроку, чем тот, который правильнее структурно, но не уложится в дедлайн.
4) Чем занимаются проджект-менеджеры (ПМ).
— следит за рабочим временем сотрудников, кто сколько тратит времени на задачи.
— помогает организовать взаимодействие разных отделов (геймдизайнеры, художники, программисты).
— участвует в процессе найма и увольнении членов команды.
Хотя такие рабочие функции уже частично пересекаются с продюсерской деятельностью, но это не редкость. Бывает, что в отдельных компаниях ПМ частично выполняет продюсерские функции, продюсер частично выполняет функции ПМ или продюсер и ПМ совмещены в одном сотруднике.
5) Чем занимаются продюсеры.
Командуют всеми, делают из игры то, что им хочется.
— На продюсере лежит решение спорных моментов, блокирующих или замедляющих разработку, когда команда сталкивается с какими-то неочевидными нюансами или вопросами, на которые исполнители затрудняются найти ответ.
— Продюсер несет ответственность за качество продукта и сроки его разработки. Продюсер отчитывается перед директорами и инвесторами о том, почему были приняты те или иные решения, почему срываются сроки, почему показатели проекта не дотягивают до запланированных, какие меры принимаются для устранения проблем.
— Также продюсер следит за атмосферой в команде и решает конфликтные ситуации, балансируя между потребностями сотрудников и благополучием проекта.
Лига Разработчиков Видеоигр
4.5K постов 19.1K подписчиков
Правила сообщества
— Уважайте чужой труд и используйте конструктивную критику
— Не занимайтесь саморекламой, пишите качественные и интересные посты
— Не употребляйте мат без необходимости
— Посты о Вашей игре с историей её разработки и описанием полученного опыта
— Обучающие материалы, туториалы
— Интервью с опытными разработчиками
— Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
— Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
— Только гифки/арты/скриншоты из игры. Такие материалы могут сопровождать рассказ об игре или обучающий туториал, но не должны являться основой поста
— Посты, содержащие только идею игры
— Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
— Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
— Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
— Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
— Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
— Cсылка размещается в формате: «Страница игры в Steam: URL»
Если сократить до одного предложения, то: «реальность в том, что помимо креатива надо ещё и работать».
Как же мне всё это знакомо! А особенно про дизайн и программирование!
А можно я тоже поучаствую в вашей дискуссии?
Я бы не идеализировал инди. Был цикл статей на DFT(начало вот: https://dtf.ru/gamedev/10975-sem-let-puti-v-geymdeve-chast-p. ) про эту тему: всё не так однозначно и там свои заморочки.
А вообще я что хотел спросить: 1) рынок видеоигр цикличен(то есть спад спроса по нише неизбежно заканчивается ростом и так до следующего спада) или как-то по другому устроен? 2) феномен польского геймдева: как блин так получилось что поляки смогли в крупный проект, и даже не разорились? Откуда у них деньги и кадры на всё это?
Левел и гейм дизайн всё таки разные вещи. Скорее из за недостатка на рынке левел дизайнеров их роль часто выполняют гейм дизайнеры, левел артисты или даже моделеры. Сейчас глубоко изучаю тему по проектированию игрового пространства и эти знания сильно отличаются от тех, которые которыми обладает геймдизайнер
пили последнюю часть уже
В то время как за бугром все специальности унифицированы, у нас в РФ два спеца одной специальности, но в разных компаниях могут иметь совершенно различные задачи.
P.S. Если описание задач геймдизайнера правдиво, то я безумно рад, что мой карьерный путь выглядит совершенно иначе.
Хотя если почитать описание задач, то все равно что-то не складывается: если где пишет из на отдельные фичи и всякие доп.штуки, то кто пишет основу?
Не вижу ни слова про QA 😀
Интересно, а как в вашей компании распределяются премии и зарплаты после релиза?
но при этом геймдизайнер должен быть способен выдавать нужный контент даже, когда у него нет творческого настроения или вдохновения.
А вдруг выходит игра вроде Disco Elysium, которая буквально взрывает комьюнити, для многих становится игрой года, а кое-кто и вовсе говорит что это лучшая рпг из когда-либо созданных. А всё почему? Люди вынашивали оригинальную идею и подход, вдохновлялись настолками, создавали поистине уникальный мир и механики. Что-то, что им бы просто не дали делать в «команде профи» потому что «тестовой группе не понравилось, продюсер видит иначе, нет микротранзакций, целевая аудитория слишком нишевая», и так далее, и тому подобное. Ну а ещё они не платят всяким менеджерам и прочим, пуская бюджет только на разработку игры, поэтому он у них не раздут, и всё не только гарантированно окупается, а и приносит огромную прибыль.
Как я делал систему оптического трекинга
Дело было в далеком 2015 году. В продаже только появились очки виртуальной реальности Oculus DK2, рынок VR игр быстро набирал популярность.
Возможности игрока в таких играх были невелики. Отслеживалось всего 6 степеней свободы движений головы — вращение (инерциалкой в очках) и перемещение в маленьком объеме в зоне видимости инфракрасной камеры, закрепленной на мониторе. Процесс игры представлял собой сидение на стуле с геймпадом в руках, вращение головой в разные стороны и борьбу с тошнотой.
Звучало не очень круто, но я увидел в этом возможность сделать что-то интересное, используя свой опыт в разработке электроники и жажду новых проектов. Как можно было эту систему улучшить?
Конечно, избавиться от геймпада, от проводов, дать возможность игроку свободно перемещаться в пространстве, видеть свои руки и ноги, взаимодействовать с окружением, другими игроками и реальными интерактивными предметами.
1) Берем несколько игроков, надеваем на них VR очки, ноутбук и датчики на руки, ноги и туловище.
2) Берем помещение, состоящее из нескольких комнат, коридоров, дверей, оборудуем его системой трекинга, вешаем датчики и магнитные замки на двери, добавляем несколько интерактивных предметов и создаем игру, в которой геометрия виртуальной локации точно повторяет геометрию реального помещения.
3) Создаем игру. Игра представляет собой многопользовательский квест, в котором несколько игроков надевают на себя оборудование и оказываются в виртуальном мире. В нем они видят себя, видят друг друга, могут ходить по локации, открывать двери и совместно решать игровые задачи.
Эту идею я рассказал своему товарищу, который неожиданно воспринял ее с большим энтузиазмом и предложил взять на себя организационные вопросы. Так мы решили мутить стартап.
Для реализации заявленного функционала, нужно было создать две основные технологии:
1) Костюм, состоящий из датчиков на руках, ногах и торсе, отслеживающий положения частей тела игрока
2) Система трекинга, отслеживающая игроков и интерактивные объекты в 3D пространстве.
Про разработку второй технологии и пойдет речь в этой статье. Может быть, позже напишу и про первую.
Бюджета на все это, конечно, у нас не было, поэтому нужно было сделать все из подручных материалов. Для задачи отслеживания игроков в пространстве я решил использовать оптические камеры и светодиодные маркеры, закрепленные на VR очках. Опыта подобных разработок у меня не было, но я уже что-то слышал про OpenCV, Python, и подумал, что справлюсь.
По задумке, если система знает где расположена камера и как она ориентирована, то по положению изображения маркера на кадре можно определить прямую в 3D пространстве, на которой этот маркер находится. Пересечение двух таких прямых дает итоговое положение маркера.
Соответственно, камеры нужно было закрепить на потолке так, чтобы каждая точка пространства просматривалась минимум двумя камерами (лучше больше, чтобы избежать перекрытия обзора телами игроков). Для покрытия трекингом предполагаемого помещения площадью около 100 кв.м., требовалось около 60 камер. Я выбрал первые попавшиеся дешевые на тот момент usb вебки.
Эти вебки нужно к чему-то подключать. Эксперименты показали, что при использовании usb удлинителей (по крайней мере, дешевых), камеры начинали глючить. Поэтому решил разделить вебки на группы по 8 штук и втыкать их в системники, закрепленные на потолке. На моем домашнем компе как раз было 10 usb портов, так что пришло время начинать разработку тестового стенда.
Архитектуру я придумал следующую:
На каждые очки вешается акриловый матовый шарик от гирлянды с вклеенным внутрь RGB светодиодом. Одновременно в игре предполагалось несколько игроков, так что для идентификации решил разделять их по цвету – R, G, B, RG, RB, GB, RB. Вот так это выглядело:
Первая задача, которую нужно выполнить – написать программу поиска шарика на кадре.
Поиск шарика на кадре
Мне нужно было в каждом кадре, пришедшем с камеры, искать координаты центра шарика и его цвет для идентификации. Звучит несложно. Качаю OpenCV под Python, втыкаю камеру в usb, пишу скрипт. Для минимизации влияния лишних объектов на кадре, выставляю экспозицию и выдержку на камере в самый минимум, а яркость светодиода делаю высокой, чтобы получить яркие пятна на темном фоне. В первой версии алгоритм был следующий:
1) Переводим изображение в градации серого
2) Бинаризуем по порогу (если яркость пикселя больше порога, он становится белым, иначе – черным). При этом размытое пятно от шарика превращается в кластер белых пикселей на черном фоне
3) Находим контуры кластеров и их центры. Это и есть координаты шарика на кадре
4) Определяем усредненный цвет пикселей кластера (на исходном цветном изображении) в окрестности его центра для идентификации
Вроде, работает, но есть нюансы.
Во-первых, на дешевой камере матрица довольно шумная, что приводит к постоянным флуктуациям контуров бинаризованных кластеров и соответственно к дерганью центра. Нельзя, чтобы у игроков дергалась картинка в VR очках, поэтому нужно было эту проблему решать. Попытки применять другие виды адаптивной бинаризации с разными параметрами не давали большого эффекта.
Во-вторых, разрешение камеры всего лишь 640*480, поэтому на некотором расстоянии (не очень большом) шарик виден как пара пикселей на кадре и алгоритм поиска контуров перестает нормально работать.
Пришлось придумывать новый алгоритм. В голову пришла следующая идея:
1) Переводим изображение в градации серого
2) Размываем картинку мощным Gaussian blur –ом так, чтобы изображения светодиодов превратились в размытые пятна с градиентом яркости от центра к периферии
3) Находим самые яркие пиксели на изображении, они должны соответствовать центрам пятен
4) Так же определяем средний цвет кластера в окрестности центра
Так работает гораздо лучше, координаты центра при неподвижном шарике неподвижны, и работает даже при большом расстоянии от камеры.
Чтобы убедиться, что все это будет работать с 8-ю камерами на одном компе, нужно провести нагрузочный тест.
Подключаю 8 камер к своему десктопу, располагаю их так, чтобы каждая видела светящиеся точки и запускаю скрипт, где описанный алгоритм работает в 8-ми независимых процессах (спасибо питонской либе «multiprocessing») и обрабатывает все потоки сразу.
И… сразу натыкаюсь на фейл. Изображения с камер то появляются, то исчезают, framerate скачет от 0 до 100, кошмар. Расследование показало, что часть usb портов на моем компе подключены к одной шине через внутренний хаб, из-за чего скорость шины делится между несколькими портами и ее уже не хватает на битрейт камер. Втыкание камер в разные порты компа в разных комбинациях показало, что у меня всего 4 независимых usb шины. Пришлось найти материнку с 8-ю шинами, что было довольно непростым квестом.
Продолжаю нагрузочный тест. На этот раз все камеры подключились и выдают нормальные потоки, но сразу сталкиваюсь со следующей проблемой – низкий fps. Процессор загружен на 100% и успевает обрабатывать лишь 8-10 кадров в секунду с каждой из восьми вебок.
Похоже, нужно оптимизировать код. Узким местом оказалось Гауссово размытие (оно и не удивительно, ведь нужно на каждый пиксель кадра производить свертку с матрицей 9*9). Уменьшение ядра не спасало ситуацию. Пришлось искать другой метод нахождения центров пятен на кадрах.
Решение удалось найти внезапно во встроенной в OpenCV функции SimpleBlobDetector. Она делает прямо то, что мне нужно и очень быстро. Преимущество достигается благодаря последовательной бинаризации изображения с разными порогами и поиску контуров. Результат – максимальные 30 fps при загрузке процессора меньше 40%. Нагрузочный тест пройден!
Классификация по цвету
Следующая задача – классификация маркера по его цвету. Усредненное значение цвета по пикселям пятна дает RGB компоненты, которые очень нестабильны и сильно меняются в зависимости от расстояния до камеры и яркости светодиода. Но есть отличное решение: перевод из RGB пространства с HSV (hue, saturation, value). В таком представлении пиксель вместо «красный», «синий», «зеленый», раскладывается на компоненты «тон», «насыщенность», «яркость». В этом случае насыщенность и яркость можно просто исключить и классифицировать только по тону.
И так, на данный момент я научился находить и идентифицировать маркеры на кадрах с большого количества камер. Теперь можно перейти к следующему этапу – трекингу в пространстве.
Я использовал pinhole модель камеры, в которой все лучи падают на матрицу через точку, находящуюся на фокусном расстоянии от матрицы.
По этой модели будет происходить преобразование двухмерных координат точки на кадре в трехмерные уравнения прямой в пространстве.
Для отслеживания 3D координат маркера нужно получить минимум две скрещивающиеся прямые в пространстве от разных камер и найти точку их пересечения. Увидеть маркер двумя камерами не сложно, но для построения этих прямых нужно, чтобы система знала все о подключенных камерах: где они висят, под какими углами, фокусное расстояние каждого объектива. Проблема в том, что все это неизвестно. Для вычисления параметров требуется некая процедура калибровки.
В первом варианте решил сделать калибровку трекинга максимально примитивной.
1) Вешаю первый блок из восьми камер на потолок, подключаю их к системнику, висящему там же, направляю камеры так, чтобы ими покрывался максимальный игровой объем.
2) С помощью лазерного нивелира и дальномера измеряю XYZ координаты всех камер в единой системе координат
3) Для вычисления ориентаций и фокусных расстояний камер, измеряю координаты специальных стикеров. Стикеры вешаю следующим образом:
В интерфейсе отображения картинки с камеры рисую две точки. Одну в центре кадра, другую в 200 пикселях справа от центра:
Если смотреть на кадр, эти точки падают куда-то на стену, пол или любой другой объект внутри помещения. Вешаю в соответствующие места бумажные наклейки и рисую на них точки маркером.
Измеряю XYZ координаты этих точек с помощью тех же нивелира и дальномера. Итого для блока из восьми камер нужно измерить координаты самих камер и еще по две точки на каждую. Т.е. 24 тройки координат. А таких блоков должно быть около десяти. Получается долгая муторная работа. Но ничего, позже сделаю калибровку автоматизированной.
Запускаю процесс расчета на основе измеренных данных.
Есть две системы координат: одна глобальная, связанная с помещением, другая локальная для каждой камеры. В моем алгоритме результатом для каждой камеры должна получиться матрица 4*4, содержащая ее местоположение и ориентацию, позволяющая преобразовать координаты из локальной в глобальную систему.
1) Берем исходную матрицу с нулевыми поворотами и смещением.
2) Берем единичный вектор в локальной системе камеры, который смотрит из объектива вперед и преобразуем его в глобальные координаты по исходной матрице.
3) Берем другой вектор в глобальной системе, который из камеры смотрит на центральную точку на стене.
4) С помощью градиентного спуска поворачиваем исходную матрицу так, чтобы после преобразования эти векторы были сонаправлены. Таким образом, мы зафиксировали направление камеры. Осталось зафиксировать вращение вокруг этого направления. Для этого и измерялась вторая точка в 200 пикселях от центра кадра. Поворачиваем матрицу вокруг главной оси, пока два вектора не станут достаточно параллельны.
5) По расстоянию между этими двумя точками вычисляю фокусное расстояния в пикселях (учитывая, что расстояние между проекциями этих точек на кадре составляет 200 пикселей).
Наверняка эту задачу можно было решить аналитически, но для простоты я использовал численное решение на градиентном спуске. Это не страшно, т.к. вычисления будут проводиться один раз после монтажа камер.
Для визуализации результатов калибровки я сделал 2D интерфейс с картой, на которой скрипт рисует метки камер и направления, в которых они видят маркеры. Треугольником обозначаются ориентации камер и углы обзора.
Можно приступать к запуску визуализации, которая покажет правильно ли определились ориентации камер и правильно ли интерпретируются кадры. В идеале, линии, идущие из значков камер должны пересекаться в одной точке.
Похоже на правду, но точность явно могла быть выше. Первая причина несовершенства, которая пришла в голову – искажения в объективах камер. Значит, нужно эти искажения как-то компенсировать.
У идеальной камеры важный для меня параметр только один – фокусное расстояние. У реальной кривой камеры нужно учитывать еще дисторсии объектива и смещение центра матрицы.
Для измерения этих параметров есть стандартная процедура калибровки, в процессе которой измеряемой камерой делают набор фотографий шахматной доски, на которых распознаются углы между квадратами с субпиксельной точностью.
Результатом калибровки является матрица, содержащая фокусные расстояния по двум осям и смещение матрицы относительно оптического центра. Все это измеряется в пикселях.
А также вектор коэффициентов дисторсии, который позволяет компенсировать искажения объектива с помощью преобразований координат пикселей.
Применяя преобразования с этими коэффициентами к координатам маркера на кадре, можно привести систему к модели идеальной pinhole камеры.
Провожу новый тест трекинга:
Уже гораздо лучше! Выглядит настолько хорошо, что даже вроде будет работать.
Вычисление координат маркера
И так, я получил кучу прямых, разбросанных по пространству, на пересечениях которых должны находиться маркеры. Только вот прямые в пространстве на самом деле не пересекаются, а скрещиваются, т.е. проходят на некотором расстоянии друг от друга. Моя задача – найти точку, максимально близкую к обеим прямым. Формально говоря, нужно найти середину отрезка, являющегося перпендикуляром к обеим прямым.
Длина отрезка AB тоже пригодится, т.к. она отражает «качество» полученного результата. Чем он короче, тем ближе друг к другу прямые, тем лучше результат.
Затем я написал алгоритм трекинга, который попарно вычисляет пересечения прямых (внутри одного цвета, от камер, находящихся на достаточном расстоянии друг от друга), ищет лучшее и использует его как координаты маркера. На следующих кадрах старается использовать ту же пару камер, чтобы избежать скачка координат при переходе на трекинг другими камерами.
Параллельно, при разработке костюма с датчиками, я обнаружил странное явление. Все датчики показывали разные значения угла рысканья (направления в горизонтальной плоскости), как будто у каждого был свой север. В первую очередь полез проверять не ошибся ли я в алгоритмах фильтрации данных или в разводке платы, но ничего не нашел. Потом решил посмотреть на сырые данные магнитометра и увидел проблему.
Магнитное поле в нашем помещении было направлено ВЕРТИКАЛЬНО ВНИЗ! Видимо, это связано с железом в конструкции здания.
Но ведь в VR очках тоже используется магнитометр. Почему у них такого эффекта нет? Иду проверять. Оказалось, что в очках он тоже есть… Если сидеть неподвижно, можно заметить, как виртуальный мир медленно, но верно вращается вокруг тебя в рандомную сторону. За минут 10 он уезжает почти на 180 градусов. В нашей игре это неминуемо приведет к рассинхрону виртуальной и реальной реальностей и сломанным об стены очкам.
Похоже, что помимо координат очков, придется определять и их направление в горизонтальной плоскости. Решение напрашивается само – ставить на очки не один, а два одинаковых маркера. Оно позволит определять направление с точностью до разворота на 180 градусов, но с учетом наличия встроенных инерциальных датчиков, этого вполне достаточно.
Система в целом работала, хоть и с небольшими косяками. Но было принято решение запустить квест, который как раз был близок к завершению нашим gamedev разработчиком, присоединившимся к нашей миникоманде. Была затречена вся игровая площадь, установлены двери с датчиками и магнитными замками, изготовлено два интерактивных предмета:
Игроки надевали очки, костюмы и рюкзаки-компьютеры и заходили в игровую зону. Координаты трекинга отсылались им по wi-fi и применялись для позиционирования виртуального персонажа. Все работало достаточно неплохо, посетители довольны. Приятнее всего было наблюдать ужас и крики особо впечатлительных посетителей в моменты, когда на них из темноты нападали виртуальные призраки =)
Внезапно нам прилетел заказ на большой VR шутер на 8 игроков с автоматами в руках. А это 16 объектов, которые нужно тречить. Повезло, что сценарий предполагал возможность разделения трекинга на две зоны по 4 игрока, поэтому я решил, что проблем не будет, можно принимать заказ и ни о чем не волноваться. Протестировать систему в домашних условиях было невозможно, т.к. требовалась большая площадь и много оборудования, которое будет куплено заказчиком, поэтому до монтажа я решил потратить время на автоматизацию калибровки трекинга.
Первым делом нужно было централизовать всю систему. Вместо разделения игровой зоны на блоки по 8 камер, я сделал единый сервер, на который приходили координаты точек на кадрах всех камер сразу.
1) вешаю камеры и на глаз направляю их в игровую область
2) запускаю режим записи на сервере, в котором все приходящие с камер 2D точки сохраняются в файл
3) хожу по темной игровой локации с маркером в руках
4) останавливаю запись и запускаю расчет калибровочных данных, при котором вычисляются расположения, ориентации и фокусные расстояния всех камер.
5) в результате предыдущего пункта получается единое пространство, наполненное камерами. Т.к. это пространство не привязано к реальным координатам, оно имеет случайное смещение и поворот, которое я вычитаю вручную.
Пришлось перелопатить огромное количество материала по линейной алгебре и написать многие сотни строк питонского кода. Настолько много, что я уже почти не помню как оно работает.
Вот так выглядит напечатанная на принтере специальная палка-калибровалка.
Тестирование большого проекта
Проблемы начались во время тестирования на объекте за пару недель до запуска проекта. Идентификация 8-ми разных цветов маркеров работала ужасно, тестовые игроки постоянно телепортировались друг в друга, некоторые цвета вообще не отличались от внешних засветок в помещении торгового комплекса. Тщетные попытки что-то исправить с каждой бессонной ночью все сильнее вгоняли меня в отчаяние. Все это осложнялось нехваткой производительности сервера при расчете десятков тысяч прямых в секунду.
Когда уровень кортизола в крови превысил теоретический максимум, я решил посмотреть на проблему с другой стороны. Как можно сократить количество разноцветных точек, не сокращая количество маркеров? Сделать трекинг активным. Пускай у каждого игрока, например, левый рог всегда корит красным. А второй иногда загорается зеленым по приходу команды с сервера так, что в один момент времени он горит только у одного игрока. Получается, что зеленая лампочка будет как-будто перепрыгивать с одного игрока на другого, обновляя привязку трекинга к красной лампочке и обнуляя ошибку ориентации магнитометра.
Для этого пришлось бежать в ближайший чипидип, покупать светодиоды, провода, транзисторы, паяльник, изоленту и на соплях навешивать функционал управления светодиодами на плату костюма, которая на это рассчитана не была. Хорошо, что при разводке платы я на всякий случай повесил пару свободных ног stm-ки на контактные площадки.
Алгоритмы трекинга пришлось заметно усложнить, но в итоге все заработало! Телепортации игроков друг в друга исчезли, нагрузка на процессор упала, засветки перестали мешать.
Проект был успешно запущен, первым делом я сделал новые платы костюмов с поддержкой активного трекинга, и мы произвели обновление оборудования.
Чем все закончилось?
За 3 года мы открыли множество развлекательных точек по всему миру, но коронавирус внес свои коррективы, что дало нам возможность сменить направление работы в более общественно-полезную сторону. Теперь мы довольно успешно занимаемся разработкой медицинских симуляторов в VR. Команда у нас все еще маленькая и мы активно стремимся расширять штат. Если среди читателей есть опытные разработчики под UE4, ищущие работу, пожалуйста, напишите мне.
Традиционный забавный момент в конце статьи:
Периодически при тестах с большим количеством игроков возникал глюк, при котором игрока внезапно на короткое время телепортировало на высоту несколько метров, что вызывало соответствующую реакцию. Дело оказалось в том, что моя модель камеры предполагала пересечение матрицы с бесконечной прямой, идущей от маркера. Но она не учитывала, что у камеры есть перед и зад, так что система искала пересечение бесконечных прямых, даже если точка находится за камерой. Поэтому возникали ситуации, когда две разные камеры видели два разных маркера, но система думала, что это один маркер на высоте в несколько метров.
Система в прямом смысле работала через задницу =)
Вспоминая «Ва-Банк!»
Если бы эта статья была курсовой работой, она бы называлась: «Разбор stealth-механик, проблемы их устаревания и адаптации к современным условиям на примере компьютерной игры «Ва-Банк!» (осторожно: лонгрид!)
Игра «Ва-Банк!» («The Sting!»), вышла в далеком 2001 году и навсегда запомнилась мне, и думаю, многим из вас, своим стилизованным дизайном, отличным саундтреком, ну и конечно-же практически уникальным тактическим геймплеем.
С тех пор у игры не то что не вышло продолжение, но даже не появилось вразумительного подражателя. Все встречавшиеся мне игры были либо слишком поверхностными и аркадными, либо имели с Ва-Банком всего пару общих механик.
Примерно с такими мыслями я с воодушевлением и принялся за разработку её современного «ремейка» – игры Gone Rogue. Отсюда и начинается моя история – уже с написания диздока пришло понимание, что время не пощадило Ва-Банк не только в графическом плане, но и в геймплейном. И так продолжалось почти весь процесс разработки: часть механик пришлось переделывать, от каких-то и вовсе отказаться, но некоторые все-таки выдержали проверку временем! А с добавлением горсти современных геймплейных представлений, получилась жгучая смесь, которая попробует показать, что чистые stealth-игры (без приставки action) все еще способны удивлять.
Ну обо всем по порядку: сначала будет пара абзацев, освежающих память о Ва-Банке, а затем я попробую воссоздать весь процесс анализа его геймплейных механик, который я провел во время осовременивания классического stealth-геймплея.
Как вы уже могли догадаться Ва-Банк! – это симулятор ограблений. Вживаясь в роль профессионального вора Макса Такера мы совершаем ряд ограблений, чтобы в итоге спасти своих друзей из плена и положить конец злой корпорации, сюжет прост до безобразия. Поэтому перейдем сразу к описанию геймплея, который разделен на две части. В первой части игрок может свободно разгуливать по городу, сбывать награбленное, покупать новые инструменты для взлома и находить новых сообщников. В общем-то и все, город здесь выступает просто растянутым «хабом» для передышки между заданиями.
На каждом задании присутствует несколько охранников, каждый из которых ходит по одному и тому же маршруту, имеет область обзора (в которую нельзя показаться даже на мгновение), слышит шум от взлома замков и может проверять некоторые двери на запертость. Так же некоторые объекты охраняются сигнализациями, а проходы преграждают лазерные лучи, которые отключаются специальными рубильниками.
У Макса же в распоряжении имеется несколько категорий инструментов, рассчитанных на взлом определенных объектов (двери, сейфы, сигнализации и т.д.). Каждый инструмент имеет свою эффективность, прочность и издаваемый шум. В том, какие инструменты взять с собой на задание, скрыта небольшая стратегическая составляющая – ведь их можно взять с собой только три штуки, и для каждого ограбления этот набор может отличаться. Напоследок, игрок может брать с собой до трех напарников, которые помогут в нескольких более поздних миссиях, в основном там, где потребуется синхронное отключение сигнализаций или дополнительные руки для выноса добычи.
Давай сыграем в прятки.
Начну с механик, от которых пришлось отказаться или сильно их изменить.
1. Механика «записи плана».
Да, вы не ослышались, основная механика Ва-Банка ему на самом деле не нужна. И хотя она на словах звучит довольно интересно и даже может вызвать у некоторых ностальгию, после вдумчивого анализа приходит понимание о ее несостоятельности и даже вредности. Ведь спокойное перемещение по уровню в режиме «God mode» с перемоткой времени назад не оставляет место страху быть пойманным, азарту и атмосфере ограбления. Остается только тактическая составляющая. И даже она, при возможности полностью изучить весь уровень, становится до боли простой.
Таким образом, единственный вариант избежать озвученных проблем – это отказаться от бесплотности протагониста, он должен взаимодействовать с окружением, примерно так же, как и в реальной жизни.
При этом, для компенсирования возрастающей сложности игры, необходимо предпринять некоторые дополнительные шаги:
а) Добавить вариативность прохождению, уйти от «чистых» головоломок, решаемых одним способом. Например, если игрок не может отключить сигнализацию т.к. не взял с собой нужные инструменты, то он все равно сможет найти карту доступа от компьютера и отключить сигнализацию через компьютер. Если оставить «линейные головоломки», то практически гарантированы ситуации, когда игрок, дойдя до конца уровня, вдруг обнаруживает, что не может пройти дальше из-за поломки инструмента или не взятого перед началом ограбления навыка. Может, это и было нормальной ситуацией в начале двухтысячных, но для современного игрока потеря даже 10-15 минут на перепрохождение миссии – непозволительная роскошь;
б) Прощать небольшие ошибки игрока, они не должны приводить к немедленному провалу. В Gone Rogue это решилось так: были добавлены две шкалы тревоги, общая на все ограбление и отдельная каждому враждебному NPC, которые заполняются от любого обнаружения присутствия игрока (его увидели, услышан шум, замечены пропавшие предметы и т.д.). И лишь полное заполнение шкалы ограбления заканчивает миссию провалом. Со шкалой тревоги заметившего NPC все немного интересней, ее заполнение переводит NPC в режим тревоги, его поведение кардинально меняется, он может начать искать игрока, звать на помощь, осматривать близлежащую территорию и т.д.;
в) Оставить возможность отматывать время назад или ввести быстрые сохранения (Gone Rogue пошла по второму пути). Ну тут должно быть все ясно – как я уже озвучивал ранее, в современном мире очень ценится время, к тому же, при частых перепрохождениях миссии сильно просаживается кривая геймплея.
В целом, отказ от бесплотности главного героя позволил добавить огромное количество нововведений (о которых я расскажу в третьей части этой статьи).
2. Охрана всегда ходит по одному и тому же маршруту.
С одной стороны, это работает на тактическую составляющую и позволяет создавать идеально выверенные планы, но, при этом, единственным вызовом игры является поиск лазейки в маршруте NPC. Поэтому неплохо было бы привнести в игру элементы неожиданности – охрана должна менять свой маршрут и поведение, тем самым удивляя игрока и иногда даже загоняя его в ловушку. При этом, изменения должны быть не случайны, а подвержены некой логике. Игрок дошел до верхнего этажа дома? Поменяем маршруты всех охранников на нижних этажах! Ограбление слишком затянулось? Вам не повезло – хозяин дома успел вернуться! Ну и так далее. Это изменение вынудит игрока принимать спонтанные решения, действовать нестандартно и рискованно (применять на NPC ослабляющие и выводящие из строя предметы, выпрыгивать из окна в неизведанную местность, выключать свет в надежде переждать опасность в тенях и т.п.)
3. Некуда тратить деньги.
В Ва-Банке инструменты стоят копейки, а самый вместительный автомобиль можно купить уже на середине прохождения. Все. Дальше удовольствие от воровства денег пропадает. Очевидным решением является создание нескольких механизмов вывода денег. Вот, что было использовано в Gone Rogue: изучение некоторых умений за деньги; покупка необязательных, но дорогих и очень полезных инструментов/расходников; получение дополнительных сведений у информаторов о цели ограбления; сюжетно-обоснованный вывод денег на различные цели, взятки.
4. Остальное, по-мелочи.
Малое количество предметов, которые можно украсть во время ограблений. В Ва-Банке случались довольно удручающие ситуации – например, в огромном трехэтажном особняке можно было украсть буквально пару предметов. А ведь один из главных стимулов для игрока – это поиск редкого и ценного лута. У нас тут игра про ограбления, вообще-то.
Затянутый геймплей в городе. Большой полупустой город, путешествия по нескольку минут до ближайшего магазина. Опять же, характерный недостаток для первопроходцев начала двухтысячных – хотели засунуть всего и побольше. Тут вот город а-ля-ГТА, только лишенный всяких активностей.
Шаткий баланс среди инструментов, наличие бесполезных напарников и бесполезных автомобилей.
Возможно, вы сейчас задаетесь вопросом: «Если в игре столько минусов, зачем о ней вообще писать?». На самом деле в игре полно и плюсов, чтобы поддержать баланс, упомяну некоторые из них:
1. Шикарный визуал и стилистика. Даже спустя столько лет, игра выглядит приятно и необычно, а взгляд не хочет цепляться за модельки из 15 полигонов.
2. Шикарный саундтрек. Кажется, что это один из самых запоминающихся саундтреков к играм. Разработчики не побоялись эксперимента, предложили игрокам бодрящий ритмичный блюз (или джаз?) и не прогадали. Необычный саундтрек идеально вписался в общий необычный стиль игры (одну из композиций можно послушать ниже).
3. В целом, разнообразные и интересные для изучения локации. Много головоломок, которые сейчас, конечно, не кажутся такими сложными, но в школьные годы все-же приходилось перепроходить миссии по множеству раз.
Так чем же можно дополнить концепцию данной игры, чтобы она пришлась по сердцу современным геймерами (наверное, все-таки, только ее олдскульной и хардкорной части):
1. Как уже упоминалось выше, отказ от составления планов позволил NPC замечать игрока, а игроку взаимодействовать с NPC. Это добавило немного экшена в геймплей, который в чём-то стал похож на Dishonored или Thief. NPC видят игрока и слышат шум; идут проверять соседние комнаты, если увидели выключенный свет или открытую дверь; зовут проходящего мимо полицейского или сами ищут наглого вора. Конечно, все осталось в пределах тактического геймплея, их поведение зачастую предсказуемо и подвергается планированию.
А поле действия игрока расширилось карманными кражами и применением на NPC кратковременных дизейблов (оглушение, усыпление и частичное ослепление). При этом, я категорически против механики, при которой жертва остается оглушенной до конца миссии. Логично, что игрокам намного проще оглушить всех NPC на локации, чем ходить и постоянно оглядываться (это отлично подходит для менее хардкорных и более экшеновых игр, но явно не здесь).
3. Не помешает немного разнообразить механику электронных защитных систем. Сигнализации и лазерные лучи это конечно хорошо, а как вам движущиеся камеры наблюдения, скрытые камеры, реагирующие на звук и компьютеры, с помощью которых можно всем этим управлять?
4. Я считаю, что подготовка к ограблению тоже может быть интересной и потенциально глубокой стратегической механикой игры. В Ва-Банке подготовка состояла из подбора 3-х инструментов, напарника и автомобиля. Не густо, учитывая, что автомобиль всегда стоит брать самый вместительный, а напарники нужны далеко не на каждом ограблении.
Небольшая сноска: в Gone Rogue нет напарников. Причины две: чисто техническая – это масса дополнительной работы, непозволительной для инди-разработчика, в том числе из-за усложнения поведения вражеских NPC; и концептуальная – таким образом мне хотелось усилить погружение игрока в окружение и нарратив, сконцентрировав все внимание на одном персонаже.
Так с помощью чего же можно разнообразить подготовку к ограблению, тем самым привнеся стратегический элемент планирования? В Gone Rogue это – подбор инструментов (как и в классике), подбор расходников (может взять те самые усыпляющие дротики, усиливающие препараты или вообще замедляющие время часы?), подбор «специализаций». Специализациями я назвал уникальные навыки, которые очень сильно влияют на геймплей. По задумке, грамотный подбор инструментов, расходников и специализаций на каждое ограбление – это уже пол сделанного дела. А что нас ждет на очередном ограблении? Об этом вам может поведать информатор или вообще один из прохожих – еще один косвенный элемент подготовки к ограблению.
Ну вот собственно и все, старался писать максимально кратко, но понятно. Вообще, изначально я планировал делать обычный ретро-обзор полюбившейся многим игры, но, как видите, в процессе он перерос в детальный разбор всего геймплея. Уж слишком много накопилось у меня мыслей и идей во время разработки собственной игры, так что не смог удержать их в себе)
Мое почтение, если осилили этот текст до конца.