Глава 1. Белка, которая стала котом
Алекс вышел из автобуса и ошарашенно замедлил шаг на тротуаре. Он обнаружил себя среди толпы людей, беспорядочно двигающихся вокруг него. С тяжелыми сумками, спешащие мимо, они быстро рассеивались, разбредаясь по своим делам - все это создавало картину суеты и беспорядка. Город струился вокруг него своими яркими огнями, сверкающими вывесками и высокими зданиями. Звонкий треск автомобильных сигналов и гомон толпы создавали ощущение погружения в симфонию городской суеты. Маленький родной городок, где каждый друг друга знал, сейчас казался таким далеким и уютным. Здесь незнакомые люди не обращали внимания друг на друга, все были в собственных мыслях или в поиске следующей точки назначения.
Однако, Алекс чувствовал, что Большой город может предложить ему нечто большее. Его диплом по программированию и уверенная учеба в университете давали надежду на карьерный рост и открытие новых возможностей. Он не сомневался, что готов преодолеть провинциальные страхи и стать частью этого муравейника, чтобы достичь своих целей.
Алекс был молодым человеком с каштановыми волосами в возрасте около 30 лет с ледяными голубыми глазами, говорящими о решительности и уверенности в себе. На его лице всегда сияла дружественная улыбка, которую запоминали даже те, кто ему встречался лишь раз. Он не любил слишком выделяться, предпочитая носить темные оттенки одежды, но никогда не расставался со своими очками, которые придавали его облику образ ученого или лектора. Алекс не мог пропустить шанс попробовать себя в одной из лучших IT-компаний на Западном побережье, которая занималась разработкой компьютерных игр. Поначалу его впечатлили масштабы компании. Она находилась на нескольких этажах в высотном здании, и казалось, что там работает целая армия людей. Алекс знал, что эта работа будет сильно отличаться от всех его прошлых занятий, но настоящие программисты должны были быть готовы ко всему. Он быстро погрузился в свою работу, начал изучать новые языки программирования, анализировать код и почти сразу прослыл трудоголиком, потому что слишком увлекался и легко мог просидеть над решением задачи несколько дней.
В офисе царила уютная творческая атмосфера, с вечно звенящими телефонами и яркими коллажами на стенах. Коллеги оказались веселыми ребятами, так что Алекс быстро влился в коллектив. За соседним рабочим столом сидел Джон – слегка неуклюжий, вечно влипающий в неприятности зеленоглазый парень с черными, как смоль, волосами. Алекс и Джон нашли общую страсть – рыбалку и на этой почве быстро подружились. Раз в пару недель они ездили за город на природу, где могли не только рыбачить, но и обсуждать все подряд, от девушек, которые им нравятся, до новых космических технологий.
Однажды поздно вечером, когда все его коллеги давно уже разошлись, Алекс, погруженный в изучение рабочего отчета, вдруг услышал шум. Он быстро поднял голову, и увидел маленького колючего ежа, увлеченно грызущего стянутый откуда-то кабель. Судя по маркировке, ежик разворошил коробку с комплектующими для соседнего офиса. Алекс припомнил, что у ежа забавное имя – Камикадзе. Сотрудники рассказывали, что несколько лет назад кто-то подарил его начальнику и с тех пор колючий проказник жил здесь, став негласным символом компании. Ежа быстро полюбили, поили молоком и закрывали глаза на его проделки. А их было немало, то чью-нибудь клавиатуру на кнопки разберет, то нужные бумаги по всему зданию раскидает.
«Ну и зачем?» - сказал Алекс, погладив ежика по спинке. Камикадзе яростно зафырчал. Программист попытался осторожно вытащить кабель из зубов колючего негодника, но тот стал неистово пищать и защищать свою "добычу". Пришлось постараться, чтобы завладеть трофеем, но через некоторое время все получилось. Смеясь, программист отложил провод в сторону и заметил, что за окном уже стемнело. Пора домой, решил он. Он поднял Камикадзе и осмотрел его. Ежик был в порядке, только возмущенно фыркал, давая понять, что хочет обратно свою игрушку. Алекс улыбнулся и принялся собираться. Он оглядел свой офис и понял, Алекс осознал, что благодаря своим офисным друзьям - ежу и Джону, он никогда не чувствовал себя одиноким в таком огромном городе.
«Спасибо, Камикадзе», - сказал он, и осторожно посадив ежика в коробку с тканью. Камикадзе закрыл глаза и свернулся клубочком, укладываясь спать.
Выходя из офиса, Алекс увидел свет, горящий в соседнем кабинете, и мимоходом заглянул в приоткрытую дверь. За столом сидел начальник, который разложил огромную карту мира и делал какие-то пометки, бормоча: "Да не может быть этого…". Алекс сам не заметил, как ноги принесли его посмотреть поближе. Вся карта была усыпана стикерами с непонятными обозначениями, но континенты на ней выглядели не так как обычно. Программист припомнил, что это карта игры-симулятора, которую они сейчас разрабатывают.
«В чем дело, шеф?» - спросил Алекс.
«А, Алекс, рад видеть тебя! Присаживайся, давай поговорим», - сказал начальник, показывая на стул.
«Есть новости? Что-то не так?» - переспросил Алекс, чувствуя, что что-то не в порядке.
«Дело в том, что мы обнаружили странное поведение некоторых NPC в игре, которую мы тестируем. Они начали делать вещи, которые им не прописывали, и в локациях появляются здания, которых нет в игре. Это все не поддаётся логике, и мы не можем понять, что происходит. Один из наших программистов попробовал изучить код, но не смог найти решение», - объяснил начальник.
«Понимаю, это звучит очень странно», - проговорил программист, думая, что же может быть на самом деле.
"В тот то и дело. Все эти стикеры – места, в которых объекты ведут себя так, как их изначально не прописывали. Ты один из наиболее талантливых программистов в нашей компании. Я дам тебе полный доступ к тестовому серверу. Попробуешь решить проблему?" – спросил начальник, повернувшись к подчиненному.
«Хорошо, шеф. Я займусь этим вопросом» – ответил Алекс и, совершенно забыв о том, что собирался домой, вернулся обратно на рабочее место.
Он вошел на тестовый сервер и открыл консоль разработчика. Немного подумав, ввел код для проверки текстур зданий:
```
for building in game.buildings:
correct_textures = ["texture1", "texture2", "texture3"]
building_textures = building.get_textures()
for texture in correct_textures:
if texture not in building_textures:
print("Building", building.id, "has incorrect texture")
```
Пошел процесс обработки данных. Через некоторое время машина пискнула и выдала:
"Ошибка 404: здание [878755] не существует"
"Ошибка 416: здание [41769] нет в протоколе"
Хм, а если так. Алекс написал новый код для проверки действий NPС в игре.
```
for character in game.characters:
correct_actions = ["walk", "run", "jump"]
character_actions = character.get_actions()
for action in correct_actions:
if action not in character_actions:
print("Character", character.id, "is not performing correct action")
```
Система пискнула и вывела следующее сообщение
"Ошибка: персонаж [ID 123951] не выполняет корректное действие в данный момент времени. Ожидалось: бег. Фактически: ходьба."
Действительно, все очень странно, подумал Алекс
Система начала пищать непрерывно
"Ошибка: персонаж [ID 657134] не выполняет корректное действие в данный момент времени. Ожидалось: сон. Фактически: бодрствование."
"Ошибка: персонаж [ID 7609000] не выполняет корректное действие в данный момент времени. Ожидалось: помощь игроку в решении головоломки. Фактически: отказ".
Алекс закрыл консоль. Начала болеть голова. «Это невозможно»,– подумал он. Надо пройтись, проветриться и все хорошо обдумать. Он вышел на улицу и направился в ближайший парк. Вокруг не было ни души. Алекс шел по освещенным фонарями дорожкам, пытаясь отделаться от смутного ощущения нереальности происходящего. «В чем может быть причина, если в ситуации совсем нет логики? Что можно сделать, если обычные принципы не помогают? Надо отвлечься, подумать о чем-нибудь забавном. О чем вчера рассказывал Джон? Точно, белка! Он говорил о белке».
«Алекс, недавно на рыбалке со мной произошел странный случай. Я был на острове, расставил все свои снасти и ждал, пока клюнет рыбка. Вокруг тишина, за исключением только звуков природы - щебетание птиц и шума ветра в листьях деревьев. Благодать!
Только успел заскучать от одиночества, как раздался странный шум, доносящийся из моего рюкзака. Смотрю, молния расстегнута. Я подумал, что это просто белка, которую заинтересовали мои припасы. Ну, думаю, всё, не видать мне орехов! Подкравшись к рюкзаку, чтобы не спугнуть расхитительницу чужого пайка, я заглянул туда, и… ты не поверишь! Не было там никакой белки. На самом дне сидел маленький котенок, рыжий и наглый, смотревший на меня во все глаза! По иронии судьбы из всего провианта только орехи и остались. Я сначала был потрясен и не знал, что делать. Откуда он вообще там взялся, посреди острова, где даже людей толком не бывает? Но потом подумал, раз уж так вышло, не бросать же беднягу. Я отвез его в город и подарил соседской девчушке. Насколько знаю, она давно просит родных купить ей животное. Котенок оказался девочкой. Так что у пушистой нахалки теперь есть дом и любящие хозяева. Белкой назвали».
Белка, которая стала котом. Алекс улыбнулся. И резко остановился посреди парка. В его голове созрел план. Если хочешь понять, что не так с персонажами, сам стань частью их мира.