Патч 09
Виктория Андреанова


Разработчик-одиночка Антон и его сын Митя создают инди-хоррор «Полночь на Ветряной». Ночью сборка проекта зависает на сорока двух процентах, а в коде появляется незнакомое имя — gryst. Игра начинает переписывать реальность, стирать границу между светом и тенью и требовать закрыть старый долг из прошлого.





Виктория Андреанова

Патч 09





---



# ПАТЧ 0.9



## Глава 1. Ночная сборка



Сборка падала на сорок втором проценте.



Антон смотрел на экран, откинувшись в кресле, и ждал. Ждал уже двадцать минут — столько в среднем занимала компиляция «Ветряного», их с Митей игры. За окном было два часа ночи, кухня пахла остывшим кофе, а из-за спины дышал тёплым ветерком вентилятор.



— Пап, — Митя вынырнул из комнаты в пижаме с планетами на плечах. — Опять?



— Опять. Сорок два процента — и всё.



— Она падает на одном и том же? То есть всегда на сорок втором?



— Всегда. — Антон постучал пальцем по столу. — Интересно, да? Код не менялся с вечера, а падает каждый раз ровно здесь.



Митя, которому было десять, считался в их маленькой студии из двух человек — «геймдизайнером и тестировщиком». На самом деле он придумывал имена монстрам, рисовал на бумажке уровни и всерьёз спорил, от какого звука страшнее всего бегут мурашки. Антон делал всё остальное: код, графику, звук, вёрстку. Так они жили год — с тех пор, как Лена уехала в другой город, а Антон уволился, чтобы «работать над своим проектом». Свой проект пока не платил зарплату никому.



Игра называлась «Полночь на Ветряной». Ветряная — это улица, где герой, ночной сторож, обходил старый микрорайон с фонарём. Игрок шёл по дворам, слушал, как ветер дёргает провода, и пытался понять, почему у домов за ночь меняется количество окон. Дешёвая, честная атмосферная страшилка. Антон писал её, чтобы удержать в жизни хоть что-то целое, а Митя — потому что папа делал игру, и это было лучше всего на свете.



— Дай угадаю, — Митя подлез на диван рядом с рабочим местом. — Ноль-девять?



— Патч ноль-девять, — подтвердил Антон. — Последний перед демо.



— А если поставить спать и посмотреть утром?



— Если поставить спать, я утром найду ошибку и мы завтра не покажем демо.



Терминал выдал строку — и Антон перестал дышать.



Ошибка была не та. Не «сегфолт в шейдере освещения», как двадцать раз до этого. Новая строка. На которой никогда не было ничего, кроме дежурного номера билда.



```

build 0.9.0 :: ok

wait

```



«wait» — маленькими буквами, в новой строке, сам по себе. Так не пишет компилятор. Так не пишет вообще никто, потому что нигде в проекте не было слова «wait».



Антон перечитал. Митя перечитал вслух, по складам:



— «Wait». Ждать?



— Сборка что ли ждёт, — пробормотал Антон и потянулся к клавиатуре.



Прогресс-бар, застывший на сорока двух процентах, дрогнул. Пополз. Пятьдесят. Шестьдесят. Строка «wait» исчезла так, будто её и не было. Сборка дошла до конца, зелёная полоска закрылась, и на экране засветилось: «Полночь на Ветряной — сборка 0.9.0 готова».



— Сработало! — Митя подпрыгнул.



— Сработало, — согласился Антон.



Он не сказал сыну, что у него в животе похолодало. Что он двадцать минут назад открыл лог сборки и не нашёл там ничего, кроме той строки. И что слово «wait» было напечатано не там, где его мог бы напечатать даже самый кривой скрипт. Оно было в самом конце, отдельной строкой, после того, как всё уже закончилось.



Как будто кто-то просто хотел убедиться, что они смотрят.



## Глава 2. Пиши, что видишь



В субботу Митя приехал на выходные с рюкзаком, в котором, кроме футболок, всегда лежал блокнот. Блокнот был толстый, в клетку, с обложкой «СТУДИЯ ВЕТРЯНАЯ», которую Антон сделал ему на 3D-принтере две зимы назад.



— Новый монстр, — объявил Митя, разложив блокнот на кухонном столе. — Смотри. Он не бегает за тобой. Он стоит.



На страничке был нарисован углём — точнее, карандашом, сильно налиженным — человек. Стоял человек посреди двора, лицом к герою, руки вдоль тела. Вокруг него Митя нарисовал оранжевые кружочки.



— Это что, лампы?



— Фонари. Он стоит только там, где горит свет. Если выключаешь фонарь — он делает шаг. Один шаг. И так до тех пор, пока не дойдёт. Поэтому фонари надо не выключать, а наоборот — держать зажжёнными, пока не пройдёшь мимо.



