Unlaw 3.13.0: раннер Dash и новый вывод игр в терминале
Что я сделал в Unlaw 3.13.0. Новая игра Dash, бесконечный раннер в терминале и в ul desk, и переписанный с нуля вывод игр, который больше не тормозит.
原文の言語:ロシア語
Вышел Unlaw 3.13.0. Обновиться можно командой ul update.
Dash: бесконечный раннер
В аркаде ul game появилась шестая игра. Механика как у динозаврика, который браузер показывает без интернета, но персонаж и рисовка свои: бежит лиса, нарисованная блочными символами.
- Лиса бежит сама, мир едет навстречу и постоянно ускоряется.
- Прыжок: пробел, стрелка вверх, W или клик. Вниз в воздухе ускоряет падение, вниз на земле пригибает.
- Препятствия: кактусы трёх размеров группами по одному-три и птицы на трёх высотах. Низкую надо перепрыгнуть, среднюю можно перепрыгнуть или пройти пригнувшись, под высокой можно просто пробежать.
- Расстояние между препятствиями растёт вместе со скоростью, поэтому честная игра всегда проходима. Это проверяет тест: бот на 20 случайных раскладках бежит по 5 минут на каждой сложности и не врезается.
- Очки идут за пройденное расстояние, каждые 100 очков счёт мигает, после 700 наступает ночь. Облака плывут медленнее земли.
- Три сложности, как у остальных игр. На hard быстрый старт, короткие промежутки, птицы с самого начала, а после группы кактусов иногда сразу летит птица.
Терминал не сообщает, сколько держится клавиша, поэтому высота прыжка фиксированная, а приседание длится треть секунды и продлевается автоповтором.
Запустить: ul game dash. В ul desk игра появилась на вкладке Games сама, рекорды общие с терминалом.
Вывод игр в терминале: переписан с нуля
Игры в терминале подтормаживали, и я нашёл почему. Каждый кадр, 30 раз в секунду, программа заново печатала весь экран и сбрасывала стиль на каждом цветном куске. На тетрисе в окне 100×30 выходило около 15 КБ на кадр, почти 450 КБ в секунду.
Теперь программа держит предыдущий кадр и отправляет в терминал только изменившиеся клетки. Если на экране ничего не поменялось, не пишется ни байта. Если нажимать клавишу каждый кадр, выходит около 200 байт, примерно в 70 раз меньше. Кадры идут ровно каждые 1/30 секунды: раньше время отрисовки прибавлялось к паузе между кадрами.
Заодно я переделал внешний вид:
- В терминалах с полным цветом, как Ghostty, игры рисуются своей палитрой. В остальных остаются обычные 16 цветов.
- Новое меню аркады: заголовок, описание каждой игры, рекорды справа.
- У каждой игры строка со счётом над полем, рамки со скруглёнными углами, поле по центру окна.
- Окна паузы и конца игры с тенью поверх затемнённой игры.
- Если уменьшить окно посреди игры, она встаёт на паузу и ждёт, а не рисует мусор.
- Движения мыши больше не забивают очередь ввода.
- Терминал восстанавливается при любом выходе, даже если программа упала.
В ul desk игры выглядят как раньше: страница получает тот же поток кадров, его формат не менялся.
Что не изменилось
Я ничего не удалял, старые команды и конфиги работают. Правила игр и рекорды остались прежними. Команды, которые вы отредактировали вручную, обновление не трогает.
Дальше
В планах по-прежнему локальная модель ul lm laya и память агента.