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

По всем вопросам @awkravchuk
Download Telegram
#devlog #common_lisp

На второй день джема придумал, как мне кажется, изящный способ решения проблемы с пошаговостью и разными скоростями персонажей, и сделал базовые версии поведения персонажей врагов и генерации карты — тупо шёл по питоновскому Roguelike tutorial, переделывая всё в ECS парадигме, собственно, почти дошёл до третьей части)
👏10
#лытдыбр #мемасики

Оказывается, определение области видимости игрока в рогаликах — это целая наука. Чувствую себя, как в этом мемасике 😅
😁8
This media is not supported in your browser
VIEW IN TELEGRAM
#devlog #common_lisp

Итак, третий день джема пока как будто самый продуктивный. Сделал примитивную генерацию подземелья с монстрами, область видимости игрока (a.k.a FoV) и "туман войны", причём FoV, переделанный мной из питоновского кода с Roguebasin, заработал с первого раза, что крайне подозрительно 🤔😅

Также начал делать боёвку, но доделаю уже завтра, хочется сделать сразу хорошо и предусмотреть все тонкости, ближний/дальний бой, скорость атаки, возможность убежать от удара и проч. Видос текущей версии игры прилагается)
🔥15
This media is not supported in your browser
VIEW IN TELEGRAM
#devlog #common_lisp

Ого, уже четвёртый день джема, но и я безжалостно трачу всё свободное время на разработку игры 😊 Сегодня сделал клёвое окошко с текстовым логом происходящих в подземелье событий, всё как в настоящих рогаликах, и худо-бедно допилил базовую контактную боёвку, практически целиком слизав модель, параметры и формулы из Path of Exile — воистину, что я ни делаю, получается дьябла 😁

На приложенном видосе можно наблюдать, как гоблины безжалостно крошат моему персонажу лицо)
🔥13😁1
This media is not supported in your browser
VIEW IN TELEGRAM
#devlog #common_lisp

Итак, пятый день джема, половина позади, остаётся вторая половина. За сегодня пофиксил всякие мелочи, добавил возможность игроку выдавать люлей монстрам, сделал описание того, что в подземелье находится под мышиным курсором ("вы смотрите на стену", лол) и рудиментарную систему предметов — можно поднять с пола зелье здоровья, правда, после поднимания с ним пока ничего толком нельзя сделать, даже в рюкзаке порыться — собственно, начну завтра с окошка инвентаря 😊

На видео, как водится, демонстрация новых фичей 😌
👍11
This media is not supported in your browser
VIEW IN TELEGRAM
#devlog #common_lisp

Сегодня шестой день джема, а значит, уже пора потихоньку заканчивать с базовыми механиками, что я сегодня и делал 😊 Первым делом закончил с окошком инвентаря, затем реализовал такие важнейшие для приключенца предметы, как зелье здоровья и свиток фаербола, а для последнего реализовал механику прицеливания — можно выбирать место взрыва фаербола с помощью мышки, а можно и по-стариковски, с клавиатуры))
Кроме того, сделал возможность выкинуть предмет через тот же диалог инвентаря, и под вечер добил переход на следующий уровень — игра становится вполне себе играбельной, только спускаться вниз в подземелье можно до посинения, условий победы я пока не сделал, как и дальнебойных атак, механик прокачки, оружия, брони и прочих важных мелочей. Надеюсь добить все базовые механики до выходных, чтобы за последние два дня джема поработать над генерацией, балансом и прочей полировкой 💅

Как всегда, видос с новыми механиками прилагается, на этот раз почти летсплей))
🔥13💅1
#лытдыбр #common_lisp

Во время отладки новой фичи в игре случайно произошёл селф-харм 😭
😁9
#devlog #common_lisp

Штош, на седьмой день джема уже немного подвыдохся, пытаясь с утра починить пару мелких багов и так их и не выловив 😔 Из новых фичей реализовал действие "пропустить ход", управление мышью и дальнебойные атаки у мобов — на видео можно заценить, как я отлаживал свою реализацию алгоритма Брезенхема для определения линии стрельбы, а на рис. 1 видно, что под руку стрелку лучше не соваться 😁

Потом начал делать экипировку для игрока, сначала задушился, потому что написал свой самый огромный ECS-компонент за всё время использования этой парадигмы, а потом под вечер чёт второе дыхание открылось и написался очень симпатичный код (см. рис. 2), правда, добить его придётся завтра)

Заодно на завтра из важного остался A* алгоритм для мобов, возможность самому игроку атаковать дальнебойным оружием, и всяческие QoL фичи и прочая полировка. Даже есть шанс сделать в итоге что-то, за что самому не будет стыдно 😌
7👍5
This media is not supported in your browser
VIEW IN TELEGRAM
#devlog #common_lisp