Антон посмотрел на рисунок внимательно. Человек не был страшным — зачёркнутая голова, будто кто-то прошёлся по лицу ластиком, две точки вместо глаз. И подпись внизу, ровным детским почерком:



**СТОЯЩИЙ. Не бегает. Не догоняет. Просто дойдёт.**



— Жуткий, — честно сказал Антон. — Возьмём?



— Возьмём. Он маленький. Одна локация. Как секрет.



Код «Стоящего» Антон написал за два вечера. Логика была простая до грубости: если сущность в радиусе света — стоит; если света нет — делает один шаг по прямой к игроку. Митя настаивал, чтобы шаг был «как будто сквозь землю», с глухим звуком, будто кто-то тяжёлый поставил ногу на мокрый песок. Антон вычесал из библиотеки свободных звуков подходящий, наложил эхо — и получилось действительно хорошо. Так хорошо, что он записал звук отдельно и слушал наушниками, пока делал ужин.



В воскресенье вечером, провожая Митю до автобуса, Антон поймал себя на странном: на подъездной дороге, там, где фонарь перегорел ещё с осени, ему захотелось не идти по тёмному участку, а обойти. Кругом, по светлой стороне. Он поймал себя на этом, рассмеялся — тридцать восемь лет, боится тёмного пятачка в десять метров, — и пошёл напрямик.



Ничего не произошло. Разумеется.



Но дома он открыл сейв последней сессии Мити — хотел посмотреть, как сын прошёл новый уровень, — и замер.



В папке с сохранениями лежал новый файл. Имя файла было стандартное: `save_047.dat`. Дата создания стояла завтрашняя. Время — 02:14.



Антон открыл файл. Он открывался без ошибок. Внутри было состояние игры: герой стоял в подвале дома на Ветряной, 12 — локации, которую они с Митей ещё не закончили, — и перед ним, в свете фонаря, стояла фигура.



Стоящий. Руки вдоль тела, голова зачёркнута светом.



Антон закрыл сейв, не нажав ни одной клавиши, чтобы не перезаписать его своим прогрессом. Сел. Вытер ладони о джинсы. Потом открыл консоль и запустил скрипт, который выводил время создания каждого файла в проекте, до секунды, с хэшами.



`save_047.dat` — завтрашняя дата, 02:14:31.



Всё остальное — нормальное, сегодняшнее.



Он сидел и смотрел на эту строку минут десять. Потом взял телефон и набрал Мите — не для того, чтобы что-то сказать, а просто чтобы услышать голос.



— Пап? — Митя ответил на второй гудок, и в голосе его было бодрое удивление. — Что случилось?



— Ничего. Забыл сказать про альфа-тест в среду. Ты придёшь ко мне после школы?



— Конеш, — сказал Митя. — Пап. А ты смотришь мой сейв?



Антон сглотнул.



— Почему спрашиваешь?



— Я его не сохранял. Я же помню, что не сохранялся. Я в подвале упал — и сразу выключил. Мне было страшно, — Митя сказал «страшно» легко, как дети говорят о страхе в игре, и добавил: — Там кто-то был, пап. Он стоял. Я его нарисовал раньше, чем увидел. Это прикольно, да?



— Да, — сказал Антон. — Очень прикольно. Спокойной ночи, Солнце.



Он повесил трубку и посмотрел на экран. На строку: `save_047.dat — 02:14:31, завтра`.



Уберётся ли завтрашнее завтра — вот в чём был вопрос.



## Глава 3. Кошка из соседнего двора



Во вторник, за два дня до среды, во дворе дома, где жил Антон, обнаружили соседского кота Барсика. Кот сидел на газоне перед подъездом и не шевелился. Он сидел идеально ровно — лапы передние вместе, хвост обёрнут вокруг них, спина прямая, — и смотрел не на людей, а в точку на асфальте, метрах в пяти от себя.



— Барсик! — звала хозяйка, старушка из третьего. Кот не поворачивал головы.



Антон спускался в это время к машине — ему надо было в магазин за деталями для игры — и остановился. Кот был рыжий, обычный, живой. Но что-то в том, как он сидел, резало глаз.



Антон подошёл ближе. И тогда он увидел.



Кот не моргал. Вообще. И не дышал — грудка не поднималась. А на асфальте, в той точке, куда он смотрел, лежала круглая тень от лампы, которой над подъездом не было: фонарь над козырьком стоял темный уже вторую зиму.



Антон наклонился. Провёл ладонью перед мордой кота. Кот не отреагировал. Хозяева потом вызовут ветеринара, скажет он себе потом; он знал только, что не должен был этого делать — дотягиваться до чужого кота, который сидит перед несуществующей тенью. Но он дотянулся.



