QA на Уровне Ноль
Женя Кот — не кличка, фамилия такая, Котов — тестировал игры в конторе на окраине Воронежа.
Работа простая: ломай все, что дали, и пиши, где сломалось.
Багрепорты. Воспроизведение. «Шаги для повтора: 1, 2, 3». За четыре года он научился думать не как игрок, а как разрушитель: где разработчик схалтурил, туда и лезь. Застрял в текстуре — баг. Прошел сквозь стену — баг. Убил моба, а тот воскрес на том же месте через десять секунд — тоже баг, только его почему-то никогда не чинили.
В четверг ему прислали новый билд. С пометкой: «не запускать вне тестового окружения».
Женя, конечно, запустил. Он всегда запускал. В этом, если подумать, и состояла его профессия.
В тот момент, когда он нажал Enter, монитор моргнул белым. Под ребрами прошел холодок — мерзкий, влажный, как когда лифт проваливается на этаж. А потом опенспейс, кулер с водой и вечно недопитый энергетик исчезли.
Женя стоял босиком на траве.
Трава была неправильная. Слишком зеленая, слишком одинаковая — каждая травинка как из одной ассетной пачки. Небо — градиент без единого облака. И перед глазами, в полуметре от лица, висело окно. Прозрачное. С текстом.
[Добро пожаловать. Уровень: 1. Здоровье: 10. Сила: 3. Класс: не выбран.]
— Оу, — сказал Женя вслух.
Первая мысль была не «где я» и не «как выбраться». Первая мысль, честная и профессиональная, была: «А билд-то сырой».
Потому что он это видел. Видел, как игрок: локация пустая, LOD-переходы резкие — вон те холмы подгружаются рывком, когда идешь. Видел, как тестировщик: если система есть, у нее есть баги. Всегда есть. Вопрос только, где именно схалтурил разработчик этого... мира.
Моб нашелся быстро.
За холмом бродило нечто — кабан не кабан, тумба на ножках, серое, с красной полоской над башкой. При приближении полоска дернулась, над мобом всплыло:
[Пыльный Вепрь. Уровень: 2. Опасность: низкая.]
Женя подобрал палку — [Ветка. Урон: 1] — и полез в драку, как последний нуб. И тут же огреб. Вепрь боднул, окно мигнуло красным: [Здоровье: 4], и Женя понял, что «Опасность: низкая» — это по местным меркам, а по его собственным он в трех боданиях от смерти. Настоящей. Без респауна. Он проверять не хотел.
Он отбежал. Сел на камень. И начал делать то, что умел лучше всего.
Наблюдать баги.
Вепрь, потеряв цель, потрусил обратно — к своей точке. К той самой траве, где стоял всегда. Дошел до невидимой границы, ткнулся в нее, развернулся. Пошел назад. Дошел до другой границы. Развернулся. Туда-сюда. Патрульный маршрут. Между двумя точками — метров десять.
А посредине маршрута торчал камень. Большой. И вепрь его... огибал. Каждый раз одинаково: подходил, брал левее, обходил, шел дальше. Всегда левее. Всегда одинаково.
— Ага, — сказал Женя. — Патфайндинг.
Вот оно. Родное, знакомое, тысячу раз виденное в багрепортах. Кривой поиск пути. Моб не думает — он идет по скрипту, обходя препятствие по кратчайшей заготовленной дуге. А раз так, значит, его можно застрять. Заклинить между геометрией и границей зоны, как он сотни раз заклинивал ботов в тестовых сборках.
Он начал таскать камни.
Потный, злой, с ветку-палкой наперевес, он выстроил из валунов узкий коридор — воронку, — так, чтобы патрульный маршрут вепря упирался в тупик, а обходная дуга влево вела прямо в каменный мешок. Работал два часа. Или три. Или пять — кто считал, часов тут не выдавали.
Потом сагрил вепря. И побежал.
Вепрь понесся следом, дошел до камня, взял, как всегда, левее — и влетел ровно в воронку. Ткнулся в стену. Скрипт сказал «обойди слева». Слева стена. «Обойди слева». Стена. Тварь заметалась, задергалась, застряла в невидимой петле между собственной тупостью и геометрией, которую Женя ей подсунул.
А застрявший моб не бодается.
Женя подошел сбоку и методично, тычок за тычком, ветка за веткой, разобрал вепря на опыт. Тот даже не сопротивлялся толком — крутился в багнутой петле, беспомощный.
[Пыльный Вепрь повержен. +40 опыта.]
[Уровень 2! Сила: 4. Открыт навык: Анализ.]
Навык «Анализ» оказался золотом. Наведешь на объект — и система вываливает то, что обычно скрыто: скрипты, тайминги, слабые места. Женин собственный, встроенный багтрекер. Он чуть не заплакал.
Дальше пошло веселее. Вепрь-то не один был.
Он респаунился. Через минуту после смерти, на той же точке. Тот самый нечиненый баг, который в конторе никогда не правили. Женя стоял над своей каменной воронкой и понимал: у него в руках ферма. Бесконечный моб, бесконечный опыт, воронка, в которой этот моб беспомощен.
К вечеру (условному — свет просто тускнел, будто кто-то тянул ползунок яркости) он был уже пятого уровня.
[Уровень 5. Сила: 8. Здоровье: 26. Навыки: Анализ, Рывок, Торг.]
И тут пришла цена.
Потому что на шум фермы, на кучу трупов и опыта, из-за холма вышло то, что было явно не для первой локации. Высокое. Тонкое. Без полоски здоровья вообще — вместо нее над головой мигало:
[ОШИБКА: сущность вне зоны. Уровень: ??]
Оно посмотрело на Женю. И заговорило — не голосом, а прямо окном, буквами, поплывшими в воздухе:
[Ты не игрок. Игроков тут нет. Ты — тестировщик. Мы тебя ждали.]
У Жени под ребрами снова дернулся тот холодок. Влажный. Лифтовый.
— Кто «мы»? — спросил он вслух.
[Билд сырой. Ты сам сказал. В нем тысячи багов. И только через баги отсюда есть выход. Найдешь дорогу — выйдешь. Не найдешь — станешь мобом. Как вепрь.]
Сущность повернулась. Пошла обратно за холм. У самого гребня остановилась, и последнее окно повисло в темнеющем воздухе, ровно, спокойно:
[Шаги для повтора неизвестны. Воспроизведи сам. Уровень 0 ждет.]
Женя стоял босиком в неправильной траве, пятого уровня, с веткой в руке и фермой за спиной.
Он достал бы блокнот, если бы блокнот был. Записал бы: «Баг критический. Выход из игры не работает. Обход — искать другие баги».
Вместо блокнота он открыл ладонь и активировал «Анализ», наведя его на весь этот слишком зеленый, слишком одинаковый мир.
Система задумалась. А потом высыпала первую строчку.
[Обнаружено дефектов: 1247. Показать первый?]
— Показать, — сказал Женя Котов, тестировщик, и впервые за четыре года улыбнулся своей работе. — Показывай все.
Загрузка комментариев...