— Ничего еще не кончилось, юный падаван, — подмигнул я приунывшему Киму, — смотри, на блоке питания светодиод не горит, а значит, с питанием явная проблема. Одна из самых частых поломок. Пациенту требуется вскрытие.
Не увидел понимания во взгляде и понял, что косякнул. Слово «падаван» нам презентовали уже в трилогии приквелов к Звездным Войнам, ну или в расширенной вселенной имеет шанс встретиться, если она уже существует, но это не точно. Книги из нее я почти не читал. Межавторские циклы не обязательно, но часто скатываются в ересь и отсебятину. Даже нежно любимый мной вархаммер 40К местами от всяких еретиков пострадал.
Все не так плохо оказалось — прозвонил кабель питания, открыл корпус внешнего БП и довольно скоро узрел проблему — сгоревший предохранитель. Стеклянная колбочка с тонкой проволокой внутри, в норме прозрачная, ныне закопченная.
— Вот, гляди, — объяснил своему джуну, в чем проблема.
— Я съезжу в магазин и куплю запасной! — вызвался воспылавший энтузиазмом Ким.
— Нет, не надо, мистер Конг нам одолжит свой предохранитель.
И правда, зачем мотаться в Радиорубку и еще раз сталкиваться с неприятным Стивом, когда у нас здесь и сейчас огромная толпа добровольных доноров. Достав сгоревшую деталь, отыскал аналогичную по номиналу в корпусе Донки Конга. Все равно у бедолаги гориллы плата разломана и как ее чинить — я не знаю.
Еще десять минут возни и попытка номер два. По крайней мере, зеленый огонек на верхней грани кирпича БП сообщил, что питалово появилось. Я щелкнул ручкой включения ТВ и нажал на совсем неинтуитивно расположенную кнопку запуска компьютера — внизу сзади на корпусе-клавиатуре. Пришлось ее немного поискать.
Экран телевизора расцвёл помехами и почернел, возникла надпись:
MEMORY SIZE?
В каком смысле — размер памяти? Да макаронный монстр его знает, сколько там? Мне что, корпус вскрывать? Или перебором? Что за угадайка? А девичью фамилию матери Криса им не назвать? Я ее помню, Гарсия.
Ввел «4KB», ответом стало
?SN ERROR
А если в байтах: 4096?
RADIO SHACK LEVEL II BASIC
READY
ДА! ДА! ДА! Я сделал это! Рядом восхищенно ахнул Ким.
Я супергерой, и у меня есть супер-рука,
Этой рукой я ломаю почту и пароли VK,
Удаляю ссылки из сети, да кстати,
Я обладаю суперпрокачанным навыком телепатии!
И как мне с этим жить? Начал с простого.
PRINT «HELLO WORLD»
И допотопный бейкик поздоровался с миром, как я и просил. Восхищенный астматический вздох Кима, больше напоминающий всхлип, стал мне наградой.
— Дружище, ты приносишь мне удачу! — хлопнул помощника по плечу. — Давай запилим игру!
Вероятно, слишком самонадеянно вот так вот сесть за древний слабый компьютер и сразу нырнуть с головой в разработку. Но на что я вообще тогда собираюсь рассчитывать, если не смогу вот так просто взять и войти в Мордор? То есть в геймдев.
По-хорошему, сначала следовало разобраться с блоком расширения и магнитофоном, чтобы иметь возможность сохранить код. Но тут бы мануалы сначала почитать. Только сам Император и Бог-машина знают, какие сложности возникнут с их подключением. А нужный код у меня уже в голове!
Когда-то в далеком будущем, являясь простым российским школьником, я впервые сел за учебный советский ЭВМ «Корвет» на отечественном клоне процессора Интел 8080. И после первых нескольких уроков с PRINT «ПРИВЕТ МИР» учитель информатики дал нам задание написать простую игру. Не всем, безусловно, а талантливым ребятам, загоревшимся интересом к компьютерам. Таким, как я или во все глаза пялящийся на священнодействие Ким.
На создание и отладку кода на бейсике для простейшей игрушки у меня тогда ушла, наверное, неделя. Никакой графики, сплошь текстовые элементы. Я в тот раз написал давно уже всему миру известную змейку, ту самую игру с телефонов Нокия, на тот момент еще не начавших покорять мир. Никакой графики, сплошь текстовые элементы: хвост змеи из букв «o», звездочка, изображающая яблоко. Стирание кончика хвоста, печатью поверх него пробела. Термин ASCII я узнал намного позднее.
Примитивный математический просчет коллизий. Неделю провозившись с кодом, будучи зеленым школьником, я запомнил его наизусть навсегда. ПЕРВАЯ ИГРА, написанная мной самостоятельно! Учитель только идею и подсказал, до остального я сам допёр, благо мне, как отличнику, разрешили зависать в компьютерном классе после уроков.
Меньше трехсот строк листинга. Я их помню намного лучше, чем отрывки из «Евгения Онегина» или «Бородино», какие требовалось зубрить на литературе. То есть их тоже любой образованный человек процитировать способен, но фрагментарно, а тут я сел и воспроизвел. Руки-то помнят!
Глядя, как мои пальцы мелькают над клавиатурой, Ким наверняка рисковал превратиться в персонажа из аниме за счет безумно расширившихся глаз. Палюсь со страшной силой, но я не могу иначе. Разработка и игры — моя страсть. Наглядно видеть, как твой код оживает на экране — эйфория лучше, чем секс. Хотя против последнего я тоже ничего не имею.
Поехали!
10 CLS: RANDOM: DIM X(100), Y(100)
20 PRINT @ 20, «MEGA-SNAKE»;
…
260 PRINT @ 466, «GAME OVER! SCORE: »; TAILLENGTH × 10
270 GOTO 270
Готово! Набранный счет равен длине хвоста, умноженной на 10.
Ну, попробуем запустить? Как там это делалось? Работайте, молодые мозги! Думай, голова, я тебе шапку куплю! Шапка мне и в самом деле бы не помешала, учитывая, какой дубак иногда случается по утрам в солнечной Калифорнии. Вспомнил! RUN!
Ввел команду на исполнение кода и…
?SN ERROR IN 150
READY
Ошибка в 150 строке. Нашел! Вместо PRINT я набрал PRNT, самая банальная опечатка, пропущенная буква. Пальцы не поспели за мыслью. Подсветки синтаксиса ведь нет! Вот и не заметил сразу. Еще одна мегаполезная вещь, за какую все программисты мира сбросятся мне на памятник из бронзы, а то и чистого золота, когда реализую. На TRS-80, правда, не получится. Тут экран монохромный. Эх… с болью в сердце вспоминаю логотип с цветным надкушенным яблочком на коробках с крадеными компами. Знаю, что правильно поступил, не став связываться с криминалом, а то бы еще в соучастники угодил. Но как же мучительно больно от осознания уплывших перспектив!
— Всё хорошо. Если код запустился с первого раза и без ошибок, то возникает повод задуматься, что программист сделал не так, — пояснил я Киму. — Сейчас исправлю опечатку и… — ступор. А как мне ее исправить? На Корветах я просто подводил курсор к нужной части программы, стирал неправильное и печатал как надо. А тут, гадство, нет курсора! Не изобрели! Правильный ответ, как всегда, в RTFM, но мануалов и нет.
А что, если набрать всю строку целиком? Начиная с номера? Не заменит ли новый код неправильный? Вообще, стиль оформления кода, требующий обязательной нумерации строчек — дикий архаизм! Мне кажется, что даже в 1982-м сей подход устарел! Но в отечественных Корветах мы тоже нумеровали строки и потому шоком для меня диалект Бейсика из каменного века не стал. Мне стоит подумать про транспайлер — программу, что возьмет нормальный код на продвинутом современном диалекте Бейсика и превратит в оформленный по стандартам эпохи мезозоя. Несложно будет автоматически нумера строк проставить. Или вообще Ктулху в щупальца этот бейсик, начать транслировать код из Питона? Можно, но как-то пока незачем.
И не стоит ли мне идею транспайлера запатентовать? И подсветку тоже! И вообще кучу идей! Как-то патентный троллинг грязная штука, но способен принести кучу денег, какие я потом пущу на добрые дела. Например, на развитие опенсорса. Разрешу свободное использование «своих» запатентованных идей в некоммерческих целях. Обдумаю еще попозже. Ну а пока… RUN!
Идея набрать строку в исправленном виде оказалась рабочей. Посреди экрана быстро пополз короткий червяк из трех букв «o».
— Крис! Настоящая игра! Это потрясающе! Ты невероятен! — прямо-таки заверещал от восторга Ким. Такое впечатление, что мой животворящий код ему астму подлечил — даже голос несколько поменялся.
— Пока что первая и неказистая, но ты представь перспективы! Хочешь попробовать? Управление на кнопках WASD.
— А почему на них, а не стрелках? — с живым интересом спросил паренёк.
— Я пока не знаю клавиатурных кодов клавиш стрелок, а четыре кнопки под левую руку однажды станут стандартом в игровой индустрии, поверь моей интуиции.
Уступил Киму место, он попробовал. Червяк бодро начал расти, но чем длиннее становился он, тем печальнее я. Вместе со змеей рос и счетчик примитивных циклов на его отрисовку и расчет коллизий и где-то на двадцати сожранных яблочках-звёздочках производительность упала катастрофически, программа перестала успевать ловить команды управления.
Проблема, какую пофиксить мне в школьные годы навыков не хватило. И наш учитель информатики не смог подсказать решения, в итоге я тогда нашел выход, давая победу на двадцатом яблоке. Позже, когда навыки появились, так к своей самой первой игре и не вернулся, не довел ее до ума. Сейчас понимаю, как меня жжет внутренний перфекционист, недовольный застарелой проблемой.
— Змея выросла и ее хвост стал слишком тяжелым, потому ползает медленно, — хихикнул Ким, даже не представляя, насколько близко к сути он попал.
А ведь теперь мне хватит навыков, чтобы оптимизировать старый код! Самое первое, что придумывается — не перерисовывать протагониста на каждом шаге целиком. Достаточно нарисовать голову на новой позиции и стереть хвост.
Да только ради закрытия сего гештальта и стоило провалиться в прошлое! «Да могу, но не сейчас, а сейчас хочу я в пляс!» Нейромонах Феофан плохого не посоветует. Я к тому, что хоть какое-то подобие серьезной работы стоит продолжать, лишь обеспечив себя возможностью сохранять результат. А то изобрету велосипед и он останется только в наших с Кимом воспоминаниях.
— Проголодался? — спросил я. Вспоминая, с какой жадностью Ким ел мою нехитрую снедь, так и хочется его накормить. У меня вот в животе уже бурчало. Сомневаюсь, что товарищ питался лучше моего. — Пошли в закусочную, угощаю.
Бесконечно мотаясь между моллом и школой, я уже начал несколько ориентироваться в обстановке и присмотрел заведение, куда не очень жалко отнести деньги, во всяком случае, ради нового опыта. Никогда в своей первой нормальной жизни не бывал в классических американских динерах, как в кино. Таких, длинных, как автобус, с красными диванчиками, обитыми кожзамом, и чтобы официантка в белом накрахмаленном переднике приносила кофе, да советовала вишневый пирог в качестве блюда дня. А затем внутрь ворвались грабители и… вот это уже лишняя деталь, но образ в моей голове массовая культура сформировала четкий. Интересно попробовать на своём опыте формат, так разрекламированный в сериалах.
— Это очень дорого… — смутился Ким, но голодный блеск в его глазах я разглядел.
— Не дороже вот этой фигни за сорок баксов, пошли-пошли.
Мой с данного момента главный актив я забрал с собой. Клавиатура нормально поместилась в рюкзак. А вот блок расширения и тем более телевизор, принадлежащий дайверскому бару, трогать не стал. Подключу к домашнему ТВ и продолжу ретро-кодинг — он затягивает.
В общем, доехали до той самой придорожной стекляшки неподалеку от молла, какую я присмотрел. Всё, как в кино, ну разве что пол весь пыльный и обивка на диванчиках растрескалась от жаркого калифорнийского солнышка.
Официантка лет пятидесяти явно мексиканского происхождения с бейджиком Роза посоветовала взять Петти Мелт и клубничный штрудель, а также ТРИЖДЫ подливала мне кофе, вполне пристойный, не растворимый. Ким, хлебнув кофейку, слегка возбудился и вывалил на меня бездну фантазий об игре своей мечты. Такой, чтобы там можно было играть лесными эльфами, охраной дворца и злодеем, а также грабить корованы…
Нет, не так! Уже опять мой дурацкий юмор! На самом-то деле парень хотел игру, «с сюжетом, как в детективных романах, чтобы вести расследование, разгадывать загадки и даже иногда ввязываться в перестрелки». До нескольких концовок и вариативности его фантазия пока не дошла, как и фантазия современных геймдизайнеров, скорее всего. Или уже да? Текстовые квесты вроде как процветают?
Типичный двумерный квест он описал, каких в ближайшие годы начнет выходить все больше и больше. Не помню, когда именно начнется их золотая эпоха, но в середине девяностых квесты точно расцветут. Уже сейчас нехитрый геймплей, предполагающий внимание к деталям и решение головоломок, наверняка привлекает игроков. И тут опять поляна, на какой я могу откусить громадный кусок пирога. Я ведь проходил, снова нельзя без громкого слова, легендарную «Full Throttle», вышедшую в 1995-м и ее вполне достойный ремастер от 2017-го. Футуристический квест про байкера и его мотоцикл покорил меня с первого взгляда
Да я даже музыку оттуда смогу худо-бедно напеть и эскизы персонажей криво-косо набросать, чтобы настоящие музыканты и художники их до ума довели. Сейчас, в 82-м, железо картинку попросту не потянет, но что, если часть ограничений получится обойти, например, за счет более эффективных алгоритмов сжатия? На десять лет раньше выпустить не выйдет, а на пять — уже чего бы и не попытаться?
А вот серия квестов про Петьку и Василия Ивановича американской публикой наверняка останется непонятой. Да и я сам, буду честен, их не понимал, только по иной причине. Чересчур абсурдные отгадки требовались. Решено — будет Ким в корпорации «Каналья Геймс» курировать направление приключенческих игр! Опять иронизирую, жизнь — не шахматы и все ходы заранее не просчитать, но паренек явно умный и, что говорится, фартовый. На пустом месте мне комп на свалке откопал. Да и в целом — за друзей нужно держаться. Истина, какую я в первой жизни понял поздновато.
— Я смогу написать эту игру, — пообещал другу, — но потом, когда компьютеры поумнеют.
Оставил тете Розе пару баксов чаевых, а сытый и довольный, аж светящийся изнутри Ким подвёз меня до дома. Вкусная еда, наверное, литра полтора выпитого неплохого кофе, верный друг, собственный компьютер. Жизнь определенно налаживается.
И вот кто бы на моём месте удержался от того, чтобы подрубить комп к телевизору? Я вот не смог. Погулял с собакой и прирос к клавиатуре. Как же мне этого не хватало! Скрипя зубами от необходимости переписывать каждую строчку кода целиком из-за незнания, как редактировать правильно, к вечеру добил-таки оптимизированную версию «Змейки», причем даже без ассемблерных вставок обошелся. С ними получилось бы еще быстрее, но я не знаю ассемблера под Z80. В теории он тут идентичен для всего огромного семейства машин, использующего один из самых массовых процессоров всех времен, но под тот же спектрум я тоже никогда не писал. Играться у товарища — да, играл.
— Это что за миерда? — кивнув на клавиатуру, спросил Гектор, вернувшийся под вечер со своих бандитских делишек. Или со свидания с Еленой, не моё дело. — Освободи телек, карналито, там сейчас Голливудский Рестлинг начнется.
— Нашел на свалке, интересная игра, — признался я честно. Открывшему баночку пива Гектору объяснения хватило.
Променять программирование на сомнительное зрелище постановочных боёв безбожно переигрывающих атлетов? Да не вопрос! Самого главного я на сегодня уже добился, а сравнить рестлинг восьмидесятых с тем, что показывали по СТС и ТНТ, тоже любопытно. Ожидаемо, продукт из более поздней эпохи смотрелся предпочтительней, и ни одного «борца» я не узнал. Ни Халка Хогана, ни Гробовщика, ни Андре Гиганта так и не увидел. Видимо, их время придет позже, лет через десять. Или промоушен не тот.
Но, несмотря на все недостатки, вполне достойное шоу. Рестлеры старались, один даже в кровь себе лицо украдкой порезал, чтобы смотрелось, будто рассечение заработал.
— Гектор! Гектор! Гектор! — забарабанили нам вдруг в дверь трейлера. Прямо как сцена из фильма Троя с Бредом Питтом. И там не Ахиллес пришел. Я узнал голос гостя…