И кот моргнул.



Один раз, медленно, как машет кто-то с другой стороны стеклянной двери. Потом встал — одним движением, без разминки, как встаёт кукла, — и пошёл. Не к хозяйке. Не к подъезду. Прямо — через двор, туда, где начиналась тень. На границе света и темноты он остановился, оглянулся на Антона, и Антон увидел его глаза.



Они были пустые. Не выколотые, не больные. Просто в глазах не было зрачков — только рыжая радужка до самого края, как у игрушки.



Кот шагнул в тень и исчез. Не убежал, не обогнул куст — исчез, как будто его стёрли посреди шага.



Хозяйка потом неделю рассказывала всем, что Барсик ушёл и не вернулся. Антон не стал говорить ей про глаза. Про глаза он не сказал никому — кроме Мити, вечером, по видеосвязи, и то не всё.



— Пап, — сказал Митя после долгого молчания. — А в игре кот есть?



Антон полез в ассеты. Доложил: в ассетах кота не было. В игре были вороны, были крысы в подвале, был Стоящий.



— А тень от фонаря?



— Тени не отдельно, они с фонарями.



— Понятно, — сказал Митя так, как взрослые говорят «понятно», когда совсем непонятно. — Пап. А мы вообще всё, что в игре, сами придумали?



Вопрос был такой, какой задают дети, когда уже всё поняли, но хотят, чтобы взрослый сказал им, что нет.



— Сами, — сказал Антон.



И поехал в тот же вечер разбираться в истории репозитория.



## Глава 4. Первый коммит



Git-история проекта лежала перед ним ровной лесенкой коммитов — его почта, его время, аккуратные подписи «добавил скрипт фонарей», «пофиксил звук шагов», «сделал блокнот Мити в 3D» — да, он даже моделировал блокнот сына в игре, герой делал записи по ходу ночного обхода, и записи были Митиными, с его орфографией и его рисунками.



Антон прокрутил историю вверх, к самому началу.



И увидел то, чего не мог увидеть.



`commit 0000001 — initial — автор: gryst — 3 года назад`.



Три года назад. За год до того, как Антон впервые открыл движок и назвал папку «Ветряная». За два года до того, как он решился писать игру. Почта автора коммита была валидной, но не его: `gryst@wind.local`. Домена `wind.local`, конечно, не существовало — это был адрес, который автоматически генерировали локальные системы, когда настоящей почты не было.



— Скачивание, — сказал Антон вслух, пустой квартире. — Удалённый репозиторий. Кто-то залил.



Он открыл файлы первого коммита. Их было семь: скелет проекта, пустая сцена, и один скрипт.



Скрипт назывался `standing.gd`. Он начинался словами:



```

# Он не бегает. Он не догоняет.

# Он просто дойдёт.

```



## Глава 5. Что нельзя удалять



Антон писал всю ночь. Не код — писал для себя. На бумажке, потом в заметках, потом снова на бумажке. Список.



Что случилось, что не могло случиться:



1. Сборка напечатала «wait».

2. Появился сейв с завтрашней датой, в нём — монстр, которого Митя нарисовал за день до того, как Антон его запрограммировал.

3. Кот из реального двора сел, как сидят существа в их игре, и ушёл в тень от несуществующей лампы.

4. Первый коммит в репозитории был сделан за год до начала проекта. В нём — монстр, которого они с Митей придумали в этом месяце.



Выводов у него было два, и оба не держались на ногах.



Первый: кто-то имеет доступ к его машине и разыгрывает его с чудовищной тщательностью. Второй: что-то из игры выходит в мир, а что-то из мира заходит в игру, и граница между ними сделана из фонарей.



К утру он сформулировал третий, который держался на ногах лучше прочих, — и от которого у него пересохло во рту.



Может быть, «Ветряная» не игра про ночной сторож. Может быть, «Ветряная» — это место. А игра — только дверь, которую они с Митей нащупали, сами того не зная. Не они пишут игру. Игра пишет их.



Под этим выводом Антон написал: «Надо остановить. Не показывать демо. Удалить проект».



И почти сразу под этим: «Но Митя уже видел. И если мы остановимся, он всё равно будет играть. Один.»



В восемь утра позвонила Лена.



— Антон, привет. Митя сегодня сказал странное, — голос у неё был ровный, но он знал эту ровность: за ней шла тревога, как за фонарём идёт тень. — Он сказал, что ему нельзя играть до среды. Я спросила почему. Он сказал: «Потому что тогда он до нас дойдёт». Кто — он, Антон? Что за игра у вас?



