— Случится. Обязательно случится. — Шлепнул я себя по щеке. Один такой вечер, и все мои рабочие настройки психики слетят к чьей-то матери. И завтра снова придется с хрустом мозговых шестеренок ставить себя на рабочие рельсы. Раньше, когда моей жизни угрожала голодная смерть, мозг хватался за любую работу, мог входить в рабочий режим, даже после недельного недосыпа. Сейчас же, когда он увидел более-менее стабильную ситуацию, начал потихоньку саботировать рабочий процесс, то и дело пытаясь склонить меня к прокрастинации и праздному шатанию. Так уж он устроен, этот серый ублюдок. Пытается сэкономить ресурсы при любом удобном случае.
Чтобы отвлечься от ненужных мыслей, быстрым шагом навернул десяток разминочных кругов по пустой квартире, дополнил их двумя подходами отжиманий, по пятьдесят раз. Физическая нагрузка сработала как надо — мозг снова вернулся к рабочим вопросам, хоть и не без усилия.
Усевшись за компьютер, взглянул на часы. До возвращения Авроры из фитнес-зала оставался еще примерно час — а значит, я должен успеть построить пайплайн следующей игры и подготовить техническое задание на графику к ее приходу. Чтобы конвейер геймдева не простаивал без дела слишком долго.
— Итак, Пазл с трубами. Он же крокодильчик Свомпи… — Хлопнул я в ладоши. Мозг услужливо высветил из памяти число в 150 миллионов долларов. Именно столько принесла эта франшиза мобильному подразделению Диснея. И отдавать переобувшимся фашистам такой лакомый кусочек я не желал — хоть и понимал, что вероятность попасть в производственный ад на этом проекте крайне высока.
Первым делом я решил, как порядочный разработчик, выстроить пайплайн — то есть план проекта. Чтобы хотя бы примерно понимать, сколько сил и времени уйдет на каждый этап и как лучше распределить задачи между мной и моим арт-директором. Открыл текстовый документ, принялся прописывать каждую фазу.
ФАЗА 1: Создать физику воды для корректного заполнения низины, без зависания и создания GC-спайков. (Реализуемо через 2D-сетку bool[,] terrain,int[,] waterLevel. Правила: вода падает вниз → если занято, течёт влево/вправо → если оба заняты, стоит.)
ФАЗА 2: Добиться плавного выкапывания каналов с нулевыми пропусками в «земле» и без блокирования цикла воды во время ввода данных о копке. (Реализуемо черезInput.GetTouch(0).position → → координаты сетки. Радиус кисти 3×3 или 5×5 ячеек — надо тестить.)
ФАЗА 3: Провести левел-дизайн — сделать 3–5 тестовых уровней с чёткими условиями победы (3 утки) и с использованием базовых механик (вентили, сопла, грязная вода).
Дойдя до левел-дизайна, я притормозил. На вскидку подсчитал количество времени, которое придется затратить на уже прописанный объем работ. Первая и вторая фазы с кор-механиками — самые сложные с точки зрения технического исполнения. В целом, можно заложить три дня на разработку и тестирование кода. Третья же фаза выглядит просто — но только на первый взгляд. По факту проработка каждого уровня займет минимум десять часов, а то и больше. Продумать логику головоломки, построить уровень, протестировать, исправить ошибки. Титанический объем работы...
— Даже если брать по минимуму. Пять уровней я буду делать около четырех дней. А ведь их нужно куда больше. Двадцать, а лучше тридцать. — Пробурчал я себе под нос.
Подперев щеку кулаком, подсчитал общий объем времени, что потребуется на разработку хотя бы двадцати уровней. Выходило около двух недель. Плюс еще неделю на все остальные процессы производства.
— Нерентабельно. Пока не рентабельно. — Озвучил я неутешительный вердикт. — Значит, этот проект нужно перенести на потом.
Откинувшись в кресле, я задумчиво уставился на темную улицу за окном. Только что приобретенная за долгие годы практики привычка планировать проекты, спасла меня от производственного ада — в котором мы, скорее всего, потеряли бы кучу нервов и времени. И по итогу выпустили бы откровенно плохой проект.
— Тогда нужна замена… — Протянул я, изучая, как за окном клубятся тучи. — Нечто с таким же неторопливым темпом… С процедурной генерацией препятствий и желательно с максимальной реиграбельностью.
Вдруг, за окном стремглав пролетела черная тень. Я вздрогнул. Мои глаза определенно успели запечатлеть человека. Небольшая фигурка пролетела мимо всех трех окон моей квартиры буквально за секунду. Слишком мало, чтобы разглядеть хоть что-то. Но достаточно, чтобы убедиться в ее реальности. Это явно был не глюк от переутомления.
Подскочив со стула, я пулей метнулся к окну, дернул на себя фрамугу и выглянул наружу. Ничего. Там, куда умчалась тень, виднелась лишь сумрачная улица — без какого-либо намека на загадочного летуна.
— Паркер, что ли, балуется? — Всунувшись обратно в квартиру, от греха подальше опустил жалюзи. Нет, это был определенно не Паркер — слишком уж он велик для той тени, что я видел. По размерам это скорее была девушка. Или очень субтильный парень.
— Ну, будем надеяться, что это была добрая херня. — Вздохнул я, возвращаясь к компьютеру. Все еще нужно было решить, какой проект запускать в производство.