
Полная версия
Мир без ошибок

Екатерина Муравьева
Мир без ошибок
Глава 1
Тишина.
Не отсутствие звука — нет. Тишина была здесь самостоятельной материей: густой, вязкой, почти осязаемой. Она лежала на коже холодной плёнкой, давила на барабанные перепонки и заставляла слышать то, что обычно растворяется в шуме жизни: биение собственного сердца.
Тук.
Пауза.
Тук.
Слишком медленно? Слишком громко? Я не знала. Я вообще ничего не знала, кроме того, что этот звук принадлежал мне. Или, по крайней мере, исходил изнутри моего тела.
Я попыталась вдохнуть — и холод вцепился в грудь.
Воздух здесь казался мёртвым. Он не пах пылью, металлом, сыростью или больницей. Он почти не пах ничем, и от этого становилось страшнее: будто окружающее пространство было не пустым помещением, а отсутствием помещения как такового. Пальцы дрожали. Я сжала их, пытаясь ухватиться хотя бы за собственные ладони, за ткань одежды, за что-нибудь материальное.
Опоры не было.
Я медленно провела ладонями по себе, будто проверяла инвентаризацию собственного тела: плечи, рёбра, живот, колени. Ткань под пальцами была прохладной и совершенно незнакомой. Никакой вещи, никакой застёжки или шва, за который могла бы зацепиться память.
Я вытянула одну ногу вперёд, осторожно перенесла вес, потом другую. Движение получилось неуверенным. В темноте даже простой шаг требовал доверия к поверхности, которой я не видела, и от этого хотелось замереть снова.
— Где… я?.. — выдохнула я.
Голос прозвучал хрипло, неловко, словно я воспользовалась чужим инструментом и не знала, как правильно держать его в руках.
Я замерла.
— Кто-нибудь?.. Эй! — Я прижала губы друг к другу и выдохнула через нос.
Ничего.
Ни эха. Ни отражения. Даже собственный крик не захотел ко мне возвращаться.
Я распахнула глаза — и не заметила разницы. Передо мной оставалась абсолютная чернота. Несколько секунд я просто смотрела в неё, пока не поняла, что начинаю паниковать. Дыхание участилось, сердце забилось чаще, а разум, не имея фактов, стал торопливо производить худшие версии происходящего.
Я ослепла.
Меня похоронили.
Я умерла.
Последняя мысль задержалась дольше остальных.
— Нет, — сказала я вслух, слишком резко. — Нет. Если я могу думать, значит…
Я не закончила.
«Значит что?»
Собственный вопрос прозвучал внутри неожиданно враждебно.
Я попыталась вспомнить хотя бы одну вещь, которая могла бы доказать, что до этой тьмы существовало что-то ещё. Имя. Комнату. Лицо матери. Шум машин под окном. Любимую песню. Пароль от телефона. Чашку, которую я брала по утрам. Хоть какую-нибудь нелепую мелочь, потому что именно мелочи почему-то казались самым убедительным доказательством жизни.
Ничего.
Не туман. Не смазанные картинки. Не ощущение «вертится на языке».
Пустота.
Внутри сознания словно стояла аккуратная белая стена, а на ней — сухая системная строка:
NullReferenceException. — ошибка, возникающая, когда программа пытается обратиться к объекту, которого фактически нет: ссылка имеет значение null («пусто»).
Я нервно рассмеялась.
Смех тут же оборвался.
— Отлично. Я не помню, кто я, зато помню ошибки в коде. — Я коротко усмехнулась и тут же стёрла улыбку с лица.
Эта фраза должна была меня успокоить. Вместо этого она испугала сильнее.
Почему именно код?
Почему я понимала, что означает эта ошибка, но не могла вспомнить собственного имени?
Я зажмурилась, хотя закрывать глаза в абсолютной темноте было бессмысленно.
Несколько раз я глубоко вдохнула и медленно выдохнула, считая удары сердца. Счёт тоже оказался знакомым навыком — ещё одна вещь, которая принадлежала мне без объяснения происхождения. На пятом вдохе дрожь в пальцах стала слабее.
Я потёрла ладони друг о друга. Сухой шорох показался почти оглушительным. Значит, звук всё-таки существовал. Просто пространство не возвращало его мне.
— Ладно. По порядку, — прошептала я. — Есть тело. Есть сознание. Есть… память о каких-то знаниях. Значит, я не пустая.
«Тогда кто ты?»
Я стиснула зубы.
— Потом. — Я вытянула пальцы перед собой и медленно согнула их.
Это «потом» прозвучало как договор с самой собой. Нечестный, но необходимый.
Вдалеке что-то дрогнуло.
Сначала я решила, что это зрительная галлюцинация. Затем увидела снова: слабое белое мерцание, тонкая царапина света в черноте. За ней появилась вторая, третья. Символы возникали прямо в пространстве — холодные, полупрозрачные, плывущие перед лицом, словно обрывки забытого кода.
Я потянулась к ним.
Мышцы отозвались болью, будто я не двигалась неделями. Каждый сустав казался чужим, плохо подключённым к нервной системе. Пальцы прошли сквозь одну цепочку знаков — и та рассыпалась на мириады крошечных пикселей.
На долю секунды их свет подсветил меня.
Бледная ладонь.
Край рукава.
Прядь волос у щеки.
Я жадно посмотрела вниз, но вспышка уже погасла.
— Ещё раз. — Я потерла шею ладонью, пытаясь сбросить напряжение.
Я коснулась другой строки. Она тоже рассыпалась.
— Давай. Ну же. — Я переместила вес на другую ногу и снова замерла.
Я хватала светящиеся фрагменты один за другим, словно утопающий, который увидел над водой не спасательный круг, а набор символов и всё равно решил, что это шанс.
System.Object. — базовый тип объектов в платформе .NET; от него прямо или косвенно происходят остальные классы объектов.
Строка замерла прямо передо мной.
Почему-то она показалась знакомой настолько, что в груди что-то болезненно дёрнулось.
Я обхватила её ладонью.
На этот раз пальцы не прошли насквозь.
Под кожей пробежало статическое электричество.
— Нашла тебя. — Я опустила взгляд на свои ладони, словно они должны были подтвердить сказанное.
Я сама не понимала, к кому обращаюсь — к строке, к миру или к той части себя, которая всё ещё умела распознавать структуру среди хаоса.
Пространство лопнуло.
Меня рвануло вперёд.
Чернота свернулась в точку, символы вытянулись длинными белыми нитями, а желудок словно остался где-то позади. Я попыталась закричать, но воздух вырвало из лёгких. На миг возникло чувство падения — то самое, от которого просыпаются за секунду до удара.
Только я не проснулась.
Я действительно ударилась.
Ладони обожгло болью. Колени врезались во что-то влажное и мягкое. Я судорожно вдохнула — и впервые почувствовала запах.
Земля.
Трава.
Озон после дождя.
Воздух.
Настоящий воздух.
Я перевернулась на спину и рассмеялась — громко, почти истерично. Потом смех сам собой превратился в короткий всхлип.
— Больно, — сказала я, глядя куда-то вверх. — Господи, как же хорошо, что больно.
Надо мной раскинулось небо невозможного цвета: индиго растворялось в фиолетовом, по самому горизонту тлела тонкая розоватая полоса. Ни солнца, ни луны — и всё же было светло.
Я осторожно села.
Под ладонями пружинила трава. На стеблях висели капли росы. Я провела по ним пальцами и долго смотрела, как влага собирается на коже.
Настоящая.
Или идеально притворяющаяся настоящей.
Вокруг простиралось поле.
Я поднялась не сразу. Сначала встала на одно колено, стряхнула с ладоней тёмные крупинки земли, провела ими по мокрым от росы брюкам. Колени ныли после падения. Эта мелкая, понятная боль неожиданно успокаивала сильнее любых рассуждений.
Когда я наконец выпрямилась, то несколько секунд просто крутила головой, пытаясь найти хоть одно нарушение идеальной линии пространства. Взгляд скользил по горизонту и каждый раз возвращался ни с чем.
Слишком ровное.
Слишком чистое.
Слишком правильное.
Горизонт был безупречной линией, будто его провели инструментом в графическом редакторе. Ни дерева. Ни камня. Ни дороги. Ни случайного бугорка. Даже ветер отсутствовал.
Сердце снова ускорилось.
Я поднялась.
— Эй! — крикнула я. — Здесь есть кто-нибудь?
Трава даже не шелохнулась.
— Очень смешно! Я уже поняла, что у вас проблемы с гостеприимством! — Я провела пальцами по краю рукава и задержала их там.
Молчание.
Я повернулась вокруг своей оси.
— Хорошо. Тогда я сама вас найду. — Я подняла глаза к небу и сразу вернула их к тому, что было передо мной.
И побежала.
Не потому, что знала направление. Просто неподвижность внезапно стала невыносимой. Пока я двигалась, мне казалось, что я делаю хоть что-то. Что я не жертва среды. Что у меня есть выбор, пусть даже между одинаковыми сторонами света.
Трава хлестала по ногам. Кеды проваливались во влажную землю. Через несколько минут заболели лёгкие, потом бока, потом всё тело. Я продолжала бежать.
Горизонт не приближался.
Поле не менялось.
Ни одной случайности.
Ни одного признака чужого присутствия.
Наконец я остановилась и согнулась, уперев руки в колени.
— Да что с тобой не так?.. — прохрипела я миру.
Мир не ответил.
И тогда мысль, от которой я всё это время убегала буквально, догнала меня.
«А что, если я умерла?»
Я медленно опустилась в траву.
Если это смерть, она была странно технологичной.
Если сон — слишком убедительной.
Если кома — откуда я знала, что такое кома?
Если симуляция…
Я подняла голову.
— Если это симуляция, — проговорила я медленно, — у неё должен быть интерфейс.
Слова прозвучали абсурдно. Но вместе с ними пришло ощущение узнавания — не воспоминание, а мышечная уверенность. Как когда пальцы сами знают сочетание клавиш, хотя ты не можешь объяснить, когда его выучила.
Я подняла руку.
Ничего.
— Ну давай. — Я ткнула носком в землю и отступила, будто обозначая себе границу.
Я представила окно.
Не экран. Не телефон. Не компьютер. Скорее доступ. Слой под поверхностью реальности.
Воздух перед пальцами дрогнул.
Полупрозрачная панель развернулась с тихим электронным шелестом.
Я машинально отдёрнула руку, а панель осталась висеть там, где появилась. Сделала шаг влево — она чуть повернулась ко мне. Шаг вправо — снова последовала за взглядом. Я обошла её по дуге, как осторожно обходят незнакомое животное.
Тогда я протянула палец и провела им вдоль края. Поверхность не ощущалась твёрдой, но кожа уловила едва заметное покалывание, словно от работающего экрана. От этого интерфейс стал ещё реальнее.
Я замерла.
— Нет… — Я вытянула пальцы перед собой и медленно согнула их.
На ней вспыхнули строки.
World.Root — корневой узел мира: самая верхняя точка структуры, внутри которой находятся остальные элементы виртуальной реальности.
Environment — раздел параметров окружающей среды: воздуха, освещения, погоды и других общих условий мира.
ObjectHierarchy — иерархия объектов: дерево, показывающее, какие объекты существуют в мире и как они связаны друг с другом.
Physics — раздел физических правил мира: гравитации, столкновений, движения, массы и других физических параметров.
BiotaInitialization — модуль запуска и создания живых организмов в мире.
Я почувствовала, как страх отступает.
Не исчезает — меняет форму.
Он превращался в знакомую, почти приятную собранность.
Вот оно.
Структура.
Правила.
Параметры.
То, что можно понять.
То, что можно исправить.
— Теперь поговорим, — прошептала я.
И впервые с момента пробуждения мне стало легче.
Не потому, что я узнала, где нахожусь.
А потому, что обнаружила кнопку, которую можно нажать.
Глава 2
Первым объектом оказался валун.
Я заметила его не сразу. Прошла несколько десятков шагов, всё ещё поглядывая на полупрозрачное меню у запястья, и только потом серое пятно на ровной зелени заставило меня остановиться. Я прищурилась, прикрыла глаза ладонью от ровного рассеянного света и пошла к нему.
Чем ближе я подходила, тем сильнее валун казался нарочно поставленным в центре пустого полигона. Я обошла его кругом, носком кеда сдвинула комок земли у основания и даже толкнула камень плечом. Он не шевельнулся.
Он стоял метрах в тридцати от меня — единственное нарушение стерильной ровности поля. Серый, круглый, почти демонстрационный. Настолько удобный для эксперимента, что я невольно прищурилась.
— Ты тут специально, да? — Я повела плечом, сбрасывая неприятное напряжение.
Валун сохранил достоинство и не ответил.
Я вызвала ObjectHierarchy. Перед глазами развернулось древо свойств:
Пояснение: ObjectHierarchy — иерархия объектов, то есть дерево всех объектов мира и их связей.
Я подняла панель выше, чтобы валун оставался виден сквозь неё, и несколько раз переводила взгляд с реального камня на его сухое описание. Странно было видеть рядом шершавую поверхность, мох в микротрещинах — и строчки, которые утверждали, что всё это всего лишь набор значений.
Я коснулась Position. Над камнем вспыхнули три тонкие оси. Повернула Rotation — вокруг него появились дуги. От неожиданной понятности этого языка у меня вырвался короткий смешок.
Пояснение: Position — координаты положения объекта в пространстве. Rotation — поворот и ориентация объекта.
Position. — положение объекта в пространстве по координатам.
Rotation. — поворот и ориентация объекта в пространстве.
Scale. — масштаб объекта, то есть его размер относительно исходного.
Mass. — масса объекта — параметр, влияющий на инерцию, столкновения и действие сил.
Material. — материал объекта — набор свойств его поверхности и физического поведения.
Пальцы двигались быстрее мысли. Я не вспоминала команды — я их знала. Это знание сидело глубже биографии, глубже имени, словно кто-то удалил из меня человека, но оставил профессию.
Scale: 1. — исходный масштаб объекта: размер равен базовому, без увеличения или уменьшения.
Я заменила единицу на пять.
Цифра мигнула. Я отступила на два шага, потом ещё на один, оценив расстояние до камня. Внутренний голос тут же подсказал, что пятикратного увеличения может оказаться достаточно, чтобы валун занял половину обзора. Я всё равно не вернула единицу.
Ладонь с интерфейсом была поднята перед лицом. Большой палец упирался в согнутый указательный — привычный жест, будто я физически удерживала себя от поспешного нажатия.
Палец завис над Apply.
Пояснение: Apply — команда «применить» введённые изменения.
Внутри шевельнулась осторожность.
«А если сломаешь?»
— Тогда исправлю. — Я задержала руку в воздухе, прежде чем снова опустить.
Я нажала.
Валун дрогнул.
Земля под ногами низко загудела. Камень начал расти, будто его надували изнутри. Серое пятно превратилось в громадную скалу, тень от которой накрыла меня целиком.
Я отшатнулась — и тут же рассмеялась.
— Работает. — Я чуть отступила, оставляя самой себе пространство подумать.
Подбежала к скале и коснулась поверхности. Холодная. Шершавая. В мелких трещинах застревали песчинки, которых секунду назад не существовало.
— Работает… — Я прижала ладонь к груди, чувствуя под ней слишком громкое сердце.
Я медленно пошла вдоль выросшей скалы. Теперь приходилось задирать голову, чтобы увидеть верх. Пальцы скользили по камню, цепляясь за выступы, и в каждом сантиметре поверхности находились детали, которых я не проектировала вручную: прожилки, крошечные сколы, разница температур между тенью и открытым воздухом.
На другой стороне я остановилась и оглянулась на собственные следы в траве. Ещё минуту назад здесь был валун по колено. Теперь рядом со мной стояла вещь, способная изменить пейзаж. И всё это произошло из-за одной цифры.
Я произнесла это тише.
Мир подчинился мне без возражений.
Это должно было насторожить.
Но вместо тревоги я почувствовала восторг.
Через несколько минут над полем уже висел белый куб.
Куб появился не мгновенно. Сначала я вытянула из пустоты плоскость, потянула за светящиеся маркеры по краям, сомкнула грани и несколько раз проверила размер. Первая версия вышла перекошенной, и я раздражённо вернула вершину на место. Вторая оказалась слишком маленькой. Третью я оставила.
Я прошла под ним, подняв голову. Белая поверхность была настолько ровной, что взгляд не находил за что зацепиться. Для проверки я подпрыгнула и хлопнула ладонью по нижней грани. Куб коротко дрогнул и снова замер.
velocity = new Vector3(0, 0, 5); — команда задаёт объекту скорость как трёхмерный вектор: 0 по первой оси, 0 по второй и 5 по третьей, поэтому объект начинает двигаться в одном направлении.
rigidbody.useGravity = false; — команда отключает действие гравитации на физическое тело объекта, поэтому оно не падает вниз.
— Полетели. — Я подняла глаза к небу и сразу вернула их к тому, что было передо мной.
Куб сорвался с места с резким свистом.
Я пригнулась скорее от неожиданности, чем от необходимости, и проводила его взглядом. Куб пролетел над травой, не меняя высоты ни на миллиметр. Через несколько десятков метров я резко развернула кисть, остановила его и потянула обратно.
Он послушно вернулся. Я отошла в сторону, освобождая предполагаемую траекторию столкновения, и вызвала второй объект.
Я создала сферу и отправила навстречу. Столкновение прозвучало сухим щелчком. Сфера отскочила по идеальной дуге, ровно такой, какой должна была быть согласно заданным коэффициентам.
— Ещё. — Я прикусила внутреннюю сторону щеки, удерживая следующую реплику.
Я поменяла упругость.
Чтобы не стоять на месте, я прошла несколько шагов по кругу, следя за бегущими цифрами. Сфера ещё покачивалась после удара. Я поймала её ладонью интерфейса, уменьшила коэффициент, отпустила и только потом вновь направила к кубу.
Щёлк.
— Ещё. — Я потёрла ладони друг о друга, занимая дрожащие пальцы.
Увеличила массу.
На этот раз я инстинктивно отступила дальше. Параметр массы изменился, а внешне сфера осталась прежней, и именно это показалось особенно неправильным: маленький гладкий шар вдруг обещал удар, которого его размер не выдавал.
Грохот.
— Ещё. — Я отвела взгляд в сторону и через секунду вернула его.
Через четверть часа вокруг меня метались примитивы, сталкивались, зависали, ускорялись, теряли гравитацию. Я бегала между ними, смеялась, ругалась, исправляла значения на лету. Впервые пустое поле стало похоже не на тюрьму, а на лабораторию.
Пояснение: примитивы — простые базовые 3D-формы — например кубы, сферы и другие элементарные объекты, из которых строят более сложные сцены.
Я уже успела сбить дыхание. Волосы липли ко лбу, на ладонях осталась земля после двух падений, а одна белая сфера зависла высоко над головой потому, что я забыла вернуть ей гравитацию. Мне приходилось вскидывать руки, разворачивать окна и одновременно уворачиваться от собственных экспериментов.
Иногда я намеренно делала паузу, чтобы оглядеть беспорядок. Потом замечала очередную неправильную траекторию — и снова срывалась с места, будто мир мог убежать от меня, если я не успею поправить число.
А лаборатория — это место, где ошибкам дают имена и параметры.
Я поняла это не сразу.
Когда куб в третий раз прошёл слишком близко от головы, я резко остановила его в воздухе.
Он замер в нескольких сантиметрах от лица.
Белая грань отражала моё размытое лицо.
— Ты могла меня убить, — сказала я кубу.
Пауза.
— Хотя… не факт, что это вообще возможно. — Я оглянулась через плечо, хотя за спиной была та же пустота.
Я коснулась поверхности и удалила объект.
Он исчез без следа.
В груди неприятно кольнуло.
Слишком легко.
Создать. Исправить. Удалить.
Я быстро открыла следующий раздел.
Перед тем как продолжить, я всё-таки отошла от места, где исчез куб. Несколько раз провела ладонью по воздуху, хотя знала, что ничего там не осталось. Пустота не сохраняла ни пыли, ни следа удаления. От этого стало неуютно, и я почти демонстративно отвернулась.
FluidDynamics. — раздел моделирования движения жидкостей: течения, давления, капель и поведения воды.
— Вода, — сказала я. — Вода не должна быть такой послушной.
Прямо в воздухе возникла сфера человеческого роста. Внутри неё текли медленные прозрачные вихри. Я осторожно прикоснулась — поверхность прогнулась, обхватила пальцы прохладой и вернулась на место.
Я обошла сферу сбоку. За её толщей поле изгибалось, словно через огромную линзу; мои ноги становились короткими, горизонт выгибался дугой. Я присела, посмотрела сквозь воду снизу вверх и на секунду увидела собственное лицо — растянутое, чужое.
Потом сунула ладонь глубже. Холод обхватил запястье. Я пошевелила пальцами внутри и наблюдала, как вокруг них расходятся медленные волны. Только после этого вернулась к параметрам.
— Привет. — Я переступила с ноги на ногу, не находя удобной позы.
Я увеличила локальную гравитацию. Вода сжалась, стала плотной, почти стеклянной.
— А теперь без неё. — Я переместила вес на другую ногу и снова замерла.
Gravity: 0. — значение гравитации установлено в ноль: сила притяжения в выбранной области отключена.
Сфера взорвалась.
Тысячи капель разлетелись вокруг, и я инстинктивно вскинула руки.
— Стой! — Я сжала пальцы в кулак и тут же разжала.
Капли замерли.
Я ещё несколько секунд держала руки перед лицом, ожидая, что приказ сорвётся. Ничего не двигалось. Одна крупная капля зависла у самого кончика моего носа. Я осторожно отступила, и она осталась на месте.
Я прошла между каплями. Приходилось поворачивать плечи и пригибаться, хотя я могла просто удалить их. Мне хотелось оказаться внутри этого невозможного дождя и рассмотреть его со всех сторон.
Я медленно повернулась.
Они висели повсюду, отражая фиолетовое небо. В каждой крошечной линзе было по маленькому миру — перевёрнутому, безупречному.
Красиво.
Я собрала их в спираль. Потом в куб. Потом в длинную прозрачную ленту, которая обвилась вокруг меня.
Лента двигалась следом за моими руками. Я сделала шаг, другой, повернулась вокруг себя, и вода послушно повторила движение, не касаясь одежды. Я специально ускорилась, почти пробежала несколько метров — форма не распалась.
Остановившись, я тяжело выдохнула и посмотрела на идеальный прозрачный виток у плеча. Даже вода не заставляла меня догонять её. Она ждала.
— Слишком правильно, — пробормотала я.
Стоило мне подумать о форме — вода принимала её.
Стоило захотеть остановки — всё останавливалось.
Я резко разжала пальцы, позволив воде рухнуть на землю.
Брызги разлетелись по траве.
Несколько секунд я специально ничего не делала.
Капли стекали по стеблям сами.
И почему-то именно это понравилось мне больше всего.
Я открыла AirFlow.
Пояснение: AirFlow — раздел управления потоками воздуха и ветром.
— Воздух — это не объект, — сказала я. — Попробуй-ка заставить среду вести себя прилично.
Появились параметры давления, температуры, влажности, направлений потоков.
Я раскрыла ладонь и по очереди касалась значений, будто перебирала невидимые струны. Сначала изменила одно направление — трава в узкой полосе легла набок. Вернула обратно. Уменьшила давление — ничего заметного. Подняла влажность — воздух стал чуть тяжелее и холоднее на коже.
Мне понравилось, что среду нельзя было схватить взглядом целиком. Приходилось смотреть на последствия: на траву, волосы, движение росы, собственное дыхание.
Я добавила слабую циркуляцию.
По полю прошёл первый ветер.
Он тронул волосы, прижал ткань к плечам и принёс запах мокрой травы.
Я застыла.
Простое ощущение — ветер на лице — вдруг ударило сильнее любого визуального эффекта.
Где-то внутри всплыло не воспоминание, а его тень: открытое окно, прохладный вечер, волосы лезут в рот, кто-то недовольно смеётся…
Картинка исчезла прежде, чем я успела её схватить.
— Подожди. — Я качнула головой и шумно выпустила воздух.
Ветер продолжал дуть.
— Кто смеялся? — Я опустила взгляд на свои ладони, словно они должны были подтвердить сказанное.
Тишина.
Я судорожно вызвала интерфейс памяти — если такой вообще существовал. Search. UserData. PersonalHistory. Identity.
Пояснение: Search — поиск по данным системы. UserData — пользовательские данные. PersonalHistory — личная история и сведения о прошлом. Identity — данные, определяющие личность и идентичность.
Access denied. — система отказала в доступе к закрытому разделу или данным.
Я замерла.
Попробовала снова.
Access denied. — система отказала в доступе к закрытому разделу или данным.

