Дверь в кабинет распахнулась. Эрик, до этого мирно дремавший на стуле в ожидании, когда программа скомпилируется, нервно оглянулся. На пороге стоял Гейб МакМиллан, начальник отдела разработки.
– Это ужас! Менеджеры совсем обезумели! Говорят, что количество пользователей падает, и все из-за нас! – сходу стал орать он.
Эрик Фолькерсон работал в отделе тестирования и был ведущим тестировщиком, но с Гейбом часто пересекался по рабочим вопросам, ибо он, собственно, и тестировал то, что разрабатывала команда Гейба.
– Что там у них опять случилось? – сонно пробормотал он.
– Да опять то же самое! – завопил Гейб. – Продажи падают, оценки падают, онлайн падает… Все у них падает, как ни подойди. И во всем винят разработчиков! Конечно, когда мы только вышли в релиз, никто не сказал, «Гейб, ваши ребята молодцы, вот вам премия»! Да хоть бы гребаная благодарность! Нет! А кого похвалили?..
– Маркетологов, – ответил за него Эрик с явным безразличием. – Как будто ты не знаешь, как это бывает. Пошел бы сам в менеджеры… Ладно, – он уселся на кресле поудобнее, – ты же не за этим пришел. Вернее, за этим, но не только. Что хотел-то?
– Все то же, – уже спокойно сказал Гейб. – Как у вас дела с поврежденными жесткими дисками? Данные так и не восстановили?
– Неа, говорят, там все глухо, – ответил Эрик. – Что, из-за этого нас, типа, и ругают?
Гейб молча и грустно кивнул. Конечно, печально, что тебя кроют почем зря.
– Хотя бы «Ликвидатора» восстановили?
Эрик пожал плечами:
– Чего нет, того нет. Сам знаешь, там кода выше крыши. А все, мать их, бэкапы валялись на этих треклятых дисках. И как так получилось, что все они сразу накрылись, ума не приложу. Даже если написать «Ликвидатор» заново, уйдет пара недель, не меньше.
– У нас нет двух недель, – ответил Гейб. – Нас похоронят намного раньше.
– А что? Проблема появилась?
Гейб снова кивнул.
– Да, и не одна. Куча несанкционированных авторизаций.
Наполнение мира – дело не из простых. Приходится и фантазировать, и считать, и учитывать желания целевой аудитории. Нужно использовать художников для создания эскизов моделей, 3D-моделистов, чтобы сделать саму трехмерную модель, программистов, чтобы написать физический движок и алгоритм поведения и аниматоров, чтобы заставить двигаться эту самую модель. На каждую уйдет не один десяток человеко-часов.
Поэтому отдел разработки изобрел инновационную систему создания псевдослучайных моделей. По сути, это была довольно сложная нейросеть, учитывающая физический движок, более-менее считающая баланс характеристик, внешний вид, количество полигонов на модель и на выходе выдающее какое-либо игровое или неигровое существо, которое затем попадало в релизную версию на серверы. Однако человеческий фактор никуда не исчез – не все модели существ получались идеальными, кто-то не подходил под возрастной рейтинг, кто-то случайно получался чересчур несбалансированным, а кто-то просто выглядел нелепо, и так далее. Каждую получившуюся модель приходилось проверять и авторизовать в релизной версии самостоятельно, благо это было не так трудно – проверить сотню моделей вполне мог и один человек за час до конца рабочего дня. Зато эта система экономила уйму времени, позволив за короткий срок добавить несколько десятков отличных животных и растений, а также гуманоидов, которых по старинке пришлось бы создавать не менее полугода. Этот набор и вошел в релиз.
Уже позже, выложив рабочую версию программы на сервер, отдел разработки столкнулся с проблемой. Некоторые модели, не проверенные операторами, каким-то образом оказались в релизе. Искать неисправности в работе нейросети было делом небыстрым, а патч нужен был здесь и сейчас, поэтому отдел тестировки создал утилиту – «Ликвидатора Искусственно Авторизованных Моделей», который находил модели без метки оператора и полностью удалял ее с сервера.
В нейросети все-таки нашли ошибки, но они оказались так сильно связаны с самой ее функциональностью, да и «Ликвидатор» работал на удивление точно, быстро и исправно, что с авторизацией моделей решили больше не заморачиваться.
И вот случилась еще одна неожиданная проблема – из-за сбоя электроэнергии сгорело несколько жестких дисков на серверах, причем по какой-то «счастливой» случайности среди них оказались диски, где хранились все резервные копии «Ликвидатора». Нейросеть осталась работать без должной проверки.
– Может, остановим пока систему создания моделей? – спросил на всякий случай Эрик.
– Ага, – саркастично ответил Гейб, – и получим еще больше жалоб от игроков и еще большее наказание от начальства. Мы же сами хвалились, что «наш мир живой и постоянно меняется»… Эта, мать ее, Дебора из отделения пиара… Вот она – плата за живой мир.
Эрик был согласен. Он совсем не хотел лишаться премии, но был солидарен с Гейбом в том, что они попали в ловушку собственных амбиций.
– Ладно, – вздохнул он и встал с кресла. Подойдя к кофемашине, он нажал кнопку и получил стакан горячего и очень крепкого эспрессо, как он любил. – Что ты хочешь конкретно от меня, Гейб? Пойти вместе к начальству и добиться для себя правды?
– Нет, ты же знаешь Ричардсона, он слишком упрям, – отрезал Гейб. – Я прошу у тебя совета, что делать.
– Ну, – Эрик слегка отхлебнул от стакана и прикрыл глаза от удовольствия, – Можно посадить человека, который пару-тройку недель будет вручную чистить искусственные авторизации.
– У нас маленький штат, – покачал головой начальник отдела разработки. – Каждый человек на счету. Если у нас снять хотя бы одного с задач, мы не уложимся в дедлайн по разработке дополнения. У меня даже болеющий Алекс выходит на полсмены. Если у тебя будет кто-нибудь…
– Неа, – сразу же ответил Фолькерсон. – Та же фигня.
Гейб немного помялся и исподлобья посмотрел на товарища.
– Есть еще одно предложение, не знаю, понравится тебе или нет, – чуть тише сказал он.
– Какое? Выкладывай уж. Предложение – это же не приказ.
– Я промониторил текущую ситуацию. По большому счету, не все так плохо, как могло бы быть. Некоторым игрокам даже нравятся эти несанкционированные НИПы. Но есть несколько таких, которые портят весь геймплей, – начал рассказывать Гейб. – Они то ли трут другие модели, то ли фрагментируют данные, где они записаны, но все, что мы добавляли ранее, портится.
– Похоже на какой-то вирус, хех, – усмехнулся Эрик.
– Ага, вот именно, – согласился Гейб. – В общем, пока что надо бы избавиться от этих конкретных моделей, и как можно быстрее. Поэтому я подумал – не мог бы ты написать что-то наподобие антивируса с конкретными сигнатурами? Я знаю, до работы здесь ты занимался чем-то подобным.
– Ужас, друг! – усмехаясь, воскликнул Эрик и допил свой кофе. – На что только не способна ваша система! Несанкционированные авторизации, порча информации… Я тебе точно советую разобраться с ней раз и навсегда, чтобы больше не пришлось прикручивать к ней никаких костылей.
– Наверное, – смутился Гейб. Он понимал, что сам являлся одним из источников случившейся проблемы, поэтому не отрицал своей вины, по крайней мере, перед Эриком. – Но насчет антивируса… Сделаешь?
– Как нефиг. Только сигнатуры скинь.
Когда Гейб принес флешку с записями сигнатур, Эрик допивал уже второй стакан кофе.
– Давай сюда, – он схватил флешку и перебросил данные на соседний компьютер. – Это будет веселый вечер.
– Прости, что напряг тебя, – извинился Гейб, но тестер приложил палец к своим губам.
– Т-с-с. Никаких извинений. С тебя тысяча рейтинга сам знаешь где. Логин с паролем знаешь.
У разработчиков игр, как ни странно, тоже бывают любимые игры, и это не всегда те же самые, что они разрабатывают.
Гейб улыбнулся.
– За день не обещаю, но за два точно будет, – ответил он. – Ты же там так на бронзе и гнездишься?
– Я просто временно свалился, – парировал Эрик.
Он протянул руку другу, и они с удовольствием обменялись рукопожатием.
После окончания рабочего дня, когда весь отдел тестирования опустел, и Эрик остался один, он подвинул кресло ближе к компьютеру с сигнатурами и, не забыв прихватить любимый эспрессо, открыл среду разработки.
– Ну-с, посмотрим, что можно сделать, – пробормотал он, улыбаясь непонятно чему.
Эта ночь для Эрика Фолькерсона выдалась тяжелой, но он этого не замечал, сосредоточив свое внимание на программе. Сидя перед светом экрана монитора, он увлеченно печатал код, изредка поглядывая в справочники и время от времени прогуливаясь до кофемашины, чтобы налить себе еще кофе. Количество строк постепенно увеличивалось, с каждой минутой добавлялись все новые и новые функции, разные варианты защиты от взлома. Тишину офисного здания нарушали только щелчки, издаваемые клавишами.
Наконец, когда за окном уже стали появляться первые лучи восходящего солнца, Эрик нажал кнопку компиляции и довольно откинулся на спинку кресла.
– Идеально, – пробормотал он самому себе. – Импорт сигнатур, настройка поиска и даже функция самовосстановления. Вот это антивирус так антивирус! Гейб наверняка будет доволен…
На этих мыслях он задремал, ожидая, когда в офис снова придут сотрудники, и можно будет похвалиться перед ними новым творением. Не менее сладостным было и его ожидание того, как он вернется домой и увидит себя на несколько рангов рейтинга выше. Гейб уж точно сдержит обещание.
Солнце уже полностью вышло из-за горизонта. Полоска прогресса компиляции почти полностью заполнилась, а Эрик сладко спал. Наступил день выхода нового патча.