Лисп в изгнании
#лытдыбр Представьте себе, что у вас есть старенькая эргономическая клавиатура с механическими свичами, например, Dygma Raise, и худо-бедно она вас устраивала, но в какой-то момент в ней от старости начали дребезжать контакты и некоторые кнопки начали срабатывать…
#лытдыбр
Посмотрите-ка, какая красотка ко мне подъехала 😊 (только на крошки от печенья на столе не смотрите, мне стыдно))
Как всегда в генте, пришлось конпелировать ядро, чтобы перепрошить дефолтное расположение некоторых клавиш. Ну и этот текст неиронично набирал минуты три, потому что ортолинейная раскладка чудовищно непривычна 🙈
Посмотрите-ка, какая красотка ко мне подъехала 😊 (только на крошки от печенья на столе не смотрите, мне стыдно))
🔥12😱1🙏1🙈1
#лытдыбр
Мужчины такие типа "да нет у меня депрессии", а сами потом заменяют оконный менеджер на написанный на Haskell XMonad, чтобы почувствовать хоть что-то 😅
Мужчины такие типа "да нет у меня депрессии", а сами потом заменяют оконный менеджер на написанный на Haskell XMonad, чтобы почувствовать хоть что-то 😅
😁4💯3👍2😢1🏆1
#лытдыбр #haskell
Между делом потихоньку обживаю XMonad. Нравится гораздо больше i3, потому что в последнем очень часто в каких-то мелочах окна на рабочем столе ведут себя неким конкретным ненастраиваемым образом, и ты такой с лицом грустной лягушки думаешь, "ну вот, теперь я так живу", а в XMonad можно тонко настроить любую мелочь.
Ну и да, у нейросетей тоже едет крыша от попыток писать код на Haskell (см. рис. 1) 😂
Между делом потихоньку обживаю XMonad. Нравится гораздо больше i3, потому что в последнем очень часто в каких-то мелочах окна на рабочем столе ведут себя неким конкретным ненастраиваемым образом, и ты такой с лицом грустной лягушки думаешь, "ну вот, теперь я так живу", а в XMonad можно тонко настроить любую мелочь.
Ну и да, у нейросетей тоже едет крыша от попыток писать код на Haskell (см. рис. 1) 😂
😁5
#лытдыбр #мемасики #clojure
Создал так называемый интернет-мэм, начитавшись в социальной сети Тваттер срачей "Авторизация через OAuth-провайдеров vs классическая самодельная по паролю", в которых апологеты последней всё никак не могут внятно сформулировать, чем плоха авторизация с помощью провайдера таковой, который уже решил все вопросы с безопасностью, "GOOGLE BAD" и всё тут.
В веб-сервисе на Clojure, который я пилю в свободное от работы время, конечно, авторизация будет отдана на аутсорс (уже наладил через Google), я пока не настолько сошёл с ума, чтобы вручную реализовывать такую важную вещь, или полагаться на Clojure-овский buddy, который, мягко говоря, заброшен 😅
Создал так называемый интернет-мэм, начитавшись в социальной сети Тваттер срачей "Авторизация через OAuth-провайдеров vs классическая самодельная по паролю", в которых апологеты последней всё никак не могут внятно сформулировать, чем плоха авторизация с помощью провайдера таковой, который уже решил все вопросы с безопасностью, "GOOGLE BAD" и всё тут.
В веб-сервисе на Clojure, который я пилю в свободное от работы время, конечно, авторизация будет отдана на аутсорс (уже наладил через Google), я пока не настолько сошёл с ума, чтобы вручную реализовывать такую важную вещь, или полагаться на Clojure-овский buddy, который, мягко говоря, заброшен 😅
👍3
#лытдыбр #common_lisp
Good news, everyone! В этом году состоится регулярный весенний Lisp Game Jam, только организаторы его зачем-то сдвинули на месяц, так что он будет проходить с 17 мая по 27. Как раз самое время, чтобы вытащить себя из депрессивной фазы и напилить кодовых заготовочек к началу джема, чем я завтра и займусь — традиционно отмечу праздник труда, собственно, ударным трудом 😋
Good news, everyone! В этом году состоится регулярный весенний Lisp Game Jam, только организаторы его зачем-то сдвинули на месяц, так что он будет проходить с 17 мая по 27. Как раз самое время, чтобы вытащить себя из депрессивной фазы и напилить кодовых заготовочек к началу джема, чем я завтра и займусь — традиционно отмечу праздник труда, собственно, ударным трудом 😋
itch.io
Spring Lisp Game Jam 2024
A game jam from 2024-05-17 to 2024-06-03 hosted by David Thompson & technomancy. Lisp Game Jam is a recurring game jam taking place for a full 10 days. After the jam has finished, 3 days are given to everyone to try out the game su...
👏7🔥1
Надо же, ASMR установка Gentoo ASMR, или Autonomous Sensory Meridian Response, если кто не в курсе, это жанр видео, в которых симпатичные девушки шепчут и шкрябают коготками в выкрученный на полную чувствительность микрофон .
Попробовать, что ли, себя в этом жанре. Так и представляю, ASMR "выгоревший сеньор клепает видеоигры на Common Lisp" 😅😂
Попробовать, что ли, себя в этом жанре. Так и представляю, ASMR "выгоревший сеньор клепает видеоигры на Common Lisp" 😅😂
😁3😍1
Forwarded from memory heap (Artyom "avp" Poptsov)
#linux
Wolfgang, "ASMR Installing Gentoo Linux":
https://youtu.be/CopPj3S3YQ0
Я не любитель ASMR, но выглядит занятно — процесс установки хорошо показан, ничего особо лишнего. Напомнило, как в былое время я сам устанавливал Gentoo (в том числе, в режиме повышенной сложности — Hardened Gentoo.) Полезный опыт был, не жалею, что время потратил на изучение нюансов настройки и сборки ядра, а также окружения.
Зажигание свечи на перед настройкой и сборкой ядра (таймкод 10:00) очевидно призвано отпугнуть тёмные силы перед началом священного процесса, как пользователи отметили в комментариях к видео на YouTube. 😉 Хотя я бы на месте автора зажёг пять свечей и поставил системный блок в центр получившегося круга.
Wolfgang, "ASMR Installing Gentoo Linux":
https://youtu.be/CopPj3S3YQ0
Я не любитель ASMR, но выглядит занятно — процесс установки хорошо показан, ничего особо лишнего. Напомнило, как в былое время я сам устанавливал Gentoo (в том числе, в режиме повышенной сложности — Hardened Gentoo.) Полезный опыт был, не жалею, что время потратил на изучение нюансов настройки и сборки ядра, а также окружения.
Зажигание свечи на перед настройкой и сборкой ядра (таймкод 10:00) очевидно призвано отпугнуть тёмные силы перед началом священного процесса, как пользователи отметили в комментариях к видео на YouTube. 😉 Хотя я бы на месте автора зажёг пять свечей и поставил системный блок в центр получившегося круга.
YouTube
ASMR Installing Gentoo Linux (No Talking, Mechanical Keyboard, 4K)
The long-awaited rework of my 2018 ASMR video is finally here! This time with binaural sound, a new CPU and in glorious 4K.
I cut out most of the long compilation segments, (as well as me stumbling through menuconfig), the installation itself took about 10…
I cut out most of the long compilation segments, (as well as me stumbling through menuconfig), the installation itself took about 10…
👍1🔥1
#лытдыбр #common_lisp
Наконец на этой неделе в рамках подготовки к предстоящему весеннему Lisp Game Jam (уже в следующую пятницу! 😱) и заодно раздербанивания кода
Получившуюся библиотеку
Наконец на этой неделе в рамках подготовки к предстоящему весеннему Lisp Game Jam (уже в следующую пятницу! 😱) и заодно раздербанивания кода
d2clone-kit
на отдельные красивые слабо связные компоненты, взял на себя труд начать делать TODO-шку, которой уже года два минимум, а именно — переписать по-человечески парсер формата aseprite для одноименного редактора спрайтов. Взял для этого библиотеку lisp-binary, которая позволяет не только описать в декларативном виде внутренности формата (см. рис. 1), но и легко расширяется кастомным кодом, запускаемым во время разбора файла, в общем, невероятно клёвая и мощная штука — по сути, за пару дней я смог накатать парсер довольно нетривиального бинарного формата.Получившуюся библиотеку
cl-aseprite
выложу в паблик чуть позже (она требует основательного причёсывания), а в понедельник можно начать поверх неё делать загрузку персонажей в заготовочку для геймджема 😊🔥5❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
#лытдыбр #common_lisp
Наконец спустя несколько лет экспериментов появилось ощущение, что я использую редактор карт Tiled на полную катушку (есличо, вот эти чувачки на башнях — это полноценные объекты в смысле ECS с отдельным поведением, у которых можно настроить не только анимацию, но и любые другие компоненты, и всё это в самом редакторе) 🔥
Наконец спустя несколько лет экспериментов появилось ощущение, что я использую редактор карт Tiled на полную катушку (есличо, вот эти чувачки на башнях — это полноценные объекты в смысле ECS с отдельным поведением, у которых можно настроить не только анимацию, но и любые другие компоненты, и всё это в самом редакторе) 🔥
🔥11👍1
This media is not supported in your browser
VIEW IN TELEGRAM
#лытдыбр #common_lisp
Ну штош, к начавшемуся этим утром Spring Lisp Game Jam 2024 готов 😊 Накоммитил мелких фиксов в свои библиотеки с утра же и уже к ночи изобразил вот такое дерево поведения (см. вид. 1).
Мог бы быть и поготовее, если бы на позапрошлой неделе не депрессировал и сделал бы хотя бы базовую боёвку, но, как говорится, а выходные на что 😁
Ну штош, к начавшемуся этим утром Spring Lisp Game Jam 2024 готов 😊 Накоммитил мелких фиксов в свои библиотеки с утра же и уже к ночи изобразил вот такое дерево поведения (см. вид. 1).
❤6👍1
#новости
Меж тем работая, не покладая рук, пропустил совершенно замечательное — проект по возрождению лисповой системы GOAL, работающей под капотом у игр Jak and Daxter и The Last of Us, под названием OpenGOAL (только зацените, какой у них клёвый лендинг!)
Прям аж сердце радуется при взгляде на большую кодовую базу игры на Common Lisp 🤩
Меж тем работая, не покладая рук, пропустил совершенно замечательное — проект по возрождению лисповой системы GOAL, работающей под капотом у игр Jak and Daxter и The Last of Us, под названием OpenGOAL (только зацените, какой у них клёвый лендинг!)
Прям аж сердце радуется при взгляде на большую кодовую базу игры на Common Lisp 🤩
opengoal.dev
OpenGOAL | OpenGOAL
The unofficial native PC Port for Jak & Daxter
🥰8
This media is not supported in your browser
VIEW IN TELEGRAM
#лытдыбр #common_lisp
Ну чё, пацаны, стенка на стенку? 😁
Сколько ж я с анимациями наебался, просто жуть. А ещё примерно столько же нужно потратить на отладку деревьев поведения у персонажей 😵💫
Ну чё, пацаны, стенка на стенку? 😁
🔥16👍2
#лытдыбр #common_lisp
Итак, пришло время уже полюбившейся постоянным читателям рубрики "ебучий виндус наносит ответный удар". В понедельник с утра мой сотоварищ, помогающий с геймдизайном (и левел-дизайном 🤭) пишет, мол, скинь ассеты к нашей игре на геймджем. Нет проблем, говорю, я тебе сейчас прямо текущий билд скину, там и ассеты, и сразу увидишь, как они в игре будут выглядеть.
У товарища виндус, поэтому я раскочегариваю свой докер-образ с Wine, MSYS и такой-то матерью, позволяющий мне собирать билды игр на Common Lisp под windows, не касаясь этой залупной ОС даже десятиметровой палкой, творю заветное волшебное заклинание
На всякий случай пытаюсь триггернуть билд с этим новым докер-образом в старом проекте — ну да, залипает, и CI прибивает билд по таймауту. Я понимаю, что это катастрофа, потому что отсутствие билда игры под венду сильно понизит возможность участников джема заценить нашу игру и поставить нам положительную оценочку.
Пытаюсь собрать образ с версией Wine постарше (8.0 вместо 9.0) — SBCL вообще при запуске падает с
Окей, дефолтный сишный тулчейн, с которым я всё собираю, — это GCC и UCRT. Пробую собрать всё вместе с самим SBCL Clang-ом — на том же этапе кланговский линкер ругается, мол, не понимаю флажок
Вместо этого пробую вместо UCRT старый добрый виндусовый
Попытка запуска SBCL, собранного с UCRT, в msvcrt-шном окружении, предсказуемо приводит к лисповому кондишену
(1/2)
Итак, пришло время уже полюбившейся постоянным читателям рубрики "ебучий виндус наносит ответный удар". В понедельник с утра мой сотоварищ, помогающий с геймдизайном (и левел-дизайном 🤭) пишет, мол, скинь ассеты к нашей игре на геймджем. Нет проблем, говорю, я тебе сейчас прямо текущий билд скину, там и ассеты, и сразу увидишь, как они в игре будут выглядеть.
У товарища виндус, поэтому я раскочегариваю свой докер-образ с Wine, MSYS и такой-то матерью, позволяющий мне собирать билды игр на Common Lisp под windows, не касаясь этой залупной ОС даже десятиметровой палкой, творю заветное волшебное заклинание
wine busybox sh package.sh windows
и... сборка не работает, залипая на вызове лиспом сишного компилятора для каких-то потрохов CFFI.err:sync:RtlpWaitForCriticalSection section 000000007B7192B0 "?" wait timed out in thread 01a8, blocked by 0000
, — дружелюбно сообщает Wine. "Ёбаный рот", — думаю я, — "возможно, что-то сломалось в комбинации версии сишного тулчейна и версии Wine". Пикантности ситуации придаёт то, что я, хоть и загружаю эти докер-образа на Docker Hub, тегов к ним не проставляю, поэтому старые версии недоступны (они буквально затираются новыми), и откатиться на версию, работавшую ещё в феврале для моей предыдущей игры не получится.На всякий случай пытаюсь триггернуть билд с этим новым докер-образом в старом проекте — ну да, залипает, и CI прибивает билд по таймауту. Я понимаю, что это катастрофа, потому что отсутствие билда игры под венду сильно понизит возможность участников джема заценить нашу игру и поставить нам положительную оценочку.
Пытаюсь собрать образ с версией Wine постарше (8.0 вместо 9.0) — SBCL вообще при запуске падает с
virtual stack overflow
, приехали. Пробую staging версию Wine (9.9), там опять RtlpWaitForCriticalSection timed out
. Каждая попытка, кстати, занимает по 40+ минут на сборку образа и пару минут на проверку, так что я этим весельем занимался между делом весь понедельник и вторник.Окей, дефолтный сишный тулчейн, с которым я всё собираю, — это GCC и UCRT. Пробую собрать всё вместе с самим SBCL Clang-ом — на том же этапе кланговский линкер ругается, мол, не понимаю флажок
--export-dynamic
. Возникает мысль сделать pull request в саму либу CFFI, отключающий этот флажок для винды, но тут же пропадает — в этом мастодонте некоторые пулл-реквесты висят по пять лет и более.Вместо этого пробую вместо UCRT старый добрый виндусовый
msvcrt.dll
вместо сишной стандартной библиотеки, но и тут ждёт облом — SBCL пытается импортировать из неё функции log1p
и log2
, которые эта доисторическая пародия на стандартную библиотеку C не берёт на себя труд экспортировать. Что забавно, SBCL при этом компилируется и запускается, но при запуске жалуется, что missing required foreign symbol log1p
, а при попытке вызова функции log
ожидаемо крашится.Попытка запуска SBCL, собранного с UCRT, в msvcrt-шном окружении, предсказуемо приводит к лисповому кондишену
Unhandled memory fault
. На этом заканчивается понедельник.(1/2)
😱3
Лисп в изгнании
#лытдыбр #common_lisp Итак, пришло время уже полюбившейся постоянным читателям рубрики "ебучий виндус наносит ответный удар". В понедельник с утра мой сотоварищ, помогающий с геймдизайном (и левел-дизайном 🤭) пишет, мол, скинь ассеты к нашей игре на геймджем.…
(2/2)
Во вторник пытаюсь понять, в каком конкретно компоненте проблема, может, в какой-то из DLL, от которых зависят собранные MSYS-овским GCC бинарники? Таких несколько —
Качаю вручную архив со старой версией
К вечеру уже совсем детально заныриваю в проблему. SBCL запускает GCC для компиляции потрохов пакета CFFI, а тот залипает. Окей, давай я сам попробую этот файл скомпилить. Залипает. А hello world GCC вообще может скомпилить? Может. Странно, так залипает, а так нет. После получаса ковыряний понимаю, что залипает на самом деле вызываемый GCC линкер
Тогда я пытаюсь заменить пакет
TL;DR: в рот ебал этот ваш виндус.
Во вторник пытаюсь понять, в каком конкретно компоненте проблема, может, в какой-то из DLL, от которых зависят собранные MSYS-овским GCC бинарники? Таких несколько —
libgcc_s.dll
и libstdc++-6.dll
из пакета gcc-libs
, libwinpthread-1.dll
и... и тут меня осеняет, косяки с WaitForCriticalSection
и виндусовая реализация POSIX threads, ну вот оно!Качаю вручную архив со старой версией
libwinpthread
— с той, которая от февраля и точно должна работать, потому что была в предыдущей версии докер-образа, распаковываю его в систему и... нихуя, точно также залипает. Психанув, закидываю самую старую версию либы, которая доступна, и, конечно, это тоже не помогает.К вечеру уже совсем детально заныриваю в проблему. SBCL запускает GCC для компиляции потрохов пакета CFFI, а тот залипает. Окей, давай я сам попробую этот файл скомпилить. Залипает. А hello world GCC вообще может скомпилить? Может. Странно, так залипает, а так нет. После получаса ковыряний понимаю, что залипает на самом деле вызываемый GCC линкер
ld.exe
, и только тогда, когда вызван с ключом --export-dynamic
, который, кстати, поддерживается только для ELF-файлов, а для виндусовых .exe
не имеет смысла, о чём ld и сообщает руганью типа warning: --export-dynamic is not supported for PE+ targets, did you mean --export-all-symbols?
перед тем, как залипнуть.Тогда я пытаюсь заменить пакет
binutils
, в который входит ld.exe
, на более старую версию — буквально минор на единичку меньше, и, о чудо, сборка проходит нормально! Матерясь, уже на ночь глядя включаю этот хак в докер-образ, собираю его (ещё 40 минут) и уже сегодня с утра наконец готов виндусовый билд текущего кода игры.TL;DR: в рот ебал этот ваш виндус.
💩6💯3
#лытдыбр #common_lisp
Конечно же, с игрой на джем уже проводил тесты вида "а что будет, если на карту накидать несколько сотен персонажей", и FPS как-то грустно проседает с двух тысяч до 800, а при совсем больших количествах (ближе к тысяче) и до 150 кадров в секунду.
Для анализа произволительности удалось заставить заработать замечательный cl-flamegraph Александра Артеменко (трюк в том, что сначала нужно грузить сам
Причём я даже догадываюсь, почему так — функция
Короче, по крайней мере хорошо, что понятно, где проблема 😁
Конечно же, с игрой на джем уже проводил тесты вида "а что будет, если на карту накидать несколько сотен персонажей", и FPS как-то грустно проседает с двух тысяч до 800, а при совсем больших количествах (ближе к тысяче) и до 150 кадров в секунду.
Для анализа произволительности удалось заставить заработать замечательный cl-flamegraph Александра Артеменко (трюк в том, что сначала нужно грузить сам
cl-flamegraph
, и только потом своё приложеньице). По результатам его работы видно (см. рис. 1) удивительное — львиная доля времени CPU тратится на вызов функции отрисовки спрайта через CFFI!Причём я даже догадываюсь, почему так — функция
al:draw-tinted-scaled-rotated-bitmap-region
, которую я вызываю, принимает на вход структуру с цветом по значению, что CFFI традиционно делает через жопу. А функции без цвета я использовать не могу, потому что мне надо одновременно вращать и масштабировать спрайт, а это в liballegro можно только в комплекте с цветом.Короче, по крайней мере хорошо, что понятно, где проблема 😁
❤7🙏1
#лытдыбр #common_lisp
Обнаружил себя в том месте своей жизни, в котором моя фантазия привела меня к описанию в коде проблематикиовечьего секса 😅😂
Обнаружил себя в том месте своей жизни, в котором моя фантазия привела меня к описанию в коде проблематики
🌚7😁4👍1
#лытдыбр #common_lisp
Ну штош, с приходом уикэнда весенний Lisp-геймджем '2024 выходит на финишную прямую, а значит, самое время опубликовать мою новую библиотеку, использованную в игре для джема, а именно — парсер для формата файлов редактора пиксельарт-анимаций Aseprite под названием cl-aseprite, благо во время разработки игры вроде бы баги выловил и сегодня с утра исходники причесал. Библиотека доступна по MIT лицензии и уже есть в Quicklisp-дистрибутиве LuckyLambda. Ура 😊🎉
Ну штош, с приходом уикэнда весенний Lisp-геймджем '2024 выходит на финишную прямую, а значит, самое время опубликовать мою новую библиотеку, использованную в игре для джема, а именно — парсер для формата файлов редактора пиксельарт-анимаций Aseprite под названием cl-aseprite, благо во время разработки игры вроде бы баги выловил и сегодня с утра исходники причесал. Библиотека доступна по MIT лицензии и уже есть в Quicklisp-дистрибутиве LuckyLambda. Ура 😊🎉
GitLab
Andrew Kravchuk / cl-aseprite · GitLab
Aseprite file format parser
🔥14👍3
#лытдыбр #проекты #common_lisp
Раз, два, три, четыре, пять, завершаю кранчевать 😂 После бурной разработки с товарищем сегодня в 3 утра по центральноевропейскому времени зарелизил игру для весеннего Lisp Game Jam '24: Cycle of Evil. Наверное, сегодня-завтра даже разрожусь постом-постмортемом)
P.S. itch.io прилёг полежать, поэтому вот ссылка проекта на Github.
Раз, два, три, четыре, пять, завершаю кранчевать 😂 После бурной разработки с товарищем сегодня в 3 утра по центральноевропейскому времени зарелизил игру для весеннего Lisp Game Jam '24: Cycle of Evil. Наверное, сегодня-завтра даже разрожусь постом-постмортемом)
P.S. itch.io прилёг полежать, поэтому вот ссылка проекта на Github.
itch.io
Cycle of Evil by Andrew, ViruScD
A fantasy-themed strategy/simulation with indirect player control. Available for Windows, macOS, Linux
🔥11❤🔥1❤1
#проекты #common_lisp
Ну штош, пришло время подвести итоги весеннего геймджемаи голосовать за других участников, а то уже время поджимает, а их больше, чем когда-либо . Вот они (без какого бы то ни было осмысленного порядка):
✔️ По мере разработки накоммитил кучу фиксов в свои библиотеки и даже опубликовал новую.
✔️ Иметь свой Quicklisp-дистрибутив удобно, можно иметь при сборке билда чётко те версии библиотек, которые тебе нужны.
✔️ В целом начинают вырисовываться очертания универсального 2D движка, который я давно вынашиваю в планах, а названия толкового ещё не придумал .
✔️ Думать и проектировать игры в терминах ECS невероятно прикольно, быстро и гибко. Типа, определяешь какие-то базовые ортогональные элементы данных, типа "дочерний объект", "позиция", "звуковой эффект", "спрайт", а потом их по-всякому между собой креативно комбинируешь.
✔️ Хорошо также иметь работающий, отлаженный и оптимизированный алгоритм поиска пути A*, но есть проблемки с дискретностью игрового пространства, т.е. очень часто персонаж, повинуясь
✔️ Декларативный UI — это каеф, даже если, как в моём случае, у него со всех сторон торчат уши нижележащей сишной библиотеки Nuklear.
✔️ Окончательно выяснилось слабое звено в плане производительности. Я-то комплексовал, что этим слабым звеном окажутся деревья поведения, создающие по одной ECS-системе и одному компоненту на каждый узел дерева, а они в игре были довольно развесистыми, вот, например, для крестьянина, добывающего мясо из овечек. Но оказалось, что этим слабым звеном всю дорогу была передача сишных структур в сишные же функции "по значению" (т.е. через стек), в частности, функция для отрисовки спрайтов персонажей, вызываемая по несколько раз для каждого персонажа, требует на вход структуру с цветом, поэтому когда персонажей в игре больше сотни, FPS проседает до 130 кадров в секунду, что уже довольно мало — если FPS в моей двухмерной игре упадёт ниже частоты обновления монитора, я это буду воспринимать как личное оскорбление 😅
✔️ Как уже много раз до этого, совершил ошибку откладывания разработки непосредственного контента на последний день, сконцентрировавшись изначально на коде. Пора бы уже действительно зарелизить некий универсальный движок и делать более проработанные игры 😅
✔️ Кроме того, я всё утро воскресенья пилил функционал отравления мяса крестьянами, который должен был стать одной из мета-механик, но в итоге в угаре горящего дедлайна мы с товарищем-геймдизайнером про неё забыли 😢
✔️ Билд под макось, кажется, работает 😊 Правда, кастомный курсор, в отличие от других ОС, не отображается.
✔️ В целом, получившуюся игру можно несложным образом превратить в полноценную стратежку, просто такой цели у нас с товарищем изначально не стояло, поэтому у нас снова indirect player control 🤣
Больше подробностей будет в субботнем девлоге 😊
Ну штош, пришло время подвести итоги весеннего геймджема
✔️ По мере разработки накоммитил кучу фиксов в свои библиотеки и даже опубликовал новую.
✔️ Иметь свой Quicklisp-дистрибутив удобно, можно иметь при сборке билда чётко те версии библиотек, которые тебе нужны.
✔️ В целом начинают вырисовываться очертания универсального 2D движка, который я давно вынашиваю в планах
✔️ Думать и проектировать игры в терминах ECS невероятно прикольно, быстро и гибко. Типа, определяешь какие-то базовые ортогональные элементы данных, типа "дочерний объект", "позиция", "звуковой эффект", "спрайт", а потом их по-всякому между собой креативно комбинируешь.
✔️ Хорошо также иметь работающий, отлаженный и оптимизированный алгоритм поиска пути A*, но есть проблемки с дискретностью игрового пространства, т.е. очень часто персонаж, повинуясь
A*
, пытался добежать из своей текущей позиции до центра текущего тайла, что не всегда выглядит естественно.✔️ Декларативный UI — это каеф, даже если, как в моём случае, у него со всех сторон торчат уши нижележащей сишной библиотеки Nuklear.
✔️ Окончательно выяснилось слабое звено в плане производительности. Я-то комплексовал, что этим слабым звеном окажутся деревья поведения, создающие по одной ECS-системе и одному компоненту на каждый узел дерева, а они в игре были довольно развесистыми, вот, например, для крестьянина, добывающего мясо из овечек. Но оказалось, что этим слабым звеном всю дорогу была передача сишных структур в сишные же функции "по значению" (т.е. через стек), в частности, функция для отрисовки спрайтов персонажей, вызываемая по несколько раз для каждого персонажа, требует на вход структуру с цветом, поэтому когда персонажей в игре больше сотни, FPS проседает до 130 кадров в секунду, что уже довольно мало — если FPS в моей двухмерной игре упадёт ниже частоты обновления монитора, я это буду воспринимать как личное оскорбление 😅
✔️ Как уже много раз до этого, совершил ошибку откладывания разработки непосредственного контента на последний день, сконцентрировавшись изначально на коде. Пора бы уже действительно зарелизить некий универсальный движок и делать более проработанные игры 😅
✔️ Кроме того, я всё утро воскресенья пилил функционал отравления мяса крестьянами, который должен был стать одной из мета-механик, но в итоге в угаре горящего дедлайна мы с товарищем-геймдизайнером про неё забыли 😢
✔️ Билд под макось, кажется, работает 😊 Правда, кастомный курсор, в отличие от других ОС, не отображается.
✔️ В целом, получившуюся игру можно несложным образом превратить в полноценную стратежку, просто такой цели у нас с товарищем изначально не стояло, поэтому у нас снова indirect player control 🤣
Больше подробностей будет в субботнем девлоге 😊
itch.io
Cycle of Evil by Andrew, ViruScD
A fantasy-themed strategy/simulation with indirect player control. Available for Windows, macOS, Linux
❤11❤🔥1
#анонс
Вот уже в следующий четверг, 06.06 в 19:00 по МСК буду выступать на онлайн-митапе по функциональщине, организованном широко известными в узких кругах HealthSamurai. Буду рассказывать, как же клёво писать игры на лиспах 😊
Мероприятие онлайновое и бесплатное, но нужна регистрация, поэтому айда: Функциональное программирование для всех
Вот уже в следующий четверг, 06.06 в 19:00 по МСК буду выступать на онлайн-митапе по функциональщине, организованном широко известными в узких кругах HealthSamurai. Буду рассказывать, как же клёво писать игры на лиспах 😊
Мероприятие онлайновое и бесплатное, но нужна регистрация, поэтому айда: Функциональное программирование для всех
health-samurai.ru
Функциональное программирование для всех
Митап для функциональщиков – базовые либы, безопасность и игры на Lisp!
🔥8