Антон смотрел на стену. На стене висел плакат с ветряной мельницей — он купил его на барахолке в первый месяц работы над игрой, мельница как символ.



— Есть чем заняться на выходных, — сказал он как можно ровнее. — Приезжай в среду. Увидишь сама.



— Антон.



— Лена, приезжай в среду. Пожалуйста. Я тебя прошу.



Он повесил трубку и открыл сейв 047. Тот, завтрашний.



Дата создания файла обновилась. Она больше не была завтрашней.



Она была сегодняшней — 02:14:31. Время уже прошло.



Антон открыл сейв. Герой стоял там же, в подвале дома Ветряная, 12. Фонарь горел. Перед ним стоял тот, кого нельзя называть — но теперь у Стоящего была не одна тень от фонаря, как на рисунке Мити.



Их было три. И одна из них была меньше остальных. И стояла она за спиной героя.



## Глава 6. Среда



В среду Митя приехал в четыре, Лена обещала быть к шести. Антон встретил сына на остановке, взял рюкзак, и они шли до дома молча — не тем молчанием, когда нечего сказать, а тем, когда слишком много.



Дома Антон не стал мягкотелым. Он поставил перед Митей чай, сел напротив и сказал:



— Мне нужно, чтобы ты рассказал мне всё. Не как папа, не как разработчик. Как человек, который не понимает и которого напугало. Понял?



Митя кивнул. Он был серьёзный — серьёзнее, чем бывал, когда разбирал монстров по косточкам.



— Сначала я думал, мне снится, — начал он. — То есть не снилось, а так… что я придумал. Я нарисовал Стоящего во вторник. Ты сделал его в игре в четверг. Я играл в пятницу — и он был в игре, и я сразу узнал, он же мой. Потом я упал в подвале. Он стоял, пап. Не шагал, не приближался. Стоял и смотрел. Я выключил игру и лёг. А во сне — не во сне, а как будто поверх — я понял, что он не за мной. Он за тобой.



Антон не двинулся. Чай остывал перед ним, и Митя посмотрел на кружку, потом на отца.



— В понедельник ты позвонил. Ты редко звонишь просто так, ты пишешь. Я подумал: он дошёл. В среду он дошёл до тебя. Поэтому я тебе и сказал тогда, на той неделе: нельзя играть до среды. Я думал, если не играть, он не дойдёт.



— Митенька, — сказал Антон и понял, что голос у него не тот, что надо. Он начал заново. — Тот сейв, который я нашёл. Там за героем стоят двое больших и один маленький. Маленький — я думаю, он — ты.



— Я знаю, — сказал Митя просто. — Я нарисовал это ещё в понедельник. Хочешь посмотреть?



Он вытащил блокнот. Открыл страничку.



Рисунок был сделан детским карандашом, ровно, старательно. Двор. Фонари. Герой в центре — в нём безошибочно угадывался Антон в его зимней куртке, с той, что с капюшоном. За героем — три фигуры. Две большие. Одна — между ними, ниже, голова по уровню груди, и она держалась за руку большой.



Подпись: «если фонарь погаснет — они дойдут. не гаси.»



Антон закрыл блокнот. Он не знал, сколько просидел молча — может, минуту, может, пять. Потом встал, достал с верхней полки конверт, где лежали документы, вытащил свидетельство о рождении Мити, посмотрел на дату, будто она могла что-то объяснить, и положил обратно.



— Мы с тобой, — сказал он, — не будем в это играть. Вообще. Ни сегодня, ни потом. Лена приедет в шесть, мы всё расскажем ей вместе, и она поможет решить. Хорошо?



— Хорошо, — сказал Митя. — А если она не поверит?



— Она поверит, когда увидит сейв.



В дверь позвонили.



Часы над входом показывали без пяти шесть. Антон пошёл открывать — и уже на ходу понял, что что-то не так. Лена не звонила с парадного — она всегда писала «я у подъезда», и он всегда спускался за ней, потому что замок капризничал.



Он открыл дверь.



За дверью стоял Митя.



В пижаме с планетами на плечах. В той самой, в которой он спал у мамы в другом городе, в трёхстах километрах.



— Пап, — сказал Митя спокойно. — Открыл же. А я стою и жду. Ты не гаси фонарь в коридоре, ладно? Пока не пройдём мимо.



## Глава 7. Двое



За спиной Антона, из кухни, донёсся голос — тоже Митин, тоже спокойный:



— Пап. Это он настоящий? Или это я настоящий?



Антон стоял между ними. И не знал.



Оба мальчика выглядели одинаково — та же пижама, та же растрёпанная чёлка, одинаковые косички на запястье, которые Митя плёл сам. Один — из-за двери, из ночи, из коридора, где горел тусклый ламповый свет. Другой — из кухни, из тёплого света, из-за чая.



