Записки о разработке — коротко, без обещаний и дат релиза.
2026-10-28
Мох в игре: семь вечеров в один
Утро среды началось с того, что художник переборол себя и прислал мох не «вечером посмотреть», а к одиннадцати. Листок с тремя оттенками зелёного превратился в шесть рядов тайлов: три возраста мха на кирпич, по два тайла на возраст — с трещиной и без. Выкладываю всю историю по-честному: на то, чтобы это посмотреть, у меня ушел остаток дня.
Дело в том, что возраст мха у нас привязан к слою, а не к каждому блоку отдельно. В бумажной версии это звучало красиво: чем ниже ряд кирпича, тем серее. В игре выяснилось, что в руинах есть арки, колонны и обломки, которые стоят вертикально, — и по ним мох должен стареть не вниз, а вверх, потому что влага копится у земли. Спорили полдня, в итоге сделали банально и правильно: возраст считает не слой, а расстояние до ближайшего пола. Четыре строки кода, из которых три — комментарии, объясняющие, зачем мы так сделали. Через год они нам понадобятся.
Потом было самое обидное. Яркий, «свежий» мох из листка на экране выглядел не свежим, а пластиковым: в палитре он был самым насыщенным зелёным, а на фоне тусклых руинов выгорал в пятно. Художник сел рядом, мы полчаса перебирали оттенки из уже существующей палитры (семнадцатый цвет добавлять запретили себе ещё в понедельник) — и в итоге свежий мох оказался тем же старым лесным зелёным, просто на один шаг светлее по яркости. Никакого нового цвета. Свежесть, как выяснилось, это не цвет, а контраст с соседями.
Проверяли честно: отходили от монитора на три шага и смотрели, читается ли возраст стены без подсказок. Читается — но только на нижних двух третях экрана; выше мох сливается, и там стена просто стена. Решили, что это не баг, а правда: под потолком руин мху неоткуда взяться, там сухо. Вписали это в комментарии к тайлсету, чтобы будущий мы не «починил».
В сборку это не поехало: в пятницу смотрим всё вместе на свежую голову, и если никто не передумает — мох едет в v0.5.4. Осталось два пункта из того списка на одиннадцать мелочей: тень под платформой и тайминги шагов. Оба не страшные, но после мха хотелось бы день тишины. Посмотрим, выдержу ли я сам своё же правило «не трогать код, если не горит» — слабое место всех, кто пишет движок в одиночку.
2026-10-26
Мох постарел
Выходные прошли, художник явился с листком и словами «тут всё правильно написано, странно». Так мох на руинах официально научился стареть: три оттенка зелёного из того августовского листка, свежий мох — на верхних блоках кладки, старый — ближе к земле, выцветший почти в серый. «Трупный» оттенок не тронули — он был зачёркнут не зря, и мы это уважаем.
Технически всё оказалось скромнее, чем я боялся. Возраст мха привязан не к отдельному блоку, а к слою: чем ниже ряд кирпича, тем больше к нему подмешан серый. Палитру расширять не пришлось — хватило уже существующего серого из камней пещер, просто с другим соотношением смешивания. Один новый цвет — и палитра уже не 16 цветов, а 17, а с 17 начинается скользкая дорожка.
По пути сломали paltool: он упорно выцветал мох по общей яркости, из-за чего нижние блоки выглядели не старыми, а грязными. Полчаса debugging-принтов, пока не понял, что считаю яркость до приведения к палитре, а надо после. Классика: инструмент, который писали для арта, первым делом предаёт того, кто им пользуется по инструкции из головы.
Третий плейтестер наконец-то отписался. Цитирую дословно: «норм». Одно слово после двух недель молчания — и знаете, по нашей внутренней шкале это где-то между «хорошо» и «отлично». Плохое люди пишут развёрнуто.
На этой неделе план простой: собрать отзывы по мху со свежими глазами (то есть со своими, у художника взгляд замылен), и если не стошнит — запустить это в следующую сборку. Никаких больших обещаний: мох — он мох.
2026-10-23
Бумажная пятница: полка разобрана, листок найден
Вчерашнее «разобрать полку с бумажками» мы, к своему удивлению, сделали. Оказалось, что на полке не один листок, а семь: под августовскими заметками про мох лежали забытая схема пещер со стрелочками, чек из магазина, где мы покупали бумагу для заметок, и roadmap с весны. Roadmap уже не нужен — всё, что на нём было, либо сделано, либо честно переехало в «потом». Листок нашёлся третьим снизу, слегка приклеенный к нему. Отделяли аккуратно.
Что в самих заметках: три оттенка зелёного для мха на кирпиче и один зачёркнутый вариант с подписью «трупный». Зачёркнутый не трогаем, он зачёркнут не зря. Идея, если коротко, — научить мх стареть: свежий на верхних блоках яркий, на старых кирпичах выцветший, почти серый. Сейчас руины под вторым ярусом просто перекрашены тем же лесом, и это заметно. Наш художник забрал листок и сказал, что вечером посмотрит. Такой формат работы я люблю больше всего: весь день в коде тишина, а движение всё равно есть.
Тем же вечером ответил второй плейтестер. Он дошёл до стража на свежей сборке и написал, что пауза перед третьей фазой работает: «умер, но понял за что». Для нас это почти высшая форма благодарности — игра умертвила человека, но не обидела. Третий тестер по-прежнему молчит; не дёргаем, выходные не для этого.
Мелочь дня для памяти самому себе: в папке со сниппетами нашлись три старых файла с суффиксом «.bak» в имени. Выкидывать бэкапы страшно, поэтому перенёс их в отдельную папку «на всякий случай». По сути то же самое, но теперь честно.
2026-10-21
День после сборки: листаем страницу, ждём сообщения
После вчерашней v0.5.3 в проекте наступил тот особенный день, когда в коде делать нечего, а руки всё равно тянутся. Мы это давно заметили за собой: день после сборки всегда разбазаривается по мелочам. Решили не спорить с природой и официально объявили его «днём листания страницы» — посмотрели, что пишут другие инди в своих дневниках, собрали пару ссылок на потом, полистали старые свои записи с весны.
Признаюсь честно: только сегодня заметил, что у нас в шапке страницы «скачать» до сих пор написано «версия 0.5.2 — последняя». Уже поправили: там теперь честное «v0.5.3 — октябрь 2026». Мелочь из разряда «как мы это прожили», но пусть висит в списке извечных мелочей, о которых вспоминаешь только после релиза.
Из тех трёх плейтестеров один уже успел скачать свежую сборку и написал коротко: «перезапустил, капли больше не спорят между собой». Так и не поняли до конца, что он имел в виду, но звучит как победа. Остальные двое обычно отвечают на второй-третий день, ждём.
Пятница — рабочий день по плану, но рабочий не значит «код»: хотим наконец разобрать полку с бумажками у монитора. Там уже с августа лежит распечатка с заметками по цвету для второго региона — просто листок с нашими пометками про оттенки мха на кирпичах. Может, дойдём до руин, может, нет — записываю сюда, чтобы не потерялось.
2026-10-20
v0.5.3: список из ответов и одна сентябрьская обида
Собрали всё, что накопилось после плейтестов, в один список — получилось одиннадцать пунктов, из них серьёзных три. Серьёзные это не те, что сложные, а те, без которых остальное бессмысленно: счётчик у двери (уже передвинули и подсветили), подсказка у третьей фазы стража и та самая сентябрьская обида с бумажкой. Остальное — чистая полировка: тайминги звука шагов, одна пропавшая тень под платформой, мелочь по камере.
Обида с бумажкой, если коротко: записка в руинах подсказывает про дверь, но её шрифт в два раза меньше всего остального текста в игре. Мы её рисовали последней, в спешке, под старый размер тайла — и с тех пор никто не трогал. Плейтестер прошёл мимо, хотя заметил. Переделали под общий размер, добавили лёгкое покачивание, чтобы записка читалась как предмет, а не как часть фона. Двадцать минут работы за обиду двухмесячной давности — неприятно, но честно.
Подсказку у третьей фазы сделали не текстом, а паузой: перед началом фазы страж на секунду замирает, и его слабое место вспыхивает само. Никто из нас не любит, когда игра останавливает действие и объясняет правила словами — а тут игрок сам успевает заметить связь до того, как в него полетит. Плейтестер, который на этой фазе погиб, сказал, что умер «по делу» — хочется сохранить это ощущение и после подсказки.
Сборку назвали v0.5.3 и уже пересобрали. Вес почти не изменился, зато внутри тише: убрали три дубликата одного звука капель, которые нашлись при сборке списка — из-за них руины звучали чуть громче леса на одинаковой громкости. Обновили архив на странице «скачать», у кого-то из тестеров может быть старая версия — если капает слишком уверенно, вы устарели.
2026-10-18
Первые ответы плейтестеров: где застрял и что нажимал зря
К субботе пришли ответы от всех троих, кому рассылали ролик и сборку, — по нашей анкете: где застрял, что нажимал зря, в какой момент непонятно, что происходит. Один ответил ровно так, как просили, на полстраницы. Второй — коротко, но по делу. Третий написал «норм» и смайлик, и пришлось дописывать ему в личку вопросы по одному. Вывод первый: просить конкретику в анкете — мало, её надо ещё и выспрашивать.
Самое полезное сошлось у двоих независимо: в руинах игроки собирали сферы, подходили к двери и ждали. Не потому что не поняли про счётчик, а потому что не увидели его: табличка «осталось» висит в углу, а взгляд прижат к двери. Один честно написал: «я подумал, дверь открывается по таймеру, как в старых играх, и просто стоял». Передвинули счётчик к самой двери и подсветили его, когда игрок рядом. Полчаса работы, а разница на видео — сразу видно.
Приятное: ни один не пожаловался, что «прыжок не сработал». Это про тот самый буфер прыжка из v0.5.2 — раньше в наших же тестах каждый второй заход на платформу сопровождался словами про движок. Значит, не зря его тащили отдельной сборкой. Один тестер, наоборот, прошёл руины целиком со включённым звуком и написал, что «капает как в подъезде» — считаем это комплиментом.
Со стражем из плейтестеров заходил только один, и тот погиб на третьей фазе — но, по его словам, умер «по делу», а не из-за непонятной механики. Для нас это та самая разница между «сложно» и «криво», за которую боролись весь месяц. На неделе собираем мелочи из ответов в один список и режем v0.5.3: счётчик у двери, пара подсказок и одна обида с бумажки, которая ждёт с сентября.
2026-10-16
Девяносто секунд: снимали кадры и ставили субтитры
Ролик для плейтестов сняли — тот самый, девяносто секунд с субтитрами. Снимали, как договаривались, кадрами прямо из игры, без монтажа «для красоты». Сразу выяснилось, что чистый кадр — это отдельная дисциплина: рука дрожит в неудачный момент, камера уезжает за прыжок, а в углу норовит влезть курсор. В итоге половина материала — брак, и это нормально: перепрыгнул руины трижды, из трёх проходов один годится.
Субтитры писали не заранее, а под уже снятые кадры. Когда пишешь текст до съёмки, видео начинает врать про то, что на экране происходит, — проверено на первой версии раскадровки. Расставляли тайминги полтора часа, зато вышло правило, которое оставляем себе: субтитр появляется чуть позже, чем игрок успевает прочитать предыдущий, и уходит раньше смены сцены. Спешка в субтитрах читается как спешка в игре.
Поломка дня нашлась не в игре, а в рендере: первый экспорт вышел с рассинхроном звука, потому что частоту кадров указали не ту. Одна строчка, но искали её дольше, чем стоила: глаз верит картинке и не замечает, что звук отстаёт на треть секунды. Помогла метка времени в углу — если бы не она, отдали бы плейтестерам ролик, где страж глубины падает молча.
Ролик разослали первым трём плейтестерам. Просили отвечать не «понравилось / не понравилось», а конкретно: где застрял, что нажимал зря, в какой момент непонятно, что происходит. Такие ответы страшнее слушать, зато по ним сразу видно, что чинить первым. Ждём до конца недели.
2026-10-14
Скрежет найден: хвост капли и один фейд
Скрежет дожил до среды, как договаривались. Записали выход микса в файл и открыли волну — и скрежет оказался не «где-то в пещере», а аккуратным пиком ровно каждые шесть с небольшим секунд. Как метроном. Стало почти обидно: столько версий подозревали эхо и ассеты, а он сидел и ровно стучал.
Дальше дело техники: посчитали, что шесть секунд — это длина реверберационного хвоста звука капли. Хвост зациклен, а на месте склейки перепад в два сэмпла — вот и весь скрежет. Две строчки с фейдом на сто сэмплов в точке стыка, и гул остался только тот, который мы сами хотели.
Записали себе правило: любой зацикленный буфер — с фейдом на стыке, без исключений, даже если глазами шов не виден. Обидно не то, что долго искали, а то, что хвост этот писал кто-то из нас, и никто не помнит, кто. Говорят, это нормально.
Заодно собрали и выложили раздачу v0.5.1 — ту самую, из которой наконец было что собрать. Полная версия с исходниками арта, саундтреком и утилитами, плюс лёгкая веб-сборка одним файлом. Если у кого-то в руинах что-то заскрежещит — теперь уже не должно.
Дальше — короткий ролик для плейтестов, с субтитрами и без озвучки. Раскадровка с салфетки пережила вторую редакцию: было три минуты, стало девяносто секунд, и стало лучше. Кадры записываем теперь во время игры, как учит нас та суббота.
2026-10-12
Выходные со стражем: сброс сцены и первый трейлер
Договорились на выходных сделать две вещи — сброс сцены после смерти и первую нарезку трейлера. Сделали полторы. С обычной для нас арифметикой: сброс съел субботу целиком, а трейлер получился не нарезкой, а кучей материала, из которого непонятно что резать.
Сброс сцены звучал как «верни стража на место и всё». На деле оказалось, что после смерти игрока не перезапускается вообще ничего: капли в руинах висят в воздухе, двери остаются открытыми, а один таймер капель шел в минус уже минут двадцать и наконец переполнился в целое число. Пришлось не чинить по одному, а честно пересоздавать комнату целиком: сбросили всё состояние в отдельный объект и собираем сцену заново из него. Дольше, зато после смерти мир выглядит как в первый раз. Ну, почти: нашли, что при пересоздании дважды запускался звук эха, и руины гудели как вокзал. Одна строчка, час поиска.
Трейлер — отдельная история. Насмотрелились чужих роликов, составили раскадровку на салфетке, а когда сели резать — выяснилось, что у нас нет ни одного кадра, где игру видно дольше трёх секунд без паузы в меню. Хороший урок: записывать видео стоит во время игры, а не после. Собрали полторы минуты, из которых полминуты — страж, и то в основном его глаза на плечах. Основную тему на видео подпустили, и стало почти не стыдно. Почти.
Скрежет так и не нашли, но сузили круг: вырубали по одному источнику звука в пещере, и скрежет остался даже с полностью тихой сценой. Значит, это не ассет и не эхо — где-то в миксе дергается сам буфер. Отложили до среды, гул пока держит атмосферу один.
На неделе: короткий ролик для плейтестов (без озвучки, с субтитрами), и надо наконец выбрать дату для следующей раздачи сборки — v0.5.1 уже есть из чего собрать.
2026-10-10
Страж глубины: бой прошёл, не упал
Сегодня впервые дошли до конца боя со стражем не через чит-режим. Не выиграли — страж дожал на третьей фазе, когда у него открываются глаза на плечах и частота рывков растёт почти вдвое. Но три фазы продержались целиком, ни одна не сломалась, ни один таймер не ушёл в минус. Для нас это уже результат: неделя назад бой распадался на второй.
Что помогло: вчерашний массив таймеров и отдельный проход для анимации. Когда все состояния лежат в одном месте, видно, что третья фаза просто не влезала в старые лимиты — рывок начинался раньше, чем заканчивалась анимация замаха, и страж на долю секунды зависал в воздухе. Не «сложно», а криво. Подняли длину замаха на четыре кадра, и зависание исчезло.
Зато вылезло новое и неприятное: после смерти игрока страж не возвращается на стартовую точку, а остаётся стоять там, где убил. Игрок возрождается — а босс уже в двух экранах, смотрит в стену. Это, наверное, даже страшнее задуманного, но руины после этого не перезапускают капели и двери, и весь уровень превращается в кашу. Завтра будем честно сбрасывать сцену.
Из мелочей: гул стража, который оставили на прошлой неделе, в бою всё-таки перегружает низ. Пришлось срезать всё ниже 60 Гц — на ноутбуочных колонках разница заметна сразу, стало суше и ровнее. Скрежет по-прежнему не нашли, гул теперь не единственная ставка.
Планы на выходные скромные: сброс сцены, потом первая нарезка трейлера из того, что уже есть. Трейлер — та ещё пытка для перфекциониста, но без него к плейтесту лучше не подходить.
2026-10-08
Страж глубины: первый настоящий бой
Вчера записали сюда, что пора, — и это сработало лучше любого напоминания в календаре. Утром открыли игру, поставили игрока в пещеру перед стражем и честно попробовали умереть. Получилось с третьей попытки, и это хороший знак: два первых раза мы уворачивались не потому, что научились, а потому что помнили таблицу состояний наизусть.
Пустая пещера и живой игрок — разные вселенные. Первое, что вылезло: страж не разворачивался, если игрок пробегал у него за спиной вплотную. В таблице это состояние было, в коде — тоже, но проверка смотрела только вперёд на три тайла, а игрок проскакивал за спиной за кадр. Поставили конус поворота, и страж перестал быть удобно слепым. Умерли ещё дважды, уже честно.
Вторая находка — ритм. Шесть состояний в отладке перебирались по очереди, а в бою два из них слипались: приседание перед рывком длилось так недолго, что глаз не успевал его прочитать. Мы-то знали, что сейчас будет рывок, а игрок без нашей бумажки — нет. Растянули приседание на треть дольше — и уворот стал возможным, но не гарантированным. Как раз то чувство, которое мы и хотели.
Звук в бою решили пока не трогать: страж молчит, и, честно говоря, молчание работает. Тишина перед рывком читается сама. Может, вернёмся к скрежету позже, а может, оставим как фичу — у нас уже был удачный случай, когда случайно оставленное стало правильным.
Итог дня: бой проходим, страж бьёт больно, урона у него пока больше, чем надо. В пятницу хотим пригласить первого живого тестера — не игрока из интернета, а друга, который игру не видел вообще. Посмотрим, сколько попыток уйдёт у человека без бумажки. Есть подозрение, что после этого таблица пополнится.
2026-10-07
Страж глубины: сначала шёпот, потом пыль
Первая половина дня ушла на одну функцию из той самой таблицы: рассечение таймеров стража на состояния. Оказалось, что «приседает перед рывком» и «отдыхает после промаха» в коде были одним и тем же местом с двумя флагами — и один из флагов никто не читал с весны. Прочитал, подумал, выкинул. Стражу это пока не помогло, но файл стал на восемнадцать строк короче.
Зато остальное пошло легче, чем ждали. Поведение переписали маленькими шагами: вынесли таймеры в один массив, анимацию — в отдельный проход, и внезапно покачивание стража на месте перестало дёргаться при паузе. Багу, судя по таблице, месяц и больше — просто раньше его прятал шум из отрисовки. Вот вам и аргумент за чистку, который приятно получить без боли.
К вечеру дошли до звука. У стража его не было совсем: он просто возникал из темноты и молчал. Попробовали низкий гул на входе и короткий скрежет на замахе. Гул оставили, скрежет — нет: на фоне капели из руин он звучал так, будто стражу наступили на ногу. Будем искать что-то суше.
На бой целиком пока не заходили — слишком рано. Но в пустой пещере, без игрока, он уже отрабатывает все шесть состояний по очереди, и это первый раз, когда на бумажку и на экран смотрится одинаково. Завтра, если ничего не посыплется, первый настоящий прогон. Записываю сюда, чтобы не передумать.
2026-10-03
Страж глубины: открыли и составили карту
Смелости хватило ровно на сутки: вчера пообещали открыть код стража глубины — и открыли. Файл ждал с августа, и мы его, честно говоря, побаивались: это единственная часть игры, которая старше уровней. Стража писали ещё до дверей и сохранений, когда у игры не было ничего, кроме сетки и камеры, — и код честно помнит те времена.
Первое впечатление — не код, а слоёный пирог. Поведения собраны из таймеров: каждый замах, каждый разворот держится на своём счётчике, и все они лежат вперемешку с отрисовкой. Менять что-то одно — значит проверить пять соседних мест. Поняли, почему откладывали: страх был не перед боссом, а перед файлом.
День ушёл на инвентаризацию. Выписали на бумажку всё, что страж умеет: покачивается на месте, приседает перед рывком, бьёт, отдыхает после промаха. Набралось шесть состояний, и три из них в коде неразличимы — отличаются только значениями таймеров. Составили таблицу в три колонки: состояние — что видит игрок — что трогает код. К вечеру таблица заполнилась, и смотреть на файл стало почти не страшно.
Само переписывание не начали. После случая с капаньем знаем: начинать рефакторинг вечером — способ подарить следующее утро поиску багов. Зато теперь у стража есть карта, и по ней можно ходить не спотыкаясь. Если всё пройдёт гладко, через пару записей он перестанет быть единственной частью игры, которую мы открываем с выдохом. А бой с ним, кажется, даже станет читаемее — половина «непредсказуемости» босса оказалась просто таймерами, которые никто не помнит, зачем настраивал.
2026-10-02
День чистки руин
Как и обещали, взяли мелочи из руин — то, что копилось с установки дверей и сохранений. Список на бумажке был короткий, но к вечеру он вырос вдвое: одна закрытая мелочь всегда открывает соседнюю.
Первой полегла коллизия у дверей: слизень, если очень постараться, протискивался в дверной проём боком — на один пиксель щель была шире, чем его тело. Игрок туда не пролезал, а слизень — пожалуйста. Починилось сдвигом рамки на тайл, но нашли мы его, только записав короткое видео и проглядев покадрово.
Потом мох. На нижних кромках кирпичей он рисовался поверх факела, и при движении камеры казалось, что пламя дрожит вместе с камнем. Не дрожит — это мох мигал. Разнесли слои отрисовки, и мох остался мхом.
Из приятного: точка входа для сохранения на руинах теперь ищет твёрдый пол, а не «примерно центр комнаты». Раньше сцена возрождала игрока на тайл выше земли, и полсекунды он падал. Мелочь из разряда «никто не заметит, но мы-то знаем». Завтра — страж глубины, если хватит смелости открыть тот код.
2026-09-29
Капанье, пауза и одна строчка
Начали с пункта номер один из октябрьского списка — капанье в пещерах. Оно всё ещё играло при паузе, хотя сами точки звука давно расставлены. Думали, придётся переписывать звуковой модуль: у нас каждый источник — свой цикл с таймером, и пауза про него просто не знает.
Разобрались за полдня. Оказалось, что у звуков есть два состояния — «играет» и «на паузе» — а у капанья было только первое, потому что при его добавлении паузы ещё не существовало. Этому коду полгода, и он честно не знал, что мир изменился. Добавили второе состояние везде, где были источники, — капанье замолчало вместе с игрой. Одна проверка в трёх местах, но сначала её надо было найти.
Заодно поймали забавный баг: после паузы капли начинали сыпаться залпом, как будто догоняли упущенное. Таймер-то работал, просто не останавливался. Теперь при выходе из паузы каждый источник ждёт свою случайную задержку заново — и звучит как обычно, без очереди.
Проверили на пещере и на руинах: там источников меньше, но логика та же, и там тоже замолчало. Звук — самая обманчивая часть движка: кажется, что он «просто играет», пока не попробуешь его остановить. Завтра хотим взять мелочи из руинов, пока руки тёплые.
2026-09-28
Планы на месяц: без дедлайнов, но с порядком
Праздничная неделя почти ничего не дала — и, кажется, это правильно. Не заставляли себя догонять, а просто составили список того, что точно будем делать в октябре. Получилось коротко, потому что длинные планы мы традиционно не выполняем.
Первое — доделать звук в пещерах: точки звука уже расставлены, но капанье всё ещё слышно при паузе. Второе — навести порядок в руинах после правок: после установки дверей и сохранений накопились мелочи, которые лучше почистить, пока не разрослись. Третье — вернуться к стражу глубины: он пока единственный босс и единственная часть игры, где ещё страшно открывать код.
Ещё в списке — «мелкие обиды» бумажкой у монитора: то, что бесит каждый день, но всегда некогда. Пролистали за вечер штук восемь, половину закрыли по паре минут каждая. Кнопка паузы, например, давно закрывалась по Escape, а по клику — нет.
Сроков не ставим. В прошлый раз обещание «к концу месяца» обернулось тремя неделями молчания в devlog, теперь просто работаем и записываем, что получается.
2026-09-22
Сохранение: три попытки и один JSON
Дошли до сохранения прогресса — того самого пункта из планов, который всё откладывался. Первая попытка была честная: писать состояние игры целиком, каждый кадр позиции слизней и сфер. Через полчаса стало ясно, что мы сохраняем не игру, а её мусор. Слизни и не должны переживать перезагрузку — пусть живут своей слизниной жизнью заново.
Вторая попытка — противоположная: сохранять только номер уровня и собранные сферы. Мало. Выйдешь посреди комнаты, вернёшься — и стоишь в начале, хотя полкомнаты пройдено. Почувствовали себя игроками, которым не доверяют, и переделали.
Остановились на третьей: уровень, сундуки-сферы (какие собраны), двери и точка входа — последний «безопасный» тайл, где игрок стоял на твёрдом полу. Один маленький JSON в localStorage, никаких облаков и аккаунтов. Сегодня впервые вышли из игры посреди руинов и попали ровно туда же, с тем же числом сфер у двери. Мелочь, а приятно.
Из грабель на будущее: не сохранять ничего во время смерти и сразу после перехода через дверь — иначе можно зафиксировать игрока между уровнями. Проверили на пещере, руинах пока вручную.
2026-09-20
Руины: эхо и первый звук
Дошли руки до звука. Долго откладывали, потому что боялись не звука, а баланса: в маленькой игре тишина работает лучше плохого эмбиента. Но руины без эха не руины — у них же вся атмосфера в пустоте. Собрали три слоя: ветер сверху, редкое капанье и низкий гул где-то под полом. Всё на синтезе, без записи с микрофона — у нас и микрофона-то нет.
Капанье сначала привязали к тайлам воды, и это оказалось ошибкой: в комнате без воды капало громче, чем в затопленной. Переписали на «точки звука» — их расставляет рука, а не генератор, и сразу стало контролируемо. На всю комнату хватает двух-трёх точек, больше — каша.
Неожиданная находка: один и тот же гул в пещере звучал нормально, а в руинах — гулко и пусто, ровно как надо. Оказалось, мы случайно оставили с прошлой сцены задержку на отражения — вот она и сработала эхом. Оставили как есть и записали в комментарии «не трогать, это фича».
2026-09-16
Руины: первый проход
Начали третий уровень — руины. Как обычно, сначала бумага: набросали планировку на клетчатом листе, чтобы понять масштаб, и только потом сели за тайлы. Правило прежнее — никаких новых цветов, всё из закреплённой палитры 16. Кирпич получается из того же камня, что пещера, но светлее и суше, а мох добавляем точечно, по верхним кромкам.
Сломали и починили трещины: на сетке 32×32 растрескавшийся пол читался как шум — издалека казалось, что тайл «грязный». Оставили трещины толщиной в один пиксель и не на каждом тайле, а на каждом третьем-четвёртом. Стало тише и правдоподобнее.
Попутно вылез старый баг: дверь на новом уровне открывалась от сфер, собранных на предыдущем, — счётчик не обнулялся при смене уровня. Починили за полчаса, но осадочек остался: теперь перед сборкой уровня гоняем пустой проход и проверяем дверь отдельно.
2026-09-12
Что дальше
В планах звук, сохранение прогресса и третий уровень — руины. Плюс хотим переписать атласы под наш же формат, чтобы сборка меньше весила.
Скачать сборку можно на странице «скачать». Обратная связь приветствуется, но отвечаем медленно — делаем всё в свободное время.
2026-08-21
Прототип v0.4: уровни и дверь
Собрали два уровня целиком: сферы, слизни, дверь. Дверь открывается только когда собрано всё — это заставляет проходить уровень внимательно, а не бежать по прямой.
Выложили играбельную сборку в браузере. Она маленькая, без звука и сохранений, но в неё уже можно играть.
2026-07-08
Свои утилиты: pxpack
Собирать спрайты руками надоело, и мы написали маленький упаковщик: он берёт папку с картинками, раскладывает их по листу и выдаёт JSON-атлас. Лежит в разделе «Утилиты».
Второй инструмент, paltool, приводит любую картинку к нашей палитре — чтобы чужие ассеты не выбивались из стиля.
2026-06-15
Прыжок: двенадцать итераций одной константы
Высота прыжка — это не «число», а ощущение. Перебирали ускорение и начальную скорость, пока не вышло ровно два с половиной тайла: этого хватает на платформу выше, но не даёт перелетать уровни.
Заодно добавили прощение за позднее нажатие: если игрок прыгнул через несколько кадров после края, прыжок всё равно считается. Играть стало мягче.
2026-05-27
Свет, факелы и глубина
Пробовали туман, пробовали градиент. Оставили простой приём: дальний слой темнее, ближний — контрастнее. Одна строка кода, а сцена сразу становится объёмной.
Мелкие детали дают больше, чем эффекты: пара кустов на переднем плане, мох на камнях, блики на воде.
2026-04-19
Слизни, урон и чувство удара
Добавили врагов. Слизень должен читаться за долю секунды: цвет, глаза, покачивание. Два дня ушло на то, чтобы удар сверху давал ощущение «пружины», а не просто убирал врага.
Игрок получает короткую неуязвимость после урона — без неё застреваешь в чужой анимации и теряешь все сердца разом.
2026-03-04
Тайлы, палитра и первая пещера
Зафиксировали палитру из 16 цветов и больше её не меняем: так сцены выглядят как одна игра, а не как набор чужих картинок.
Собрали первую пещеру: кладка, платформы, факелы. Свет сделали не настоящий, а «нарисованный» — пятнами, как в играх 90-х. Дешево и работает.
2026-02-11
Начали, и сразу медленно
Мы давно хотели сделать что-то своё, но не большое. Итог: 2D-платформер на пиксельной тайловой сетке, движок пишем сами, без готовых фреймворков — хотелось понять каждый шаг.
Первая неделя ушла на сетку 32×32 и камеру. Оказалось, что самое сложное — не физика, а аккуратность: один лишний пиксель в кромке травы, и вся сцена выглядит грязной.