Перезапуск журнала

Насмотрелся я тут на журналы reangd, cogmind, eao197 и всякие другие, решил что тоже чего-нибудь хочу писать. С последней моей попытки прошло около полутора лет)

Итак, на момент написания прошлой заметки я работал над Миром Кораблей в питерском wargaming.net. Собственно, я успел уйти оттуда, поработать над казуалками в Zillion Whales, оттуда тоже уйти и осесть в Протее. Так что сейчас я ковыряю ip-телефонию и все игры теперь только в свободное время, зато не надо каждый день "любоваться" на ужасы фритуплея)

Я больше не студент, совсем - наконец-то закончил заочку в политехе, ура-ура! :-D Темой диплома как раз и был этот проект, даже презентация вот завалялась. Хотя ничего особо крутого, как мне изначально хотелось, на деле не вышло. Ключевым моментом диплома являлся ИИ. Я там подробно расписал какие они бывают и какие виды подходят для каких игр. А вот реализовать полноценный не успел - сдавался вариант, который только формально можно было назвать "практичным ИИ" (извиняюсь, но лучшего перевода для "utility-based AI" не нашел. "ИИ, основанный на теории полезности" как-то длинновато). Он примерял к текущему состоянию игры захардкоженные шаблоны на основе позиций и типов отрядов, оценивал коэффециент их полезности, и втупую применял их. На специально подготовленных ситуациях выглядело не так и плохо, но это отмазочный вариант, конечно. И с очень стремным кодом, так что в git'е сейчас так и лежит базовый "ИИ" - подъехать в на расстояние выстрела и стрелять :-| . Но общий обыт был интересным)

Сама ржавчина, конечно, за это время сильно выросла, с 0.10 аж до 1.4. Вместо извращений по установке зависимостей или возни с git submodules, появился cargo. По достижении 1.0 появилась обратная совместимость. Хотя конкретно от этого я и не в полном восторге, руки у авторов языка теперь "полусвязаны", но переписываний и правда стало меньше, только когда библиотеки чего-то ломают. Да и с этим Cargo.lock очень помогает. Хотя, я уже месяца полтора его не обновлял - ух и сложный же следующий cargo update у меня будет.


За полтора года я успел переиграть много во что повлияевшего на мое видение пошаговых стратегий, например:

Много думал про пошаговые игры без клеток, все-таки у клеток много недостатков/особенностей. Даже немного экспериментировал - сделал простенькое путенахождение по вручную размеченной навигационной сетке:

Пример простого путенахождения на вручную размеченной сетке

Путь проложен по центрам треугольников, для оптимизации потом хотел прикрутить funnel algorithm, но до этого этапа не дошло. Если что, шестигранники тут уже ничего не значат, просто на основе работающего прилжожения экспериментировал. Затем, написал простенький "наращиватель" препятствий, который в зависимости от величины угла добавлял разное количество вспомогательных отрезков:

Пример нарощенного препятствия

Предполагалось, что все юниты будут поделены на несколько групп по размерам и для каждой группы будет поддерживаться своя сетка. Непосредственно преобразованием массива таких "жирных" препятствий в сетку должен был заниматься триангулятор. Мне большего всего приглянулся плюсовый poly2tri:

Всякие стандартные примеры из poly2tri

Даже пытался портировать его на ржавчину, но там очень стремная работа с памятью, очень хреново укладывается в модель ржавчины. Пробовал переделать плюсовую версию на работу с массивами и индексами, но потом решил что очень уж много на эксперимент уходит времени, энтузиазм про бесклеточные игры прошел, так что я совсем забросил попытку.

Ну да ладно, темы вдохновляющих игр, разных видов клеток и непрерывного пространства достойны отдельных заметок, а эта запись и так большой получается.


Теперь, наконец-то, что касается самого проекта.

Прежде всего, он переименован из Марoдера в Зону Контроля (Zone of Control). Сокращенно - ЗК/ZoC. Гитхабовское хранилище переехало в https://github.com/ozkriff/zoc.

Внешний вид с момента сдачи диплома изменился слабо и выглядит все это безобразие сейчас как-то так:

Собственно, да, я портировал это на android, хотя под линуксом и виндой тоже должно работать. Спасибо Skligus'y за его rusty-cardboard, очень помогло поначалу, и Tomaka за его glutin и android-rs-glue. К сожалению, для сборки под андроид требуется ночная сборка rustc, потому что в android-rs-glue используются какие-то нестабильные штуки. Хотя надо перепроверить, может уже и стабильного компилятора хватит - ржавчина так быстро развивается :).

Кстати, да, переписал с glfw-rs на glutin - чем больше кода на ржавчине, тем прощe, особенно при сборке на разных платформах. Еще хотел со своих костылей вокруг OpenGL перейти на glium, но пока не осилил.

Переделал с выделения через цветовой буфер на чистую математику - пересечение луча из курсора с плоскостью карты, бла бла блап. Уж очень много от времени отрисоки кадра оно сжирало, да и с шейдерами так меньше хлопот.

Но это все про техническую часть. Что касается самой игры, то:

Ну, вот как-то так. Разработка, как видно, сильно затянулась - - я-то хотел такое уже через пару месяцев иметь, ха! То ли мне просто лень, то ли времени и правда мало получается выделять, черт его знает. Уже мнооого раз полностью терял весь энтузиазм и забрасывал игру на пару месяев, даже пытался чего-то другое делать. Но потом возвращался, что бы все-таки надо довести до ума эту чертову ЗК :) . Да и вышеупомянутые игры сильно помогали с вдохновением)

Вот, собственно, вся первая запись. Вряд ли я буду теперь пытаться делать недельные отчеты, скорее буду писать более мелкие заметки по настроению - регулярность вытягивает из любого дела весь интерес. Ну и писать тут буду, наверное, не только по делу - смотрите теги :) .