— Митя, — позвал Антон, не оборачиваясь, того, что из кухни. — Иди сюда. Медленно. Стой рядом со мной.



Босые ноги зашлёпали по полу — тёплого, домашнего Мити он узнал по шагам, по тому, как тот всегда волочил правую пятку. Мальчик встал слева от отца. Тот, из коридора, стоял справа — на пороге, на границе света из коридора и темноты лестничной клетки.



— А кто из вас рисовал Стоящего? — спросил Антон.



— Я, — сказали оба.



— Кто звал меня папой в понедельник по телефону?



— Я, — сказали оба. Потом тот, что справа, поправился: — Но это был не я. Это был он, во мне.



— Пап, — сказал тот, что слева, тихо. — Он не врёт. Он правда думает, что он я. Он же я. Он просто… оттуда. Из сейва. Из того, где я упал и не встал.



Антон почувствовал, как земля уходит из-под ног — не метафорически: пол комнаты, свет, кухня, чай — всё это вдруг стало казаться временной декорацией, натянутой на что-то большое и холодное, как палатка на льду.



— Тот, кто за спиной героя, — медленно сказал он. — В сейве. Маленькая фигура.



— Да, — сказал тот, что в коридоре. — Это я. Я дошёл. Ты не гаси фонарь, папа. Пока не пройдём мимо. Я же сказал.



— Митя, — Антон повернулся к сыну, настоящему, домашнему, с чаем. — Ты когда-нибудь падал в подвале на Ветряной, 12?



— Падал, — сказал Митя. — В пятницу.



— А вставал?



Митя подумал. Антон видел, как в глазах ребёнка медленно, как вода поднимается по стенке стакана, поднимается понимание — и как оно опускается обратно, потому что дети не умеют жить с таким пониманием.



— Я не помню, как вставал, — сказал он наконец. — Я помню, как выключил игру и лёг. Папа, а если я не вставал…



— Молчи, — сказал Антон. — Не сейчас.



Он закрыл дверь — мягко, не хлопнув, чтобы не напугать того, кто остался на пороге. Потом повернул ключ. Потом ещё раз, потому что замок был двойной.



Тот, из коридора, не стал ломиться. Он даже не стучал. Антон прислушался — и услышал, как за дверью, тихо, как робот на паузе, кто-то дышит. Ровно. Терпеливо.



Он повёл настоящего Митю в кухню, посадил рядом с собой, обнял за плечи и достал ноутбук.



— Смотри, — сказал он. — Я не знаю, что это. Я не знаю, как это работает, и не знаю, кто из вас настоящий, хотя в глубине знаю. Но я знаю одно: игра — это дверь. Если мы её закроем, из неё больше никто не выйдет.



— А тот я? — спросил Митя.



— Тот ты вышел, — сказал Антон. — Значит, пока он здесь, дверь нельзя закрывать. Иначе она закроется с ним по ту сторону.



— А если не закрывать?



Антон посмотрел на сына. На двоих сыновей — одного под рукой, одного за дверью.



— Если не закрывать, — сказал он, — то он дойдёт.



## Глава 8. Лена



Лена приехала в десять — поезд задержали, она шла от остановки быстрым шагом, и, когда открылась дверь, Антон увидел по её лицу, что она уже обо всём догадалась. Митя выбежал к ней, уткнулся — и она, обнимая его, смотрела поверх его головы на Антона.



— Покажи, — сказала она.



Он показал. Сейв с датой из будущего, которая стала датой из прошлого. Коммит, который был сделан за год до начала проекта. Рисунки из блокнота. Фотографию кота на газоне, которую он зачем-то успел снять телефоном, — и на которой тень лежала ровно так же, как в их игре на всех картах.



Лена слушала молча. Потом сказала:



— А Митя-второй? Где он?



— В коридоре. За дверью.



— Пусти меня к нему.



— Лена, — сказал Антон. — Ты не понимаешь.



— Я понимаю, Антон. Я мать. Я всегда понимала раньше тебя, просто ты не слушал, потому что был в коде. — Она поднялась. — Если где-то есть мой сын, даже если он из игры, из сейва, из чего угодно, — я к нему пойду.



Она прошла по коридору, сняла цепочку и открыла дверь.



Тот, кто стоял за ней, поднял голову. Лена присела перед ним — на корточки, как приседают перед детьми, когда хотят, чтобы они посмотрели в глаза.



— Привет, — сказала она. — Ты мой Митя?



Он кивнул. Губы у него дрожали — впервые с момента, как он появился на пороге.