И вот наступил последний день перед финишной прямой геймджема в виде выходных) Сегодня вазюкался с экипировкой персонажа игрока, чувствуя себя как в том мемасике про свидетелей иеговы, "а что дальше? — не знаю, я так далеко ещё никогда не заходил" 😁 В итоге по ходу ещё переделал боёвку и вот только что сохранил коммит на 700 строк, но всё равно остались лакуны в виде отсутствующего магического урона и главного игрока, пока не способного наносить дальнебойный урон. И переделать врагов на A* тоже не успел, надеюсь уже завтра с утреца добить всякие важные мелочи и начать приводить результат в товарный вид)

На видео очередной летсплей, в котором нормальные предметы экипировки засвечиваются на 3:13 😌
🔥11👍7
This media is not supported in your browser
VIEW IN TELEGRAM
#devlog #common_lisp

Ну чтош, предпоследним днём джема я доволен) Сделал важные штуки, типа A* у врагов и дальнего боя у игрока, доделал дофига важных элементов интерфейса — экран победы, справку и даже выбор статов для увеличения при левел-апе 💪 Кроме того, пофиксил целую россыпь мелких багов и даже логотип нарисовал шучу, мне его чятжпт нарисовал.

Из важного остаётся только добавить использование маны на свитки, а то сейчас магии, кроме них, вообще нет; магическое оружие в виде посохов и волшебных палочек, наверное, придётся убрать. А так весь завтрашний день можно потратить на балансировку всех этих фич, ну разве что если с утра пораньше встану, попробую добавить звуковые эффекты для атмосферы 👻

На видео сегодня процесс отладки A* у врагов)
6🔥6👍1
#лытдыбр #common_lisp

Лол, чёт я обмакросился, аж компилятор поломал 😅
🔥7😁1
#лытдыбр #common_lisp

А вот и результат моих трудов для осеннего Lisp Game Jam '24, процедурно-генерируемый рогалик Lispy Rogue 😁 Даже летсплей видео к нему сделал)

На полноценный девлог уже нет сил, в понедельник-вторник напишу постмортем, там много чего интересного)
13👍6🔥4
#лытдыбр #common_lisp

Геймджем геймджемом, а новый релиз топового опенсорсного лиспового компилятора SBCL по расписанию, поэтому сделал новый билд под винду с поддержкой последней нормальной версии Windows 7, и докерфайлы с SBCL и прочими важными инструментами для сборки лисповых игр 😊
6
#лытдыбр

Тут ещё подъехали новости, в лисповых джемах всегда нужно было использовать бесплатные ассеты и ссылаться на них, а теперь ещё и добавили новое правило, что арт, сгенерированный нейросетями, тоже нельзя, потому что, видите ли, для такого арта нельзя сослаться на автора. Я во время джема придумал и сгенерил офигенную обложку к игре, но орги тут наехали, что нельзя, луддиты проклятыя. Пришлось искать человекоделанный арт и проявлять безумные навыки в Gimp, в итоге судите сами — было/стало:
🔥82👍1😁1
#лытдыбр #common_lisp

Ну штош, в воскресенье закончилось голосование в осеннем Lisp Game Jam '24, и по его результатам, мой рогалик на Common Lisp Lispy Rogue занял 6 место из 24, что гораздо лучше, что я ожидал, но всё равно не первое, однако в категории "Entertainment" (how enjoyable is it?) он занял таки первое место, я доволен 😊

Как я уже писал в постмортеме, попробую пофиксить ряд косяков и выступить с ещё одним, более продуманным рогаликом, в марте следующего года на джеме 7DRL ("7 day rogue like"), а пока буду готовиться к важному пока секретному игровому проекту и заодно к третьей части своего туториала по геймдеву на CL — и для того, и для другого понадобится довести до ума свою библиотеку для деревьев поведения 🎄
🔥22
#лытдыбр #common_lisp

Выловил тут проблему с TYPE-ERROR при переопределении компонента "на лету", при работающей игре, про которую писал в постмортеме (см. рис. 1). Оказывается, у меня всё чётенько работает, но штука в том, что Emacs (а, точнее, его плагин для Common Lisp Sly) больно хитрожопый — когда ты прожимаешь C-c C-c, чтобы отправить в лисп-процесс новое определение компонента, он копирует форму, на которой стоит курсор, в отдельный временный файл, и компилирует этот файл в отдельном треде, блэт. Из-за этого код работающих в игре систем запинается в тот момент, когда все функции для работы с компонентом уже переопределены на новые, а сама внутренняя структура с данными компонента у всех сущностей ещё пока старая (но будет заменена на новую буквально миллисекундами позже).

Пока не придумал, как нормально справиться с излишней хитрожопостью Sly, разве что притащить в зависимости либу для многопотока bordeaux-threads и при запуске ecs:run-systems захватывать некий глобальный мьютекс, а при переопределении компонентов проверять, что он отпущен. Такое себе решение, лишняя зависимость и производительность будет чутка хуже — туда-сюда мьютекс хватать-отпускать. Надо с ним переспать, может чего получше придумаю 😄
1