Глава 22Глава 22. Великий Мастер перекладывания ответственности

Лилит слегка нахмурилась, вглядываясь в экран монитора. Журнал исправлений багов, открытый перед ней, поражал своей детальностью. Там было зафиксировано абсолютно всё: точное время обнаружения ошибки, время её устранения, подробное описание того, как именно баг проявлялся в игре, и даже результаты повторного тестирования после фикса. Хронология была безупречной. Судя по этим записям, изначально в игре присутствовало несколько десятков ошибок. Гу Фань и Су Тун, работая в поте лица, методично вычищали код, пока не оставили всего два — те самые, что сейчас гремели на весь интернет. Выходит, решение продлить тестирование и нанять руководителя группы QA действительно принесло плоды. Без этого игра просто развалилась бы на части. Однако это открытие не только не успокоило Лилит, но и породило новые вопросы. — Но почему тогда «Траекторию Ада» мы тестировали всего три дня, и в ней остался лишь один баг? — спросила она, постукивая пальцем по столу. — А «Сизифа» вы мучили целых две недели, но в итоге пропустили целых два критических бага? Да и общее количество исправленных ошибок у вас выросло в разы! Это как понимать? Гу Фань посмотрел на неё с выражением глубокого сочувствия, словно объяснял высшую математику первокласснику. — Вы, демоны, тоже любите искать меч там, где он упал в воду, не учитывая, что лодка давно уплыла? Разве можно сравнивать сложность разработки этих двух проектов? Он развёл руками, демонстрируя очевидность своих доводов. — «Траектория Ада» — это стандартный, шаблонный шутер от первого лица. Мы использовали готовые ассеты и механики, там просто негде было ошибиться. А «Сизиф»? Это полностью оригинальный геймплей, придуманный вами! Никаких шаблонов, никаких готовых решений. Мне пришлось писать код с нуля! Естественно, багов будет больше. Неужели вы, как главный дизайнер, не понимаете, насколько сложно прописывать новые механики, завязанные на фундаментальных физических законах? Лилит на мгновение лишилась дара речи. Аргумент был железным, но она быстро нашла новую брешь в его обороне. — Допустим. Но даже если так... Почему вы исправили кучу какой-то мелочи, каких-то совершенно безобидных ошибок, но при этом пропустили два самых главных, самых разрушительных бага?! — Что значит «безобидных»? — возмутился Гу Фань, выпрямляясь в кресле. — Баг есть баг, перед кодом все равны! Мы никого не дискриминировали. Просто те ошибки, что мы исправили, лежали на поверхности. Их было легко найти. Он сделал паузу, многозначительно подняв палец вверх. — А те два, что мы пропустили... Это глубинные баги! Я подозреваю, что они связаны с базовыми физическими правилами самого движка. Их не так-то просто отловить обычными тестами! Более того, я бы даже не называл их багами в привычном смысле слова. Скорее, это... «проектные упущения». Глаза Лилит округлились от такого нахальства. — Ага! Так ты признаёшь, что это дыры в твоём коде! Гу Фань закатил глаза и покачал головой, всем своим видом выражая разочарование её непонятливостью. — Босс, вы бы уши почистили, что ли. Я когда сказал, что это дыры в коде? Я сказал — «проектные» упущения! Это значит, что проблема кроется в самом дизайн-документе, который вы мне дали! Лилит почувствовала, как у неё начинает дымиться макушка. — Что?! Как мой идеальный план может быть проблемным? А ну-ка объяснись! Гу Фань лишь тяжело вздохнул. Игнорируя её испепеляющий взгляд, он снова погрузился в работу, начав быстрый анализ причин возникновения ошибок, как делал это уже сотни раз. Лилит стояла над душой, скрестив руки на груди и всем своим видом излучая недовольство. Спустя полчаса напряжённой тишины, прерываемой лишь стуком клавиш, Гу Фань наконец откинулся на спинку кресла. Ему удалось локализовать проблемный участок кода. — Смотрите, — он указал на монитор. — Вот то, о чём я говорил. Проблема в базовых правилах. И эти правила напрямую вытекают из вашего дизайн-документа. В вашем техзадании было чётко сказано: мы должны использовать максимально реалистичный физический шаблон для движка. Верно? Лилит, сохраняя каменное выражение лица, кивнула. Отрицать это было бессмысленно. Она действительно настаивала на этом пункте. Логика была проста: чтобы огромный камень катился с горы максимально правдоподобно и причинял игрокам максимальную боль, нужна была качественная физика. Без неё невозможно было бы добиться того уровня страданий, на который она рассчитывала. Поэтому Гу Фань, как исполнительный сотрудник, выбрал один из самых продвинутых физических движков на рынке. — Но вот в чём загвоздка, — продолжил Гу Фань, переходя в режим лектора. — Чем реалистичнее физический движок, тем выше вероятность возникновения странных аномалий, особенно когда дело касается векторов силы и коллизий. Он выделил несколько строк кода курсором. — В нормальной ситуации прыжок Сизифа без камня — это просто анимация перемещения. Но из-за особенностей движка, когда персонаж толкает объект, прыжок передаёт камню дополнительный импульс. Движок считает это физическим воздействием, и камень начинает ускоряться. Гу Фань переключился на другой файл. — То же самое касается и «Взмаха Дракона». В вашем дизайне чёрным по белому написано: дракон должен мешать игроку, он должен иметь возможность сбить персонажа крылом. Это значит, что у дракона должна быть твёрдая модель, хитбокс и физическое взаимодействие. Логично? Логично. Я так и сделал. Он развёл руками. — Кто ж знал, что игроки додумаются запрыгнуть ему на спину! А механика полёта — это чистая физика. Игрок прыгает в момент удара крылом. Вектор прыжка складывается с вектором движения крыла и подъёмной силой воздушного потока, которую симулирует движок. В итоге персонаж улетает в стратосферу. Высота полёта рассчитывается движком автоматически, я тут вообще ни при чём. Это чистая математика! Глаза Лилит расширились ещё больше. На её лице застыло выражение крайнего недоверия. — Ты хочешь сказать, что 100% вины лежит на физическом движке? — Ну, я этого не говорил, — скромно заметил Гу Фань. — Я думаю, будет справедливо возложить на движок 70% ответственности. Лилит медленно кивнула. — Ладно. Хоть какая-то совесть у тебя осталась. Значит, как программист, ты признаёшь за собой оставшиеся 30% вины. Гу Фань тут же замотал головой, словно услышал несусветную глупость. — С чего вы взяли, что я возьму на себя эти 30%? Это ваша доля! — Моя?! — Лилит чуть не поперхнулась воздухом. — С какой это стати?! — А кто вписал в техзадание требование «использовать реалистичный физический движок»? — парировал Гу Фань. — Если бы не это ваше требование, ничего бы не случилось! Даже если движок глючный, я выбрал его, строго следуя вашим указаниям! Он начал загибать пальцы. — Более того, в вашем дизайн-документе не было ни слова уточнений! Вы написали, что камень нельзя ускорять? Нет. Вы написали, что на дракона нельзя наступать? Тоже нет. Как то, что вы не запретили, может считаться багом? Если бы вы написали: «Гу Фань, сделай так, чтобы на дракона нельзя было залезть», я бы сделал! Но я же не телепат! Я реализовал всё, что вы просили. Я не смею добавлять ограничения от себя, иначе вы потом скажете, что я занимаюсь самоуправством! Гу Фань победоносно посмотрел на демонессу. — Короче говоря: техзадание писали вы, движок выбирали по вашим требованиям. Даже если в игре есть дыры, это потому, что вы их не предусмотрели. Если даже вы, гениальный дизайнер, не догадались, что игроки будут так делать, то как я, простой программист, мог это предвидеть? Так скажите мне на милость: это дыра в коде или всё-таки дыра в дизайне? Лилит застыла. Она лихорадочно пыталась найти логическую ошибку в его рассуждениях, но её мозг буксовал. Самое ужасное, что его слова звучали... пугающе логично! Она опустила голову, нахмурив брови. «Неужели это снова моя вина?» Несмотря на внутренний протест и клокочущее возмущение, Лилит обнаружила, что ей нечем крыть. Строго говоря, эти два «бага» даже не были ошибками кода. Программа работала идеально, просто физические законы игрового мира, взаимодействуя друг с другом, породили непредвиденный результат. Это был «счастливый случай», побочный эффект правил, которые она сама же и утвердила. Заставлять Гу Фаня отвечать за законы физики было бы несправедливо. Но Лилит не собиралась сдаваться так просто. Её демоническая гордость требовала сатисфакции. — Погоди, всё равно что-то не сходится, — пробормотала она. — Не может быть, чтобы виновата была только я. Неужели больше ничьей вины нет? Гу Фань сочувственно вздохнул. — Ну, если уж копать совсем глубоко... Я думаю, что помимо физического движка и вашего дизайн-документа, есть ещё одна причина. И очень весомая. — Какая? — Лектор Дин! Глаза Лилит загорелись надеждой, но Гу Фань тут же погасил этот огонёк. — Но, к сожалению, вина Лектора Дина тоже в конечном итоге ложится на ваши плечи. Лилит опешила. Она ткнула пальцем себе в грудь. — Да почему опять я?! При чём тут Дин и я?! — Включите логику, — спокойно произнёс Гу Фань. — Кто принял решение вбухать все три миллиона рекламного бюджета в одного-единственного стримера? Вы. А теперь подумайте: если бы мы, как обычно, купили у него всего два часа стрима, нашёл бы он эти баги? Лилит замерла. Она мысленно вернулась в прошлое. Стандартный контракт на два часа? Действительно... Если бы всё шло по старому плану, ничего бы не случилось. Первый стрим Дина пришёлся на канун Рождества, и это был «мирный вечер». За два часа он не нашёл ни единого бага. Он просто страдал, злился и, в конце концов, вышел из игры, чтобы выпустить пар в каком-то шутере. На следующий день количество стримеров, играющих в «Сизифа», резко упало. Если бы не жёсткий контракт, обязывающий Дина страдать в эфире минимум пять дней, он бы в жизни больше не запустил этот симулятор боли. А значит, никогда бы не наткнулся на эти скрытые механики. А решение приковать Дина к этой игре на пять дней приняла именно она, Лилит. Мотив был прост и сладок — месть. Она хотела насладиться его мучениями, сломать его волю. Кто же мог знать, что эффект будет диаметрально противоположным...
Обновлено: 23.01.2026

Комментарии к главе

Загрузка комментариев...