— Я пришёл сказать вам, — сказал он. — Как отключить. Я помню. Там, где я, я всё помню, но там темно и я один, и фонари гаснут по одному, я слышу. Папа сделал код, но код не главный. Главный — сейв. Если сейв не закрыть, дверь остаётся. Надо, чтобы папа сам, своими руками, переписал сейв. Переписал то, что случилось в подвале. Сказал мне там, в игре, встать. Устно. Я слышу изнутри, я не вижу, но я слышу. Только устно нельзя соврать, папа. Если соврать — дверь запрёт нас обоих с моей стороны.



Лена поднялась. Оглянулась на Антона.



— Он просит тебя сделать то, что ты сделал, — сказала она. — Своими руками.



Антон сел за компьютер. Руки не слушались — не дрожали, но не слушались, как чужие. Он открыл сейв 047. Герой стоял в подвале. За его спиной, в круге тусклого света, стояла маленькая фигура — и, увидев экран, Антон понял, что она смотрит не на героя, а на него. Сквозь экран. Она всегда смотрела не на героя.



Он взял микрофон — тот, с которым записывал звуки для игры.



— Митя, — сказал он. — Ты меня слышишь?



Тишина. Потом, изнутри наушников, очень тихо, как из-под воды:



— Да, пап.



— Встань, — сказал Антон. — Встань и иди к фонарю. Я переписал всё. Подвал больше не подвал. Там лестница наверх. Я всё переписал, слышишь? Там лестница, и она ведёт ко мне.



— Пап, ты не врёшь? — Голос был детский, тонкий, как у того Мити, который был у него под боком, пока не начинало что-то происходить.



— Я не вру, — сказал Антон.



Он не врал.



## Глава 9. Что осталось



Сейв закрылся сам, без его ведома. Экран моргнул — и на секунду, на одну короткую долю секунды, Антон увидел не подвал, а коридор. Настоящий, их коридор, с ковровой дорожкой и тумбочкой. По коридору шёл Митя. Настоящий Митя. Он шёл к фонарю в конце коридора, и фонарь был включён, и в свете фонаря он обернулся, посмотрел на Антона — и улыбнулся.



Экран погас.



Когда Антон поднял глаза от клавиатуры, на пороге кухни стояли двое. Оба в пижамах. Оба — Митя. И они держались за руки, и тот, что был раньше в коридоре, впервые за всё время не был испуган. Он был как будто возвращённый.



— Папа, — сказали они в один голос.



— Тихо, — сказал Антон и разрыдался — впервые за три года, с тех пор как уехала Лена, впервые вообще. Он не стеснялся, он просто плакал, потому что не знал, что делать дальше, и плакать было единственное, что он умел делать правильно.



Лена обняла их обоих. Антон смотрел на них через свою мокрую ладонь и думал: надо переписать сейв. Надо переписать всё. Надо вычистить проект, переименовать, удалить.



Митя-первый поднял на него глаза:



— Папа. Я остался?



— Остался, — сказал Антон. — Вы оба.



— А тот, который в подвале остался?



Антон замер.



— Какой тот?



— Ну, — Митя наморщил лоб, как всегда, когда хотел что-то объяснить и не знал, как. — Который стоял за героем. Там же было трое. Двое — большие. Одна — маленькая. Я маленький. А двое больших?



Антон медленно повернул голову к окну. За окном, на границе света от фонаря во дворе и темноты, стоял кот Барсик — тот самый, рыжий, с пустыми глазами. Он смотрел на окно Антона. И перед ним, в круге тусклой жёлтой тени, лежала тень, которой не должно было быть от этого фонаря.



Тень была длинная. Человеческая.



И она стояла лицом к окну.



## Глава 10. Финальный патч



Антон не стал медлить. Он открыл проект. Он удалил «Стоящего». Он удалил скрипт `standing.gd`. Он удалил сейвы — все сорок семь. Он переименовал игру в «Ветряная, версия 2». Он переименовал дом на Ветряной, 12 в обычный многоэтажный дом. Он удалил подвал. Он удалил кота из ассетов, хотя кота там не было. Он удалил тень от несуществующей лампы.



Сборка прошла с первого раза. На сто процентов, зелёной полосой, без единого «wait».



Он откинулся в кресле. За спиной дышал тёплый вентилятор. Кухня пахла кофе. Митя спал на диване, укрытый пледом, и во сне улыбался — потому что во сне дети видят то, чего видят, и это не всегда страшное.



Антон встал. Подошёл к окну.



Фонарь во дворе горел. Тени не было. Кот Барсик не сидел на газоне. Барсик сидел у себя дома, у хозяйки, в третий подъезд, и его хозяева гладили его и говорили, что он какой-то тихий стал, спокоен, не прыгает.



