Лисп в изгнании
229 subscribers
156 photos
21 videos
5 files
233 links
Авторский канал на околоайтишную тематику.

По всем вопросам @awkravchuk
Download Telegram
#лытдыбр #мемасики

Сегодня на традиционном утреннем стриме продолжил накидывать код для предстоящего геймджема, и, как оказалось, использовать ECS гораздо сложнее, чем писать ECS-фреймворк (см. иллюстрацию) 😅
Впрочем, по крайней мере успел набросать системы для отображения и проигрывания анимаций.
🤯1
#лытдыбр #геймджем #common_lisp

Штош, первый день 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.
😱5🤯1
This media is not supported in your browser
VIEW IN TELEGRAM
#лытдыбр #геймджем #common_lisp

К пятому дню геймджема я наконец допилил анимированных персонажей 😅 Зато всё хранится по науке, в ECS-хранилище. Дальше должно пойти быстрее, если бы ещё не работа, ух я бы разгулялся)
Исходнички выложил сюда 😊
👍2🥰1
#лытдыбр

Вот это я машина, конечно. Нехитрые статистические расчёты показывают, что уже в следующую субботу можно ожидать 27 коммитов за день 😂
🔥3😁3👍1
#лытдыбр #common_lisp

Всё-таки обожаю Emacs. Пишу в коде игры :step-, чтобы прописать название аудиофайла, который будет проигрываться при движении персонажа игрока. Emacs (точнее, его плагин Sly для Common Lisp) выцепляет из запущенного Lisp-образа список за-intern-енных кейвордов и ищет среди них те, что начинаются на :step, а так как я уже запускал игру и все файлы со звуками были подгружены из каталога ресурсов, все соответствующие звуковым файлам кейворды есть в Lisp-образе, и я их вижу у себя прямо в автодополнении. Если это не круто, то я даже не знаю определение слова "круто" 🤟
🔥81
#мемасики #common_lisp

— Мам, давай купим ИИ!
— Нет, у нас уже есть ИИ дома.
ИИ дома:
😁4🤔1
#мемасики

Я с утра опять прибегнул к кофеиновому допингу, поэтому ещё немножко щитпоста 😅

В коде игры случайно произошёл MOTHERFUCKING EVANGELION REFERENCE
😁2🙏1
#проекты

Итак, вчера с товарищем за один день креативили контент, и этой ночью уже на последнем издыхании я зарелизил игру для 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. Вдвоём геймджемить куда веселее)
🔥121😁1
#лытдыбр

Решил почитать свежие статьи из списка рассылки хабра, но случился хабраэффект 😂
🙏1
#common_lisp

Обнаружил тут на днях существование целого Roguelike tutorial for Common Lisp. Надо бы заценить, у самого в ближайших планах запилить туториал по использованию своего ECS-фреймворка cl-fast-ecs 😊
#лытдыбр

Только что вернулся со стендап-концерта Яси Тринадцатко, и в реальности она ещё более клевая, чем в ютубе 😍

Спасибо организаторам (но с фигой в кармане, потому что билеты пришлось покупать через чудовищно кривой сайт на немецком(!), сделанный, судя по всему, на похапе, настолько от него веяло двухтысячными с веб 1.0, версткой таблицами и вот этим всем из моего детства)
👍2
#common_lisp

В поисках более адекватного механизма сборки для игры, чем то, что есть сейчас, попробовал два проекта для Common Lisp, являющихся аналогами pip и virtualenv для Python в одном флаконе, — CLPM и Qlot. Оба худо-бедно справляются со своими непосредственными обязанностями, но оба не работают под Windows, причём если CLPM г-на Эрика Тиммонса валится на моменте компиляции пакета cffi — по какой-то причине gcc при этом запускается с путём к объектному файлу вида \\?\C:\yada-yada.o (т.н. extended length path), чего, конечно же, не понимает; то Qlot, а точнее, Roswell г-на Фукамачи тупо валится с сегфолтом 😂 Что неудивительно, учитывая его фаршевый код.
Вопрос в том, что из этих двух, гм, творений будет проще починить, и что-то мне подсказывает, что от fukamachiware лучше снова держаться подальше 😅
🤔3
#common_lisp

Всю неделю по утрам танцевал невероятный танец по граблям в попытках заставить собираться игру через CLPM, для Linux всё завелось почти сразу, а с "ОС" Ш1ИДОШ5 пришлось поковыряться. И вот уже всё локально в докере работает, довольный делаю пуш в репозиторий только для того, чтобы обнаружить, что буквально в том же докер-контейнере в ебучем github actions билд с грохотом фейлится из-за того, что там в путях откуда ни возьмись появляются слэши шиворот-навыворот. А разгадка проста: безблагодатность в github actions контейнеры запускаются с прорвой каких-то непотребных докеровских настроек, в том числе с кастомным ENTRYPOINT, из-за чего вся хвалёная воспроизводимость Docker-контейнеров идёт по пизде.

Истинно говорю вам, micro$oft и все её продукты — говно говна, царь Мидас наоборот, который превращает абсолютно всё, чего касается, в нерабочую гору смердящего кала. Блэт, как же я зол 😡
🤬4🤨2🤝1💅1
#анонс #видео

Памятуя о своём опыте, взял на себя труд организовать (уже второй) онлайн-митап по Lisp-подобным языкам. Итак, вот уже в эту субботу, в 18:00 UTC+3 вас ждут следующие доклады:

• "Паттерн Entity-Component-System и металингвистическая абстракция"
• "Fennel — зачем, где и как"
• "Возрождение поддержки CL в SWIG 4"
• "Фреймворк Spritely Goblins"
• "Мой опыт на Clojure после JS"
• "Чем полезен Ultralisp и как он устроен"

Митап будет проводиться на платформе Jitsi Meet, на которой вы сможете пообщаться с докладчиками после их выступлений, по следующей ссылке.
Кроме того, будет проводиться live-трансляция на Youtube на моём канале, подпишитесь, чтобы не пропустить. Вопросы из чата Youtube тоже постараюсь не терять и зачитывать докладчикам вслух 😊

P.S. запись доступна тут.
👍8🔥6
#мемасики

Буквальное лицо интроверта-перфекциониста (моё) после того, как поучавствовал в геймджеме, а потом ещё и организовал онлайн-митапчик 😁
🔥7🤣5😢1🤗1