#common_lisp
В рамках подготовки к Lisp Game Jam 2023 уже сделяль шаблон для игрового проекта с использованием SDL2, которую я раньше избегал в пользу liballegro. Как выясняется, мне были уготованы пара открытий чудных: во-первых, в биндинге SDL2 к CL очень много "медвежьих услуг" в стиле автоматического удаления сишных указателей с кучи через финалайзеры
Во-вторых, GC в SBCL, конечно, весьма чудной, что под линуксом (см. рис. 1), что под шиндой (см. рис. 2). Сказали ему при компиляции, что общий размер доступной ему кучи 2 Гб, и он не особо шевелится вплоть до момента, пока не будет сожран гигабайт с хвостиком 😂
В рамках подготовки к Lisp Game Jam 2023 уже сделяль шаблон для игрового проекта с использованием SDL2, которую я раньше избегал в пользу liballegro. Как выясняется, мне были уготованы пара открытий чудных: во-первых, в биндинге SDL2 к CL очень много "медвежьих услуг" в стиле автоматического удаления сишных указателей с кучи через финалайзеры
trivial-garbage, как будто я сам не могу условный free дёрнуть (а если так сделать вместе с финалайзером, то через неопределённый период времени игра крэшится или тупо зависает).Во-вторых, GC в SBCL, конечно, весьма чудной, что под линуксом (см. рис. 1), что под шиндой (см. рис. 2). Сказали ему при компиляции, что общий размер доступной ему кучи 2 Гб, и он не особо шевелится вплоть до момента, пока не будет сожран гигабайт с хвостиком 😂
🤔2
#common_lisp
Итак, вот уже в эту пятницу начнётся Lisp game jam. Я к его началу собрался подготовить cokiecutter-шаблон для игры на CL, с выбором варианта middleware-библиотеки (SDL2, liballegro, raylib) и с автоматической сборкой готовых бинарников для трёх основных платформ (Linux, MacOS, Windows). Так вот, сегодня с утра доделал вариант с raylib, который на удивление занимает меньше всего кода и меньше всего места в скомпилированном виде. Под линукс и шинду уже всё готово, это, на секундочку, шесть протестированных вариантов сборки. Попробовал ткнуться в сборку под MacOS, установив у себя в kvm-виртуалку Monterey (а затем и High Sierra в VirtualBox), и я должен сказать, что там не работает НИХУЯ, по буквам: Николай, Иван, Харитон, Ульяна, Ярослав. Ну то есть код с использованием liballegro крэшится где-то в недрах кода макоси при её, liballegro, инициализации, код SDL2 намертво залипает на каком-то мьютексе внутряхоткрыто и смело прямо в лицо, что
Теперь надо написать статью на хабр с анонсом геймджема, и ещё поспать бы, а то на улице жара такая, а я не выспался 🥱
Итак, вот уже в эту пятницу начнётся Lisp game jam. Я к его началу собрался подготовить cokiecutter-шаблон для игры на CL, с выбором варианта middleware-библиотеки (SDL2, liballegro, raylib) и с автоматической сборкой готовых бинарников для трёх основных платформ (Linux, MacOS, Windows). Так вот, сегодня с утра доделал вариант с raylib, который на удивление занимает меньше всего кода и меньше всего места в скомпилированном виде. Под линукс и шинду уже всё готово, это, на секундочку, шесть протестированных вариантов сборки. Попробовал ткнуться в сборку под MacOS, установив у себя в kvm-виртуалку Monterey (а затем и High Sierra в VirtualBox), и я должен сказать, что там не работает НИХУЯ, по буквам: Николай, Иван, Харитон, Ульяна, Ярослав. Ну то есть код с использованием liballegro крэшится где-то в недрах кода макоси при её, liballegro, инициализации, код SDL2 намертво залипает на каком-то мьютексе внутрях
cl-sdl2, и только raylib говорит Failed to initialize Graphic Device, хотя хочу заметить, что под виндой с софтверным рендерером в том же VirtualBox все три варианта прекрасно бегают. По хорошему, надо бы попробовать сделать в KVM GPU pass-through, но моя Nvidia поддерживается только в High Sierra и ранее, а хайсьерра в QEMU не ставится, мотивируя отказ тем, что не может до серверов эппла достучаться, хотя интернет у неё есть. А это я ещё даже не прикасался к теме компиляции под Apple Silicon, там вообще гроб гроб кладбище пидор. В общем, решил пока подзабить на макось, если будет по ходу дела время, попробую чё-то поковырять, в идеале вообще нужно где-то приобрести старенький мак и на нём экспериментировать, но это уже не для моих финансовых условий.Теперь надо написать статью на хабр с анонсом геймджема, и ещё поспать бы, а то на улице жара такая, а я не выспался 🥱
🔥4
#common_lisp #проекты
Ну штош, выкатил на гитхаб свой шаблон для игры на Common Lisp 🎉 Эх, давненько я так плотно с CI пайплайнами не развлекался 😅
Завтра на стриме, наверное, вернусь к ECS-библиотеке, надеюсь, ещё пару мажорных фич успею реализовать до пятницы.
Ну штош, выкатил на гитхаб свой шаблон для игры на Common Lisp 🎉 Эх, давненько я так плотно с CI пайплайнами не развлекался 😅
Завтра на стриме, наверное, вернусь к ECS-библиотеке, надеюсь, ещё пару мажорных фич успею реализовать до пятницы.
GitHub
GitHub - lockie/cookiecutter-lisp-game: A cookiecutter template for Common Lisp videogame projects
A cookiecutter template for Common Lisp videogame projects - lockie/cookiecutter-lisp-game
🔥2
#common_lisp #статьи
Давно хотел запостить на хабр перевод программной статьи г-жи Хафнер про особенности использования Common Lisp в разработке игр, и вот наконец подвернулась оказия)
Апвоуты приветствуются ❤️
https://habr.com/ru/articles/737316
Давно хотел запостить на хабр перевод программной статьи г-жи Хафнер про особенности использования Common Lisp в разработке игр, и вот наконец подвернулась оказия)
Апвоуты приветствуются ❤️
https://habr.com/ru/articles/737316
❤6
#лытдыбр #мемасики
Сегодня на традиционном утреннем стриме продолжил накидывать код для предстоящего геймджема, и, как оказалось, использовать ECS гораздо сложнее, чем писать ECS-фреймворк (см. иллюстрацию) 😅
Впрочем, по крайней мере успел набросать системы для отображения и проигрывания анимаций.
Сегодня на традиционном утреннем стриме продолжил накидывать код для предстоящего геймджема, и, как оказалось, использовать ECS гораздо сложнее, чем писать ECS-фреймворк (см. иллюстрацию) 😅
Впрочем, по крайней мере успел набросать системы для отображения и проигрывания анимаций.
🤯1
#лытдыбр #геймджем #common_lisp
Штош, первый день Spring Lisp Game Jam 2023 подошёл к концу, а мне похвастаться особо нечем (см. рис. 1) — начал пилить анимации персонажей, но наткнулся на отсутствие в своём ECS-фреймворке а) способа передачи в системы произвольных аргументов, вроде
Продолжу, видимо, уже завтра.
Штош, первый день Spring Lisp Game Jam 2023 подошёл к концу, а мне похвастаться особо нечем (см. рис. 1) — начал пилить анимации персонажей, но наткнулся на отсутствие в своём ECS-фреймворке а) способа передачи в системы произвольных аргументов, вроде
delta-time, и б) обратных индексов, позволяющих быстро (за O(log N) хотя бы) получить ответ на вопрос, "у какой (каких) entity в таком-то компоненте вот такой-то слот имеет вот конкретно такое значение". Первое победил, про второе только сейчас додумал, как можно сделать относительно безболезненно с алгоритмической точки зрения (см. рис. 2), но с точки зрения дружелюбности к кэшу процессора там пиздец, конечно, полный раздрай, хорошо хоть происходит всё это действительно за логарифм от количества entity с этим компонентом.Продолжу, видимо, уже завтра.
🔥3
#мемасики
Короче, с воскресенья на понедельник плохо выспался, допоздна в D&D играли. Провёл утренний стрим, позавтракал и решил чаю заварить, иначе какой нормальный человек чаем завтрак не заполирует. Поставил чайник и вдруг понял, что пакетики закончились. Пошарился по полкам, нашёл запасную пачку и вдруг понимаю, что передо мной стоит притёртая баночка кофе, которую хозяйка оставила. Редко раньше кофе пил, а тут вдруг захотелось, дай-ка, думаю, приободрюсь перед рабочим днём, а раз захотелось, почему бы и не навернуть. Нашёл в шкафчике джезву, сыпанул две щедрых ложки в холодную воду, заварил, налил в чашку и тут вдруг sve se prebojilo u crvenu boju i zazvučalo "Ja sam Crnogorac", jebem moje uši, ništa nije jasno, puzeći iz zemlje Ljudevit Gaj i govori neku sranje o Hrvatima i moralu, stari pedal, zašto mu nije ležalo u zemlji? Sada osim crnogorskog jezika ne razumijem ništa.
Čini mi se da je kafa bila prokleta.
Короче, с воскресенья на понедельник плохо выспался, допоздна в D&D играли. Провёл утренний стрим, позавтракал и решил чаю заварить, иначе какой нормальный человек чаем завтрак не заполирует. Поставил чайник и вдруг понял, что пакетики закончились. Пошарился по полкам, нашёл запасную пачку и вдруг понимаю, что передо мной стоит притёртая баночка кофе, которую хозяйка оставила. Редко раньше кофе пил, а тут вдруг захотелось, дай-ка, думаю, приободрюсь перед рабочим днём, а раз захотелось, почему бы и не навернуть. Нашёл в шкафчике джезву, сыпанул две щедрых ложки в холодную воду, заварил, налил в чашку и тут вдруг sve se prebojilo u crvenu boju i zazvučalo "Ja sam Crnogorac", jebem moje uši, ništa nije jasno, puzeći iz zemlje Ljudevit Gaj i govori neku sranje o Hrvatima i moralu, stari pedal, zašto mu nije ležalo u zemlji? Sada osim crnogorskog jezika ne razumijem ništa.
Čini mi se da je kafa bila prokleta.
😱5🤯1
This media is not supported in your browser
VIEW IN TELEGRAM
#лытдыбр #геймджем #common_lisp
К пятому дню геймджема я наконец допилил анимированных персонажей 😅 Зато всё хранится по науке, в ECS-хранилище. Дальше должно пойти быстрее, если бы ещё не работа, ух я бы разгулялся)
Исходнички выложил сюда 😊
К пятому дню геймджема я наконец допилил анимированных персонажей 😅 Зато всё хранится по науке, в ECS-хранилище. Дальше должно пойти быстрее, если бы ещё не работа, ух я бы разгулялся)
Исходнички выложил сюда 😊
👍2🥰1
#лытдыбр
Вот это я машина, конечно. Нехитрые статистические расчёты показывают, что уже в следующую субботу можно ожидать 27 коммитов за день 😂
Вот это я машина, конечно. Нехитрые статистические расчёты показывают, что уже в следующую субботу можно ожидать 27 коммитов за день 😂
🔥3😁3👍1
#лытдыбр #common_lisp
Всё-таки обожаю Emacs. Пишу в коде игры
Всё-таки обожаю Emacs. Пишу в коде игры
:step-, чтобы прописать название аудиофайла, который будет проигрываться при движении персонажа игрока. Emacs (точнее, его плагин Sly для Common Lisp) выцепляет из запущенного Lisp-образа список за-intern-енных кейвордов и ищет среди них те, что начинаются на :step, а так как я уже запускал игру и все файлы со звуками были подгружены из каталога ресурсов, все соответствующие звуковым файлам кейворды есть в Lisp-образе, и я их вижу у себя прямо в автодополнении. Если это не круто, то я даже не знаю определение слова "круто" 🤟🔥8❤1
#мемасики
Я с утра опять прибегнул к кофеиновому допингу, поэтому ещё немножко щитпоста 😅
В коде игры случайно произошёлMOTHERFUCKING EVANGELION REFERENCE
Я с утра опять прибегнул к кофеиновому допингу, поэтому ещё немножко щитпоста 😅
В коде игры случайно произошёл
😁2🙏1
#проекты
Итак, вчера с товарищем за один день креативили контент, и этой ночью уже на последнем издыхании я зарелизил игру для Lisp Game Jam, вуаля: Thoughtbound.
Теперь я чуть-чуть проспался и готов предварительно сформулировать небольшой постмортем.
1. Архитектура Entity-Component-System — огонь 🔥 Новую функциональность в игру можно добавлять буквально лёгким движением руки, и она не ломает то, что в игре уже есть.
2. Стоковый рендеринг карты через CLOS в библиотеке
3. Хотя на различных форумах так не рекомендуют делать, но, как выяснилось, хранение каждого tile карты в отдельной entity — вполне себе рабочий вариант; для сравнения, родной рендеринг через
4. Хотя реализация ECS у меня пока самая наивная и жручая память, в реальном проекте это нестрашно — запущенная игра создаёт около тысячи игровых объектов с 14 различными компонентами, но потребляет при этом на всё про всё около 200 Мб памяти, что по современным меркам пшик.
5. В игре довольно серьёзная нарративная составляющая и даже есть вот прямо сюжет с нотками пост-модернизма, что для моих предыдущих проектов нетипично 😅
6. Столкновения персонажей с препятствиями — это сложно, таки и не доделал их полностью идеально 🥲
7. С гуёвой библиотекой
8. Генеративные искуственные нейронные сети — суперское подспорье в проектах вроде такого. Особенно если английский не твой родной, а рисовать не умеешь 🤣 Немного инсайда: у меня настолько мало фантазии, что даже название проекта предложил чятжпт))
9. Весь код игры, как сообщает
10. Не хочу быть нескромным, но среди других финишировавших в геймджеме работ не видел хоть одной настолько же полной контентом, как наша 😊 Хотя, безусловно, есть крайне интересные с технической точки зрения проекты.
11. Истинно говорю вам, кофе — напиток дьявола. В какой-то момент на выходных мне казалось, что я навсегда утратил возможность засыпать 😳
12. Вдвоём геймджемить куда веселее)
Итак, вчера с товарищем за один день креативили контент, и этой ночью уже на последнем издыхании я зарелизил игру для Lisp Game Jam, вуаля: Thoughtbound.
Теперь я чуть-чуть проспался и готов предварительно сформулировать небольшой постмортем.
1. Архитектура Entity-Component-System — огонь 🔥 Новую функциональность в игру можно добавлять буквально лёгким движением руки, и она не ломает то, что в игре уже есть.
2. Стоковый рендеринг карты через CLOS в библиотеке
cl-tiled чудовищно тормозной для любых практических целей.3. Хотя на различных форумах так не рекомендуют делать, но, как выяснилось, хранение каждого tile карты в отдельной entity — вполне себе рабочий вариант; для сравнения, родной рендеринг через
cl-tiled жрёт около 70% CPU (который у меня 12-ядерный Ryzen, на секундочку), а рендеринг той же карты с использованием ECS по entity на тайл — 5-6%.4. Хотя реализация ECS у меня пока самая наивная и жручая память, в реальном проекте это нестрашно — запущенная игра создаёт около тысячи игровых объектов с 14 различными компонентами, но потребляет при этом на всё про всё около 200 Мб памяти, что по современным меркам пшик.
5. В игре довольно серьёзная нарративная составляющая и даже есть вот прямо сюжет с нотками пост-модернизма, что для моих предыдущих проектов нетипично 😅
6. Столкновения персонажей с препятствиями — это сложно, таки и не доделал их полностью идеально 🥲
7. С гуёвой библиотекой
Nuklear тяжко: из-за того, что она написана на чистом C, чуть шаг влево-шаг вправо — и ты вывалился в LDB, а в Emacs это даже не сразу понятно, просто окно игры перестаёт обновляться.8. Генеративные искуственные нейронные сети — суперское подспорье в проектах вроде такого. Особенно если английский не твой родной, а рисовать не умеешь 🤣 Немного инсайда: у меня настолько мало фантазии, что даже название проекта предложил чятжпт))
9. Весь код игры, как сообщает
cloc, состоит из 715 строк, что лишний раз подтверждает, что Common Lisp — один из самых мощных языков в мире 🤗10. Не хочу быть нескромным, но среди других финишировавших в геймджеме работ не видел хоть одной настолько же полной контентом, как наша 😊 Хотя, безусловно, есть крайне интересные с технической точки зрения проекты.
11. Истинно говорю вам, кофе — напиток дьявола. В какой-то момент на выходных мне казалось, что я навсегда утратил возможность засыпать 😳
12. Вдвоём геймджемить куда веселее)
itch.io
Thoughtbound by Andrew, ViruScD
Post-modern dungeon crawler in fantasy setting. Available for Windows, Linux
🔥12❤1😁1
#common_lisp
Обнаружил тут на днях существование целого Roguelike tutorial for Common Lisp. Надо бы заценить, у самого в ближайших планах запилить туториал по использованию своего ECS-фреймворка
Обнаружил тут на днях существование целого Roguelike tutorial for Common Lisp. Надо бы заценить, у самого в ближайших планах запилить туториал по использованию своего ECS-фреймворка
cl-fast-ecs 😊nwforrer.github.io
Roguelike tutorial for Common Lisp - Part 0 - Setup
This set of tutorials is going to follow the Python TCOD tutorial, but will be written in Common Lisp and use the BearLibTerminal library.
Prior Knowledge This tutorial assumes you are familiar with programming in Common Lisp. If you’re not familiar, I would…
Prior Knowledge This tutorial assumes you are familiar with programming in Common Lisp. If you’re not familiar, I would…