Немного лирики про то, как рождалось “No Heart Beats Forever” (NHBF)

Внимание! Будут спойлеры



После своих прошлогодних работ для Chaos Constructions "daybyday" и "Tooticki häst" (которые, кстати, были для меня дебютными), я решил, что на этом и всё. Идей больше нет и не будет, даже близко к этим работам я уже ничего не смогу и не напишу, да и вообще.

С другой стороны, мысль попробовать поиграться с музыкой в рамках 256 байт засела где-то на задворках сознания со времён написания арт-пака "SPECSCII Art by UriS", когда я впервые разобрался с AY на «низком» уровне и стал понимать что и как с ним можно делать.
Спусковым крючком послужило интро "RED REDUX", показанное на Мультиматографе 2025. В нём звучало несколько зацикленных нот с огибающей. Это была уже почти музыка, но мне казалось, что её потенциал там далеко не раскрыт.

Моя идея была простой: зацикленный «квадрат» из поверкордов по двум каналам, по третьему «наваливается» рандомная пентатоника, поверх всего перебирается огибающая с кратной басу частотой, а ритм задаётся эмпирически подобранной логической комбинацией счётчиков тактов и нот… это если очень кратко. И всё это в диапазоне частот, делитель которых не превышает 1 байт, чтоб не плодить лишнего кода.
Так и получилась музыкальная основа того, что и попало в финальный вариант NHBF.

Чтобы всё это стало каким-то подобием интро, впихнул туда простенький «визуальный спецэффект» в виде симметричных рандомно выводимых атрибутов.


Рабочее название проекта на тот момент было банальное «soundino»

Чуть позже, но почти параллельно, появилась идея написать осмысленный текст из ключевых слов («токенов») спековского бэйсика. Уже не помню, что натолкнуло на эту мысль. Тут я решил схалтурить и, загрузив в DeepSeek список этих слов, попросил его что-нибудь придумать. Увы. С задачей DeepSeek успешно и упорно не справлялся, постоянно скатываясь на посторонние слова. Но среди этой шелухи оказался один алмаз: «I poke heart into code», от которого я пришёл в восторг и который в итоге стал ключевой идеей.
Ну а всю остальную «токенную поэзию» пришлось писать самому.

Были сомнения, стоит ли объединять эти две потенциальные интрухи (одна про музыку, другая про текст из токенов) в одну – ведь концептуально это 2 разные и самоценные идеи, а физически они вместе тупо не влезали в 256 байт. От спецэффектов вообще пришлось отказаться. Максимум, на что можно было рассчитывать — чёрный фон, пословно выводимый белый текст и 4 зацикленных такта музыки. Ну ещё получилось сердечко сделать красным. Своего рода стильно, конечно, но не зрелищно.


Можно заметить, что тут текст отличается от финального варианта

И тут начался самый интересный и захватывающий этап написания таких интрух — колдунство оптимизация. В неё играешь, как в головоломку. А в какой-то момент уже не ты пишешь код, а код пишет тебя. Ты становишься заложником ранее созданного и очень тесного окружения, в котором и пытаешься нащупать неожиданные стороны. Сам не знаешь, куда в итоге придёшь.
И эта вечная игра — освободил 2 байта — отлично, надо что-то ещё запихнуть. Запихнул. На 8 байт превышение лимита. Надо оптимизировать. Оптимизировал -10 байт — отлично, опять 2 байта свободно, надо что-то ещё впихнуть! И вот так, с поиском компромиссов и явных и неявных умолчаний получается шаткий и нежный карточный домик из папиросной бумаги, который, на удивление, работает.

Всё настолько шаткое… Куда-то там указатель адреса попал случайно в область ПЗУ — повезло, отсюда и будем играть «соло» (да-да, весь «соляк» — это тупо проигрывание кода ПЗУ с какого-то там адреса). Счётчик цикла обнулить? Ой, да ладо, первый цикл он всё равно нулевые атрибуты гонять где-то там, не важно где будет, а потом как раз обнулится на выходе. В основном цикле переключение af-af' происходит нечётное число раз за один шаг цикла, если вы понимаете, о чём я. И я сейчас даже не смогу объяснить, о чём я думал, когда так делал, но оно неплохо сработало.

Хочу поблагодарить Арт-Топа, который помог мне в одном куске, который я ему показал, высвободить 6 байт (из которых я потом сделал 11). Это реально много! И это послужило ключевым моментом, позволившим добавить «спецэффекты». Не сразу, конечно, много что ещё пришлось ужать, но надежда появилась именно с этих 6 байт.
Если интересно, Арт-Топ заметил, что после вызова процедуры очистки экрана, в одной регистровой паре оставалось число, удивительным образом совпадающее с длинной моего текста и в таком виде оно могло выступать счётчиком для процедуры его вывода (ну и ещё там по мелочам).

Каждый раз, после очередного шага казалось, что всё, дальше уже некуда ужимать и вообще надо ставить точку. Но каждый раз через какое-то время (часы или дни) появлялась новая мысль, что и как можно попробовать изменить или добавить/убрать, ведь как завещал главный патриарх отечественного программирования М. Р. Шура-Бура: «Любую программу всегда можно сократить на одну команду» (Это вообще должно быть настольным правилом любого сайзкодера, я считаю! Главное не увлекаться его рекурсией и не свести длинну кода к 0 ;) ).


Собственно вот так оно незатейлево всё и выглядит. Непонятно, за что первое место дали ;)

Правил код я такими наскоками довольно долго. Месяц? Больше? И это был реально фановый процесс — как было сказано ранее, я уже просто плыл по течению, сам с интересом наблюдая, куда же меня в итоге это всё выведет. Пробуя, ошибаясь, откатываясь, возвращаясь.
Долго оставалась какая-то «драматургическая незавершённость», что ли. Мне не хотелось этой шаблонной для 256b зацикленности, мне хотелось движения, высказывания, сюжета. В конце концов надо было воплощать заявленное в интрухе «step to move over border».

Было много экспериментов, пока не удалось в этих тесных условиях придать композиции какую-то динамическую форму с вступлением и развитием. Но финал долго не получался. В конце концов (через подброшенную опять же Арт-Топом шутливую идею с финальным «зависанием») удалось выйти на ресет — он оказался всё же интереснее эмоционально. И, собственно, в этот момент всё неожиданно даже для меня самого сложилась в законченное и цельное повествование, с основой «poke heart into code». Ну а название «Ни одно сердце не бьётся вечно» уже напросилось по итогу само. Да, название родилось последним.
Так и получилось то, что получилось.

А потом я посмотрел на календарь — какое мероприятие грядёт — и это опять, как и год назад, оказался Chaos Constructions :)


Или так:
https://www.youtube.com/watch?v=W4ECjJmAA1c
https://vkvideo.ru/video-225689_456239175

А это, если интересно, POV с показа :)

https://www.youtube.com/watch?v=K8MrvWPXEZs
https://vkvideo.ru/video-225689_456239222

2 комментария

avatar
спасибо за статью! одна из лучших, если вообще не лучшая, интра на спектрум, ради неё однозначно стоило ехать на ЦЦ — до сих пор вспоминаю показ :)
avatar
Работа крутая, как и все твои 256! Спасибо за статью!
PS: Видео можно через iframe кажется вставить, на ютупчике «поделится-встроить», ещё можно тэг cut использовать чтобы не вся статья разом вываливалась! Подустарел хайпик под капотом)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.