👋, I'm @ozkriff - Rust zealot, hobby game developer, fan of turnbased games. I worked on CLion&IntelliJ-Rust at JetBrains, maintain arewegameyet.rs, and edit gamedev.rs' monthly newsletter.
My latest gamedev project is Zemeroth - a minimalist turn-based hexagonal tactics about eradicating demons. Small maps, single-player, with simple AI - I'm trying to keep the scope small to have a chance of actually finishing the thing this time. Zemeroth is on pause since ~2021 but I still hope to get myself together and finish the damn thing!
Chat: @ozkriff_games_chat
Links: ozkriff.games, bsky, mastodon, twitter (ru), github, patreon, youtube, itch, linkedin
My latest gamedev project is Zemeroth - a minimalist turn-based hexagonal tactics about eradicating demons. Small maps, single-player, with simple AI - I'm trying to keep the scope small to have a chance of actually finishing the thing this time. Zemeroth is on pause since ~2021 but I still hope to get myself together and finish the damn thing!
Chat: @ozkriff_games_chat
Links: ozkriff.games, bsky, mastodon, twitter (ru), github, patreon, youtube, itch, linkedin
GitHub
GitHub - ozkriff/zemeroth: 😠⚔️😈 A minimalistic 2D turn-based tactical game in Rust
😠⚔️😈 A minimalistic 2D turn-based tactical game in Rust - ozkriff/zemeroth
# Текущий статус Земерота
Какой-то базовый функционал боев/менюшек написан и работает на десктопе и вебе, разработка ползет вялыми всплесками, я растерял почти весь интерес к игре и рад бы её забросить в пользу чего-то нового, но из принципа хочу доделать до хотя бы минимального вида. Составил себе примерный план "последнего рывка" с минимальным количеством штук, которые надо бы допилить, и потихоньку пользу по нему. Надеюсь, что получится в начале следущего года закончить.
Какой-то базовый функционал боев/менюшек написан и работает на десктопе и вебе, разработка ползет вялыми всплесками, я растерял почти весь интерес к игре и рад бы её забросить в пользу чего-то нового, но из принципа хочу доделать до хотя бы минимального вида. Составил себе примерный план "последнего рывка" с минимальным количеством штук, которые надо бы допилить, и потихоньку пользу по нему. Надеюсь, что получится в начале следущего года закончить.
GitHub
Final Push · Issue #580 · ozkriff/zemeroth
I had a break from Zemeroth for a few months but it didn't really help - still tired of this protracted project. I don't want to abandon yet another unfinished game, so the plan is to force...
# gwg -> macroquad
Благодаря отпуску наконец-то нашел время закончить начатый Федей еще в начале месяца переезд с good-web-game на macroquad, ура!
https://github.com/ozkriff/zemeroth/pull/646
Весьма масштабное изменение:
Игровая логика (src/core) довольно хорошо абстрагирована от внешнего мира, так что её переезд вообще не затронул, но зато все касающееся графики или обработки ввода в той или иной степени переколбашено.
Большинство изменений не особо принципиальные: немного по другому оформляются аргументы там-сям и ладно. Из заметного:
* Не надо больше везде в явном виде протаскивать Context.
* Ввод обрабатываетя явными запросами, а не через события.
* Пропал привычный Drawable типаж (заменен самописным enum'ом).
* Асинхронность, наверное, самое крупное отличие. Что бы нормально работать в вебе, основной цикл и загрузка любых ресурсов в macroquad асинхронны и, как известно, асинхронные функции нельзя просто так вызывать из обычных. Можно было бы попробовать окунуться в асинк полностью и обмазать весь код async/.await'ом с корутинами, но я постремался так делать: локализовал все это в новом src/assets.rs модуле, который при запуске предзагружает шрифты-картинки-звуки и потом через OnceCell дает к ним доступ отовсюду. Зато больше не нужно для веб версии собирать assets.tar архив и генерить для него индекс файл.
Теперь осталось еще добить ветку с первой итерацией звуков/музыки и можно идти девлог для 0.7 версии писать.
Благодаря отпуску наконец-то нашел время закончить начатый Федей еще в начале месяца переезд с good-web-game на macroquad, ура!
https://github.com/ozkriff/zemeroth/pull/646
Весьма масштабное изменение:
50 files changed, 1881 insertions(+), 2815 deletions(-), до ребейза ветка насчитывала порядка 90 WIP-комитов.Игровая логика (src/core) довольно хорошо абстрагирована от внешнего мира, так что её переезд вообще не затронул, но зато все касающееся графики или обработки ввода в той или иной степени переколбашено.
Большинство изменений не особо принципиальные: немного по другому оформляются аргументы там-сям и ладно. Из заметного:
* Не надо больше везде в явном виде протаскивать Context.
* Ввод обрабатываетя явными запросами, а не через события.
* Пропал привычный Drawable типаж (заменен самописным enum'ом).
* Асинхронность, наверное, самое крупное отличие. Что бы нормально работать в вебе, основной цикл и загрузка любых ресурсов в macroquad асинхронны и, как известно, асинхронные функции нельзя просто так вызывать из обычных. Можно было бы попробовать окунуться в асинк полностью и обмазать весь код async/.await'ом с корутинами, но я постремался так делать: локализовал все это в новом src/assets.rs модуле, который при запуске предзагружает шрифты-картинки-звуки и потом через OnceCell дает к ним доступ отовсюду. Зато больше не нужно для веб версии собирать assets.tar архив и генерить для него индекс файл.
Теперь осталось еще добить ветку с первой итерацией звуков/музыки и можно идти девлог для 0.7 версии писать.
GitHub
gwg -> macroquad by ozkriff · Pull Request #646 · ozkriff/zemeroth
Zemeroth uses good-web-game now, but GWG is kinda a half-measure: it was created not as a real game engine, but as a hack to make Zemeroth work on web and to allow people to quickly check out that ...
❤1
# Rust GameDev Newsletter 16: Ноябрь
📆 Выпустил ежемесячник по ржавому игрострою за Ноябрь: https://rust-gamedev.github.io/posts/newsletter-016 (обсуждения: Reddit, Twitter).
Отпуск закончился - будем считать, что я отдохнул) Скоро будут обновления по Земероту.
📆 Выпустил ежемесячник по ржавому игрострою за Ноябрь: https://rust-gamedev.github.io/posts/newsletter-016 (обсуждения: Reddit, Twitter).
Отпуск закончился - будем считать, что я отдохнул) Скоро будут обновления по Земероту.
Rust GameDev WG
This Month in Rust GameDev #16 - November 2020
Welcome to the 16th issue of the Rust GameDev Workgroup's
monthly newsletter.
Rust is a systems lang…
monthly newsletter.
Rust is a systems lang…
# Звуки!
Я наконец-то заканчиваю первую итерацию звуковых эффектов Земерота.
Не особо разбираюсь в звуках и это моя первая личная поделка, в которой я пытаюсь организовать чего-то сложнее "пиу-пиу", так что прям свои звуки записывать не решился. Все взято с:
* opengameart.org - тут брал целые паки ("RPG Sound Pack", "Owlish Media Sound Effects", и т.п.) и подбирал из них релевантное.
* freesound.org - а тут выколупывал уже отдельные штучные записи.
Для всего скачанного сохранял ссылки и следил за лицензиями (CC0 или CC BY) - что бы с чистой совестью указать авторов в ридми и сходить по каждой ссылке поблагодарить их.
Пришлось даже освоить какие-то азы работы в Audacity для базового редактирования (в основном по ютуб видяхам, а текстом про изменения звуков совсем тяжко воспринимается):
* вырезание интересующих кусков из длинных записей (например, звуки оседающей пыли, толкания по поверхности и человеческой ходьбы все вырезаны из одной минутной записи, где человек упорно юлозит камнем по песку);
* создание своих эффектов на основе комбинаций кусков исходников (например, брызги крови - поставленная вплотную с наложением серия легких ударов по какому-то фрукту);
* удаление очень заметных фоновых шумов или лишних частот;
* перевод всего в 44100Hz и хотя бы грубо подгон всех отобранных звуков друг к другу по громкости.
Порядочно вечеров провел, слушая всю эту получившуюся разношерстную аудиобиблиотеку, и пытаясь наскрести чего-то цельное. В итоге, игра обзавелась звуками:
* кельтских барабанов - в качестве минималистичной фоновой музыки;
* UI: нажатия на кнопки и началом хода;
* шагов, кряхтенья и вскриков (разными для людей и демонов);
* оседающей пыли и протаскивания по земле;
* сломанной брони, ударов по мясу и брызг крови;
* взмахами для острого и тупого оружия;
* взрывом бомб, горения, ожогов, отравления;
* магии, лечения и кровожадности;
Теперь про код. Поскольку игра недавно переехала на Федин macroquad, логично использовать квадовый звук: quad_snd. Базовый API простой, вот пример с парочкой звуков:
Работает quad_snd на Linux/Win/macOS/WASM'е, но библиотека пока довольно сырая, доступная только напрямую с гитхаба - надо быть готовым к багрепортам, что у кого-то на машине звук не завелся.
Интеграция в код Земерота довольно прямолинейная:
* Завел глобальный ленивый миксер, используя once_cell::Lazy, и добавил его дергание каждый кадр.
* Изначальную асинхронную загрузку звуков пихнул в стандартный assets.rs модуль.
* Непосредственно запуск звуков на проигрывание выглядит как
* Ну и добавил в компонент
В assets/sound директорию репозитория идут только 44100Hz (quad_snd не поддерживает другие рейты) .ogg файлы. Решил не заморачиваться с сохранением wav исходников и проектов Audacity ни в каком репозитории - если что понадобится существенно изменить в аудиофайлах, думаю, по ссылкам на исходники перевыкачаю архивы с исходниками и повторю операции.
Демо:
Я наконец-то заканчиваю первую итерацию звуковых эффектов Земерота.
Не особо разбираюсь в звуках и это моя первая личная поделка, в которой я пытаюсь организовать чего-то сложнее "пиу-пиу", так что прям свои звуки записывать не решился. Все взято с:
* opengameart.org - тут брал целые паки ("RPG Sound Pack", "Owlish Media Sound Effects", и т.п.) и подбирал из них релевантное.
* freesound.org - а тут выколупывал уже отдельные штучные записи.
Для всего скачанного сохранял ссылки и следил за лицензиями (CC0 или CC BY) - что бы с чистой совестью указать авторов в ридми и сходить по каждой ссылке поблагодарить их.
Пришлось даже освоить какие-то азы работы в Audacity для базового редактирования (в основном по ютуб видяхам, а текстом про изменения звуков совсем тяжко воспринимается):
* вырезание интересующих кусков из длинных записей (например, звуки оседающей пыли, толкания по поверхности и человеческой ходьбы все вырезаны из одной минутной записи, где человек упорно юлозит камнем по песку);
* создание своих эффектов на основе комбинаций кусков исходников (например, брызги крови - поставленная вплотную с наложением серия легких ударов по какому-то фрукту);
* удаление очень заметных фоновых шумов или лишних частот;
* перевод всего в 44100Hz и хотя бы грубо подгон всех отобранных звуков друг к другу по громкости.
Порядочно вечеров провел, слушая всю эту получившуюся разношерстную аудиобиблиотеку, и пытаясь наскрести чего-то цельное. В итоге, игра обзавелась звуками:
* кельтских барабанов - в качестве минималистичной фоновой музыки;
* UI: нажатия на кнопки и началом хода;
* шагов, кряхтенья и вскриков (разными для людей и демонов);
* оседающей пыли и протаскивания по земле;
* сломанной брони, ударов по мясу и брызг крови;
* взмахами для острого и тупого оружия;
* взрывом бомб, горения, ожогов, отравления;
* магии, лечения и кровожадности;
Теперь про код. Поскольку игра недавно переехала на Федин macroquad, логично использовать квадовый звук: quad_snd. Базовый API простой, вот пример с парочкой звуков:
// создаем миксер.play возвращает SoundId, используя который можно потом останавливать звук, менять его громкость и т.п.
let mut mixer = SoundMixer::new();
// загружаем wav или ogg звук из байт
let sound_wav: Sound = decoder::read_wav(BYTES_WAV)?;
let sound_ogg: Sound = decoder::read_ogg(BYTES_OGG)?;
// отправляем звуки на однократное параллельное проигрывание
mixer.play(sound_wav);
mixer.play(sound_ogg);
// каждый кадр дергаем миксер в главном цикле
loop {
// ...
mixer.frame();
// ...
}
Работает quad_snd на Linux/Win/macOS/WASM'е, но библиотека пока довольно сырая, доступная только напрямую с гитхаба - надо быть готовым к багрепортам, что у кого-то на машине звук не завелся.
Интеграция в код Земерота довольно прямолинейная:
* Завел глобальный ленивый миксер, используя once_cell::Lazy, и добавил его дергание каждый кадр.
* Изначальную асинхронную загрузку звуков пихнул в стандартный assets.rs модуль.
* Непосредственно запуск звуков на проигрывание выглядит как
play_sound(&assets::get().sound.step) и вставляется в нужные места визуализаторов событий между всякими действиями, добавляющими, перекрашивающими и передвигающими спрайты. Внутри эта функция создает замыкание для scene::action::Custom, где дергается mixer::play(sound).* Ну и добавил в компонент
Agent поле типа enum AgentKind { Human, Imp }, что бы выбирать какие звуки играть.В assets/sound директорию репозитория идут только 44100Hz (quad_snd не поддерживает другие рейты) .ogg файлы. Решил не заморачиваться с сохранением wav исходников и проектов Audacity ни в каком репозитории - если что понадобится существенно изменить в аудиофайлах, думаю, по ссылкам на исходники перевыкачаю архивы с исходниками и повторю операции.
Демо:
Потенциальные улучшения звуков, которые отложил на потом:
* не хватает еще парочки относительно редких звуков - например, эффекта оглушения;
* меню опций с настройкой громкости музыки и эффектов;
* наборы звуков со случайным выбором, что бы часто повторяющиеся действия (взмахи, вскрики и т.п.) звучали не так одинаково;
* стерео эффект в зависимости от горизонтального положения на карте?
* не хватает еще парочки относительно редких звуков - например, эффекта оглушения;
* меню опций с настройкой громкости музыки и эффектов;
* наборы звуков со случайным выбором, что бы часто повторяющиеся действия (взмахи, вскрики и т.п.) звучали не так одинаково;
* стерео эффект в зависимости от горизонтального положения на карте?
# Rust GameDev Podcast 4: Fedor Logachev
На днях вышел 4й выпуск Rust GameDev Podcast с Федей в гостях:
https://rustgamedev.com/episodes/interview-with-fedor-logachev
Федя, если что, это разработчик SHAR (одной из первых серьезных ржавых игр) и miniquad/macroquad экосистемы.
Изначально я хотел оставить небольшой комментарий в реддите - подбодрить ведущего подкаста, но (видимо, из-за прокрастинации?) получилась целая мини-статейка про динамику жизни движков в ржавом игрострое, роль и виды поддержки, джемы, планы и т.п.
На днях вышел 4й выпуск Rust GameDev Podcast с Федей в гостях:
https://rustgamedev.com/episodes/interview-with-fedor-logachev
Федя, если что, это разработчик SHAR (одной из первых серьезных ржавых игр) и miniquad/macroquad экосистемы.
Изначально я хотел оставить небольшой комментарий в реддите - подбодрить ведущего подкаста, но (видимо, из-за прокрастинации?) получилась целая мини-статейка про динамику жизни движков в ржавом игрострое, роль и виды поддержки, джемы, планы и т.п.
Когда твоя жена - ветеринар, то это не только много живности в доме, но и, внезапно, крабоугодные иконы от её коллег ветеринаров-художниц.
Я теперь, видимо, сертифицированный Rust-евангелист.
Клац-клац! 🦀
Я теперь, видимо, сертифицированный Rust-евангелист.
Клац-клац! 🦀
# Rust GameDev Newsletter 17: Декабрь
📆 Выпустил наконец-то ежемесячник по ржавому игрострою за Декабрь: https://rust-gamedev.github.io/posts/newsletter-017 (обсуждения: Reddit, Twitter).
Задержка на две недели - это, конечно, не клево вышло. Буду активнее обсуждать частичную делегацию редактуры другим членам WG, хоть оно и грозит мне еще большим гемором в короткосрочной перспективе.
📆 Выпустил наконец-то ежемесячник по ржавому игрострою за Декабрь: https://rust-gamedev.github.io/posts/newsletter-017 (обсуждения: Reddit, Twitter).
Задержка на две недели - это, конечно, не клево вышло. Буду активнее обсуждать частичную делегацию редактуры другим членам WG, хоть оно и грозит мне еще большим гемором в короткосрочной перспективе.
Rust GameDev WG
This Month in Rust GameDev #17 - December 2020
Welcome to the 17th issue of the Rust GameDev Workgroup's
monthly newsletter.
Rust is a systems lang…
monthly newsletter.
Rust is a systems lang…
https://twitter.com/ozkriff/status/1353323170481115137 - вспомнил, что не показывал особо макеты своих прошлогодних экспериментов по варгеймостроению.
Возможно, минималистичный иконко-подобный 2D стиль и правда мог бы решить проблемы старой 3D версии с читаемостью и слотами внутри клеток. Я вряд ли в обозримом будущем ZoC воскрешать буду - слишком большой проект с не сильно четкими USP - но чего бы не выложить картинку? Авось когда-нибудь и вернусь к проекту таки.
Возможно, минималистичный иконко-подобный 2D стиль и правда мог бы решить проблемы старой 3D версии с читаемостью и слотами внутри клеток. Я вряд ли в обозримом будущем ZoC воскрешать буду - слишком большой проект с не сильно четкими USP - но чего бы не выложить картинку? Авось когда-нибудь и вернусь к проекту таки.
Twitter
Andrey @ozkriff Lesnikóv 🦀
"Zone of Control" is my old #rustlang game: https://t.co/yCwRJqr3kz Here's a mockup of its theoretical 2D version - a minimalistic icon-based style may make it more readable and solve some of the issues I had with sub-tile slots in the old 3D version. 🤔 #turnbased…
# Rust GameDev Newsletter 18: Январь 2021
📆 Выпустил ежемесячник по ржавому игрострою за Январь: https://rust-gamedev.github.io/posts/newsletter-018 (обсуждения: Reddit, Twitter).
Попробовали с этого месяца несколько урезанный формат и работу редакторской командой - "Newsletter: new format and more delegation". Если все пойдет по плану, то следующий месяц или два выпускающим редактором буду не я, юху!
📆 Выпустил ежемесячник по ржавому игрострою за Январь: https://rust-gamedev.github.io/posts/newsletter-018 (обсуждения: Reddit, Twitter).
Попробовали с этого месяца несколько урезанный формат и работу редакторской командой - "Newsletter: new format and more delegation". Если все пойдет по плану, то следующий месяц или два выпускающим редактором буду не я, юху!
Rust GameDev WG
This Month in Rust GameDev #18 - January 2021
Welcome to the 18th issue of the Rust GameDev Workgroup's
monthly newsletter.
Rust is a systems lang…
monthly newsletter.
Rust is a systems lang…
# Rust GameDev Newsletter 19: Февраль 2021
📆 Выпустили ежемесячник по ржавому игрострою за Февраль: https://rust-gamedev.github.io/posts/newsletter-019 (обсуждения: Reddit, Twitter).
Все таки пошло +- по плану, так что это первый выпуск, который координировал не я, а Форест (один из разработчиков Veloren). Ура делегации!
Сил на пиление своего Земерота я пока не нашел, продолжаю хандрить. Хотя бытовые дела теперь немного приведены в порядок, может в этом месяце получится собраться.
📆 Выпустили ежемесячник по ржавому игрострою за Февраль: https://rust-gamedev.github.io/posts/newsletter-019 (обсуждения: Reddit, Twitter).
Все таки пошло +- по плану, так что это первый выпуск, который координировал не я, а Форест (один из разработчиков Veloren). Ура делегации!
Сил на пиление своего Земерота я пока не нашел, продолжаю хандрить. Хотя бытовые дела теперь немного приведены в порядок, может в этом месяце получится собраться.
Rust GameDev WG
This Month in Rust GameDev #19 - February 2021
Welcome to the 19th issue of the Rust GameDev Workgroup's
monthly newsletter.
Rust is a systems lang…
monthly newsletter.
Rust is a systems lang…
# Rust GameDev Newsletter 20: Март 2021
📆 Выпустил ежемесячник по ржавому игрострою за Март: https://rust-gamedev.github.io/posts/newsletter-020 (обсуждения: /r/rust, Twitter).
По Земероту и новому проекту в ближайшие месяцы обновлений можно не ждать: я вконец загнался и решил таки взять "отпуск от хобби" как минимум до лета (а то и до осени).
📆 Выпустил ежемесячник по ржавому игрострою за Март: https://rust-gamedev.github.io/posts/newsletter-020 (обсуждения: /r/rust, Twitter).
По Земероту и новому проекту в ближайшие месяцы обновлений можно не ждать: я вконец загнался и решил таки взять "отпуск от хобби" как минимум до лета (а то и до осени).
Rust GameDev WG
This Month in Rust GameDev #20 - March 2021
Welcome to the 20th issue of the Rust GameDev Workgroup's
monthly newsletter.
Rust is a systems lang…
monthly newsletter.
Rust is a systems lang…
# gamedev.rs
Отличные новости вдогонку к ежемесячнику: только что закончил перевоз rust-gamedev.github.io на максимально роскошный домен:
✨ https://gamedev.rs ✨
Огромное спасибо Juratech Systems за подаренный домен, а то мы уж отчаялись выбирать из альтернатив.
Отличные новости вдогонку к ежемесячнику: только что закончил перевоз rust-gamedev.github.io на максимально роскошный домен:
✨ https://gamedev.rs ✨
Огромное спасибо Juratech Systems за подаренный домен, а то мы уж отчаялись выбирать из альтернатив.
Rust GameDev WG
Stay up to date with the progress and recent developments in the Rust Game Development Working Group.
# Rust GameDev Newsletter 21: Апрель 2021
📆 Выпустили ежемесячник по ржавому игрострою за Апрель: https://gamedev.rs/news/021 (обсуждения: Reddit, Twitter).
Первый выпуск, скординированный 17cupsofcoffee (автор Tetra).
📆 Выпустили ежемесячник по ржавому игрострою за Апрель: https://gamedev.rs/news/021 (обсуждения: Reddit, Twitter).
Первый выпуск, скординированный 17cupsofcoffee (автор Tetra).
Rust GameDev WG
This Month in Rust GameDev #21 - April 2021
Welcome to the 21st issue of the Rust GameDev Workgroup's
monthly newsletter.
Rust is a systems lang…
monthly newsletter.
Rust is a systems lang…
# Rust GameDev Newsletter 22: Май 2021
📆 Выпустили ежемесячник по ржавому игрострою за Май: https://gamedev.rs/news/022
📆 Выпустили ежемесячник по ржавому игрострою за Май: https://gamedev.rs/news/022
Rust GameDev WG
This Month in Rust GameDev #22 - May 2021
Welcome to the 22nd issue of the Rust GameDev Workgroup's
monthly newsletter.
Rust is a systems lang…
monthly newsletter.
Rust is a systems lang…
# WIP Android
Хоть мой "отпуск" от активных попыток работы над Земеротом еще не закончился (и продлится еще месяца полтора минимум), работа над Земеротом таки идет:
https://twitter.com/fedor_games/status/1397966033152057347
Федя занимается портированием на андроид и в процессе допиливает функционал/оптимизации в (mini|macro)quad. А я так, сбоку отсматриваю ПРы и немного помогаю с тестированием на своих железяках. Планирую в ближайшие дни дотащить вышеописанные звуки в основную ветку, что бы Феде было удобнее отлаживать эту подсистему.
Желающие потестить могут найти последние apk сборки в
Хоть мой "отпуск" от активных попыток работы над Земеротом еще не закончился (и продлится еще месяца полтора минимум), работа над Земеротом таки идет:
https://twitter.com/fedor_games/status/1397966033152057347
Федя занимается портированием на андроид и в процессе допиливает функционал/оптимизации в (mini|macro)quad. А я так, сбоку отсматриваю ПРы и немного помогаю с тестированием на своих железяках. Планирую в ближайшие дни дотащить вышеописанные звуки в основную ветку, что бы Феде было удобнее отлаживать эту подсистему.
Желающие потестить могут найти последние apk сборки в
#zemeroth канале QUADS дискорда.Twitter
Fedor Logachev
Trying to bridge the gap between "it kinda runs on my device" and "works well enough on arbitrary ~7 years old phone". If anyone wants to help with testing: welcome to our discord! discord.com/channels/71017…