Антон отошёл от окна. Открыл текстовый файл. Написал:



«Если ты это читаешь — ты сделал всё правильно. Игра закрыта. Дверь заперта. Стоящий не дойдёт».



Подумал. Добавил строку:



«Но если ты когда-нибудь слышишь, как кто-то в темноте делает шаг, — не выключай фонарь. Пока не пройдёшь мимо».



Сохранил файл. Назвал его «readme.txt».



## Эпилог



Через год вышла «Полночь на Ветряной, версия 2». Игра не стала лучше — она стала другой. В ней не было Стоящего. В ней был обычный сторож, который обходил обычный микрорайон, и обычные фонари, и обычные тени, которые вели себя как тени и не были ничем больше.



Игрокам понравилось. «Атмосферно», писали в отзывах. «Мурашки». «Классика жанра». «Где монстр, который преследует? Почему он не идёт за мной?»



Антон читал эти отзывы и не отвечал.



Митя вырос. Ему стало одиннадцать, потом двенадцать. Он больше не играл в хорроры. Он играл в стратегии, в гонки, в головоломки. Он не любил, когда в играх было темно. Он всегда спрашивал:



— А тут можно не гасить свет?



— Можно, — отвечал Антон. — Тут всегда можно не гасить.



А по ночам, когда он не спал, Антон иногда слышал — или не слышал, он так и не понял до конца, — как в коридоре, в конце, за закрытой дверью, кто-то делает шаг.



Один шаг.



Потом второй.



Потом тишина.



И тогда Антон вставал, открывал дверь коридора, включал свет — весь, целиком, до самого конца — и стоял в дверях, пока не убеждался, что там никого нет.



Потом возвращался в кровать и думал: «Пока не пройдёшь мимо».



Потом засыпал.



Утром — вставал. Делал кофе. Открывал ноутбук. Проверял, на месте ли readme.txt.



На месте.



---



---



# ПАТЧ 0.9

### Развёрнутая редакция. Часть первая (главы 1–4)



---



## Глава 1. Ночная сборка



Сборка падала на сорока втором проценте.



Антон знал это число так, как знают собственное давление или последний коэффициент, который вернул неудачный тест: сорок два. Каждый вечер, в одно и то же время — часа в два ночи, когда город за окном переставал гудеть и оставались только редкие машины на Ветряной, — он нажимал Build и смотрел, как полоска бежит по экрану. Десять. Двадцать. Тридцать. Шейдер освещения, который он переписывал уже пятый раз, компилировался спокойно, без вспышек, и на этом месте, где в прошлые ночи расцветала красная ошибка с трассировкой на семьдесят строк, Антон всегда позволял себе выдохнуть. Тридцать пять. Сорок. Сорок один.



Сорок два — и всё.



Строка падения каждый раз была разной. Понедельник: `EXC_ACCESS_VIOLATION in light_pass.shader:214`. Вторник: то же самое, но в строке двести пятнадцать, хотя в файле было ровно двести четырнадцать строк. Среда: падала не сборка даже, а менеджер ассетов, который начинал читать сцену и на слове «window» выдавал нулевой указатель. Антон чинил одно — ломалось другое. Он чинил другое — ломалось первое. Как будто в проекте жил кто-то, кто тихо, беззлобно, из чистого любопытства переставлял мебель, когда Антон выходил из комнаты.



Он работал на кухне. Кухня у него была большая, неудобная, доставшаяся от бабушки, с широким подоконником, на котором стоял второй монитор. Из-за подоконника доносился шум двора — днём дети, к вечеру голуби, глубокой ночью только ветер, который в этом районе, у самой окружной, дул всегда и со всех сторон сразу. Ветряная улица оправдывала своё имя. Антон когда-то, в начале, думал назвать игру «Тихий двор», потом «Полночь на Ветряной» — и название легло на проект, как ключ на замок.



Кофе он заваривал третий за вечер. Третий всегда был хуже первых двух — отстоявшийся, с горчинкой, — и он пил его не потому, что хотел, а потому, что ритуал держал форму: кружка, грелка, клавиатура, сорок два процента.



— Пап.



Митя вынырнул из комнаты в пижаме с планетами — Pluto был любимый, он всегда спал на боку, где Плутон, потому что Плутон «упразднили, а он всё равно есть». Пижаму ему шила мама, Лена, два года назад, ещё до отъезда. Пижама была мала в плечах и огромна в длину, и Митя отказывался менять её на новую, потому что планеты сшила мама.



— Опять? — спросил он, не дожидаясь ответа. Он уже умел читать лицо отца в сумраке кухни, по одной лишь позе: если Антон сидел ровно — была ошибка, которую можно чинить; если сидел, откинувшись в кресле, — ошибка, которую нельзя было даже найти.



