Поиграем?
Ждёт достойного противника
Ждёт достойного противника
Страшно представить, сколько денег стоят эти каменные шахматные столы. Не удивлюсь, если за них заплатили миллионы. Но самое обидное, что шахматные доски на них расположили неправильно. И ведь никто не заметил! Ни люди, которые изготавливали столы. Ни люди, которые принимали работу. Никто. Кстати, столы эти стоят уже много лет. Так и не исправили. Управленцы ВДНХ, нельзя же так! Такие вещи надо исправлять!
Герои Гильдгаарда
Друзья, мы тут закончили разработку нашей новой онлайн игры, поэтому перед полноценным релизом хочется немного рассказать про неё, про какие-то технические подробности, да и вообще как из 2D пришли в 3D (почти).
Мы делаем многопользовательские мобильные онлайн игры и наша новая разработка не стала исключением. Герои Гильгаарда – это логическая онлайн стратегия, где игроку необходимо захватить все шашки противников. Тут нет элементов случайности (в классическом режиме), поле фиксированного размера, игроки ходят по очереди и всё решает скилл.
Каждый игрок начинает со своего угла с 3 начальными шашками, расположенными уголком. При игре один на один, игроки располагаются по диагонали. В свой ход игрок может добавить новую шашку только на клетку где уже стоят шашки его цвета. На пустую клетку добавить шашку – нельзя.
Когда в одной клетке скапливается 4 шашки, они разлетаются в соседние клетки на 4 стороны. Если в это время в соседней клетке были шашки противника, они переходят к игроку сделавшему ход (меняют цвет). Собственно, это самое интересное: если в результате хода и разлёта шашек, в какой-то клетке снова скапливается 4 шашки, то процесс продолжается пока все шашки не разлетятся по своим местам. Как это примерно выглядит:
На видео выше просто пример, слабенькое комбо, под конец партии могут быть довольно эпичные камбеки.
Да, в этой игре есть пару стратегий которые позволяют добиться преимущества на поле, хотя может показаться что победа – дело случая – это не так. Но в то же время, один ход в конце партии может изменить всё…
Играть можно один на один или вчетвером. Зачастую партии достаточно короткие, можно завершить буквально за несколько минут, но не всегда конечно, можно долго елозить туда-сюда. Есть расширенный режим, в котором в центре поля рандомно появляются специальные клетки с эффектами. При попадании шашки на такую клетку происходит какая-нибудь магия :)
Расширенный режим
Также, можно смотреть другие игры в реальном времени (если она не приватная), гамать с друзьями закрытые партии, общаться в чатике, обмениваться фотками, дарить подарки, играть одним аккаунтом на iOS и Android и прочие радости. Это всё можно прочитать в описании на страничке в сторе. А ещё, у нас нет рекламы (только ревардед). Раунд!
По задумке, Гильдгаард – это королевство, где золото самый важный ресурс за который идёт борьба. Заработанное в боях золото можно будет тратить. В общем-то отсюда и название: gild – золотить, ну а окончание -gaard, это популярное окончание датских городов и фамилий, которые означают к кому относится данная территория. Вот такой этимологический мини-экскурс, а не отсылка к Ведьмаку :)
Герои тоже были придуманы не просто так. У каждого своя история и, если всё пойдёт как мы хотим, то в одном из обновлений к игре добавится интересная мета. Об этом пока умолчу.
Сейчас доступны 3 арены где можно показать своё мастерство и заработать голду, 8 героев (4 доступны сразу), и разные айтемы чтобы “выделяться” в топе игроков.
У нас большой опыт в разработке мобильных онлайн игр. В основном жанра: настольные. Некоторые из них, шутка ли, уже 10 лет! в топе в Google Play и AppStore. Ну и наверняка многие играли в наши карточные игры, нарды, шашки, домино и другие. Все они в 2D, некоторые на LibGDX, другие на SpriteKit, а все последние делаем уже на Unity.
Герои тоже на Unity. Но в отличии от предыдущих игр, где было достаточно 2D, мы решили поэкспериментировать с 3D. Модельки, свет, партиклы, вот эти все штуки. Мы не используем сторонние ассеты, почти всё своё. Исключение составляют какие-то известные и проверенные библиотеки, например, DOTween. Вот кратко что используем:
External Dependency Manager – мастхев штука для мобильной разработки, подтягивает все зависимости
SafeArea – один скриптик для того чтобы ваш UI не залазил на вырезы и дырки в экране
DOTween – движок для анимирования, на нём делаем эффекты UI, да и самой игры
Leopotam – нельзя не отметить вклад Леопотама, использую его скрипты, почти все допилинные, сейчас они уже недоступны на его гитхабе, он больше по ECS
UnityIngameDebugConsole – прекрасная штука для отладки на девайсе, можно биндить свои команды, смотреть лог итд
UI Soft Mask – мягкая маска для UI
Graphy – ещё один отличный инструмент для дебага на девайсе
Собственно это всё что взяли со стороны :)
В основе лежит наш фреймворк, который оброс интересными возможностями:
Сетевая часть: RPC, events, многосерверность, поддержка SSL и прочее
UI binding
Набор UI компонентов: попапы, бесконечные списки, туглы, модальные окна итд.
Менеджер сцен и экранов с дозагрузкой
Работа с HTTP
Загрузка и кеширование картинок
Менеджер корутин
Работа с эмоджи
Менеджер сообщений. За основу взяли штуку на интерфейсах и допилили под свои нужды
Локализация и другие табличные данные через Google Sheets (тут снова привет Леопотаму :)
Большой набор билд скриптов. Про это я немного писал на DTF. Теперь это выглядит как-то так и улучшается:
Наш кастомный билдер под разные платформы, экономит кучу времени
Набор плагинов для Android, Huawei и iOS:
Apple Sign in
Google Sign in
Huawei Sign in
Встроенный браузер
Работа с камерой и галерей
Нативное поле ввода
Покупки
Реклама
Push уведомления
Отправка почты
Шаринг
In-app review и другие. Об этом писал как-то тут.
Еще у нас свой remote конфиг, менеджер звуков, шифрование, liveops штуки итд
Все модельки сделаны в Blender. Потом делали ретопологию, потом запекали свет, анимации и всё это импортировали в Unity. Получилось вроде симпатично. Вот так выглядели почти законченные первые герои:
Все герои на текущий момент
А вот так выглядел самый первый прототип, когда ещё не было понятно, пойдет игра в продакшн или нет:
Он был играбельный, без сервера, игроки просто ходили по очереди, тут ещё неправильно делается разлёт шашек, но даже такие простые штуки сразу позволяют оценить как игра будет играться. Делайте прототипы!
Все спрайты и текстуры делали POT, собирали в атласы, пробовали разные типы сжатия дабы добиться меньшего размера билда и хорошего качества на экране. Кстати про оптимизацию, мой древний пост ещё немного актуален, ну, некоторые пункты точно будут полезны.
Вообще каких-то особых проблем с 3D не возникло, хорошо оптимизированные модельки и запечённый свет решают много проблем :) Но у нас и каких-то замороченных сцен, травы, воды и прочего нет. Для первого раза решили не мудрить, если пойдет – будем дальше в 3D что-то поинтересней делать.
Если говорить про код, банально, но кодим чтобы поменьше мусора было, тогда всё будет плавно и красиво. Не всегда это конечно получается, но стремимся. Каких-то визуальных штук не используем, типа PlayMaker, Bolt или что там ещё есть. ECS тоже пока не приходилось в прод запускать, так, побаловались просто. Да, на монобехах, да не дрочим на SOLID, пользуемся тем чем удобно, чтобы работало хорошо и было понятно)
Вот такая коротенькая история про нашу новую игру. Когда будут какие-то метрики, постараюсь поделиться тем чем можно. Если интересны какие-то детали – пишите в комменты, попробую ответить всем.
Хороших и интересных игр!
Небольшая просьба: если нашли баг, напишите пару строк на hg@magicboard.games, постараемся побыстрее исправить и сделать апдейт. Плохие оценки в сторе так сложно исправлять :(
«Понять и простить», попросил лихач, сбивший в Москве полицейского.
35-летний Парвиз Юнусов заявил, что рассчитывает на «понимание и примирение», так как у него трое детей.
Возбуждено уголовное дело по статье "Нарушение ПДД, повлекшее по неосторожности причинение тяжкого вреда здоровью человека". Юнусову грозит до семи лет колонии.
Это моя авторская игра на удаление рядов. Число игроков от одного до четырёх. Для одиночного режима нужно 14 шашек, (цвет не важен), игральный кубик и ещё доска 4 на 4. Рядом с доской нарисованы 6 фигур тримино (подсказок).
Суть одиночного режима - сделать как можно больше ходов. Ход - это бросок кубика, затем выставление тримино (трёх рядом стоящих шашек) и, если повезёт, удаление всех построенных вертикальных и горизонтальных рядов.
Теперь подробнее. Тримино - это три квадрата, соединённых сторонами. Эти квадратные поля занимают шашками. Бывает тримино-палочка и тримино-уголок. В моей игре важно, как повёрнуто тримино: палочка может быть вертикальной и горизонтальной, а уголок можно крутить четырьмя способами.
Всего 2+4=6 комбинаций (они и нарисованы на подсказках). Игрок бросает кубик и выставляет на доску выпавшую комбинацию на любое свободное место (даже если эта комбинация висит в воздухе). Например, если в начале игры выпала вертикальная палочка, есть 8 вариантов, где её разместить. Варианты: в любой из четырёх колонок (сверху или снизу).
Короче, проще посмотреть видео игры в одиночном режиме продолжительностью 19 ходов. Видео без звука.
Если Вы построили горизонтальный и/или вертикальный ряд/ряды из 4 клеток, то все шашки с доски снимаются. Диагональные ряды не считаются. Игра заканчивается "тупиком", когда нет ни одного хода.
Как Вы поняли, у меня есть примитивная web-версия. Выложил код в открытый доступ и сделал страничку на GithubPages. Используйте GoogleChrome, ЯндексБраузер, Opera, FireFox, Edge. У любителей яблочной техники в Safari баг, до которого я ещё не добрался.
Насладиться игрой:
Поковыряться в коде и скачать доску для печати на А4:
Файл: Printable Board on A4 (GameTrimino).pdf
Весь JavaScript находится прямо внутри одного index.html файла, никакие библиотеки и фреймворки не используются. Если вы скачаете файл index.html, то он будет работать даже без интернета. Графика на Canvas самая примитивная.
Теперь о режиме игры вдвоём (и с большим числом игроков). Есть быстрая версия (в этой версии, если нет ни одного хода, то игра сразу заканчивается), а есть медленная (в этой версии, если нет ни одного хода, то игрок бросает кубик до тех пор, пока ход не появится). Остальные правила одинаковы для обоих версий. Правила такие.
Оба игрока получают в свой запас по 12 шашек (цвет ни на что не влияет, просто в начале удобнее делить шашки по цветам: первому игроку - белые, второму игроку - чёрные). Ходы игроки делают из шашек из своего запаса и образовавшиеся ряды собирают в свой запас. То есть игрокам выгодно строить ряды и мешать сопернику.
Когда у ходившего игрока после хода остаётся две, одна или ноль шашек, игра заканчивается подсчётом очков: каждая шашка в запасе приносит по одному очку. Ещё игра может закончится, если на доске нет ни одного возможного хода (даже при любом броске кубика) - тогда теоретически возможна ничья (равный счёт).
При быстрой версии большинство партий заканчивается «тупиком». Самый быстрый теоретически возможный «тупик» возникает после того, как белые сыграли уголок номер три в центр, черные - уголок номер три в правый нижний угол, а белым потом выпал уголок номер шесть. Ниже - самый быстрый «тупик».
При игре вдвоём можно раздавать не по 12 шашек, а 11, 10 или 9 (чтобы игра заканчивалась быстрее, особенно в медленном режиме с перекидыванием). При игре втроём или вчетвером правила такие же, как и при игре вдвоём.
Если вас заинтересовала моя игра, то пишите комментарии в комментариях. Я их прокомментирую.
Мы постарались сделать каждый город, с которого начинается еженедельный заед в нашей новой игре, по-настоящему уникальным. Оценить можно на странице совместной игры Torero и Пикабу.
Реклама АО «Кордиант», ИНН 7601001509