— Опять. Сорок два — и всё.



Митя влез на соседний стул, подтянул колени, положил на них подбородок. Так они часто сидели вдвоём перед монитором — отец и сын на ночной смене, которую никто им не назначал.



— Она падает на одном и том же? То есть всегда на сорока двух?



— Всегда. С понедельника.



— А код менялся?



— Код не менялся с вечера. — Антон постучал пальцем по столу. Он стучал, когда думал, и Митя знал этот стук так же, как знал громкость шагов мамы на лестнице. — Интересно, да? Ничего не меняю — а падает каждый раз ровно здесь. Как будто не в коде дело.



— А в чём?



— В этом и вопрос.



Митя помолчал. Потом сказал то, что говорил каждую ночь на этом месте:



— Дай угадаю. Ноль-девять?



— Патч ноль-девять, — подтвердил Антон. — Последний перед демо.



Среда имела значение. В среду к ним должен был прийти человек с издательской студии, маленькая команда, три человека, — Антон познакомился с одним из них на выставке инди-игр осенью, они полчаса стояли у пустого стенда с распечатанными скриншотами, и тот сказал: «Если сделаете демо — покажете». Антон полгода собирал эти скриншоты по ночам. Демо было шансом. Демо было тем, что он держал в голове каждый раз, когда посреди дня откладывал резюме и не отправлял его.



— А если поставить спать и посмотреть утром? — предложил Митя. Это тоже был ритуал: Митя предлагал спать, Антон говорил, что нельзя, и они оба знали, что так будет до конца.



— Если поставить спать, я утром найду ошибку и мы завтра не покажем демо.



— Мы не покажем. Ты один покажешь.



— Я один — это мы. Ты же тестировщик.



Митя важничал от этого слова. «Геймдизайнер и тестировщик» — так значилось в файле `credits.txt`, который Антон завёл в первый месяц, и Митя однажды нашёл его, открыл и сказал: «Напиши ещё, что я придумал Стоящего», — а Антон не написал, потому что Стоящего тогда ещё не было.



Терминал выдал строку — и Антон перестал дышать.



Он не сразу понял, что случилось. Просто по телу прошла волна — холодная, от затылка вниз, как бывает, когда резко понимаешь: «меня зовут» — и оборачиваешься в пустую комнату. Полоска сборки застыла. В терминале, в конце всего, там, где обычно печатался номер билда и время, было:



```

build 0.9.0 :: ok

wait

```



«wait» — маленькими буквами, в новой строке, само по себе.



Антон перечитал. Митя перечитал вслух, по складам, водя пальцем по воздуху перед экраном:



— «Вэ-эй-ти». Wait. Ждать?



— Сборка, что ли, ждёт, — пробормотал Антон.



Он потянулся к клавиатуре — и не нажал ничего. Рука зависла над клавишами, как зависает над дверным звонком, когда не уверен, что за дверью. Прогресс-бар, застывший на сорока двух, дрогнул. Пополз. Пятьдесят. Шестьдесят. Строка «wait» исчезла — не мигнув, не прокрутившись, просто исчезла так, будто её никогда и не печатали. Сборка дошла до конца. Зелёная полоска закрылась. На экране засветилось: «Полночь на Ветряной — сборка 0.9.0 готова».



— Сработало! — Митя подпрыгнул вместе со стулом.



— Сработало.



Антон открыл лог сборки. Полный, текстовый, как он привык, — с таймстампами, со всеми этапами. Лог начинался ровно там, где положено: время запуска, версия движка, перечисление ассетов. Ни единого слова «wait». Ни единой пустой строки в конце — лог обрывался на утверждении об успешной сборке, как и положено обрываться всем нормальным логам на свете.



То есть «wait» не было в логе. Но Антон видел его. Видел, как и Митя.



— Пап, — сказал Митя тихо. — А что такое «wait»? Это когда она ждала?



— Да, — сказал Антон. — Это когда она ждала.



Он не сказал сыну главного. Что за двадцать минут до этого, пока шла сборка, он встал, чтобы налить себе воды, и вернувшись на полпути остановился — потому что на кухне, у двери в коридор, ему показалось, что кто-то стоит. Не силуэт, не движение — ничего такого. Просто в коридоре, который он пересекал дважды за вечер, было ощущение занятого пространства, как бывает в тёмной комнате, когда знаешь: здесь стоит гладильная доска, здесь вешалка, а здесь ничего не должно быть — и что-то есть.




Конец ознакомительного фрагмента.


Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию (https://www.litres.ru/book/viktoriya-andreanova/patch-09-74766608/) на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.


