Публикую своего рода питч-док – документ с презентацией моей игры. Делюсь тут всеми подробностями проекта и видением реализации.

Ладно, не MMO RPG, а всего лишь подобие Hearthstone
Ладно, не MMO RPG, а всего лишь подобие Hearthstone

Жанр: ККИ с PvP-режимом

ККИ — коллекционная карточная игра. PvP — фокус на противоборстве игроков против игроков. В моем случае это всегда противоборство двоих игроков.

Почему карточная игра — я выбрал такой формат, потому что его легче всего прототипировать на бумаге. Бумажный прототип максимально похож на финальную игру. Любую экшен-игру, завязанную на перемещении в 3D- или 2D- мире, на бумаге запрототипировать невозможно — только отдельные механики. Но никогда не поймешь, как будет играться основной геймплей, пока не сделаешь прототип в Юньке или Анриле.

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

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

Почему карточную PvP-игру плохо делать в одиночку
Особенно если ты не разработчик…

Чего я не учел, так это сложности в разработке карточных игр. Дело в том, что для платформеров существуют движки, для шутеров от первого и от третьего лица существуют движки, для текстовых квестов, визуальных новелл — чего угодно. Но вот движков для карточных игр я не видел. Разве что для какой-нибудь Хартстоуно-подобной игры, в которой механики минимально отличаются от оригинала.

Чтобы сделать интересную карточную игру со свежими механиками, тебе придется ручками писать код. Либо делать настолку.

Что уж говорить про мультиплеерные игры. Это конечно не Контр-Страйк и не файтинг, но все равно — даже не любой разработчик возьмется пилить мультиплеер. Как я со своим опытом буду решать эту проблему — пока не знаю. Своими идеями поделюсь чуть ниже.

Платформы

Начать планирую со Steam, VK Play, Яндекс Игр и Itch.io. Затем охватить мобильные платформы. Затем — консоли.

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

Почему тогда в первую очередь Стим и другие ПК-платформы? Потому что на них легче (в моем представлении) разместиться и набрать органическую лояльную аудиторию. Исходя из того, что я знаю, для продвижения мобильной игры однозначно придется затрачивать деньги на рекламу. Я же не собираюсь тратить на рекламу ни рубля — ниже рассказал, почему.

Маркетинг

Как говорил Сет Годин, контент-маркетинг — единственный маркетинг, который у нас остался.

Я считаю, что реклама — это устаревший маркетинговый инструмент для продажи игр. А еще у меня нет на нее денег)))

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

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

Монетизация

Игру хочу продавать по подписочной модели. Уже представляю, сколько будет возни с тем, чтобы реализовать ее в Стиме и сколько времени придется потратить, чтобы объяснить пользователям ценность такой модели. Но я верю, что для игры моего формата есть только два способа зарабатывать деньги:

  • Free-to-play, где игроки платят за получение геймплейного преимущества либо за уникальную кастомизацию.

  • Собственно, подписочная модель, где платят только за доступ к игре.

Фритуплей мне не нравится совсем, поэтому остается подписка. Вы спросите: почему не сделать обычную разовую покупку? А я отвечу вам, что если ты постоянно создаешь для игры новый контент, то логично и ждать постоянной отдачи в виде денег. А я планирую регулярно выпускать новые карты, режимы и прочие штуки.

Ядреный геймлей (то есть, ядерный, то есть, core)

Что сделал на текущий момент
Что сделал на текущий момент

Основную механику боя я почти слизал со Slay the Spire: карточки тоже выдаются каждый ход и сбрасываются в конце хода и при розыгрыше. Если сравнивать с той же Magic the Gathering, боевка в Slay the Spire динамичная: одну партию легко разыграть и за 5 минут, чего не скажешь про Мотыгу с ее монотонным выкладыванием маны — для быстрой легкой игры не подходит. Механика из Hearthstone, где мана выдается сама по себе и растет каждый ход, мне просто не нравится.

Главное отличие от Slay the Spire в том, что моя игра мультиплеерная, а значит против нас такой же игрок с такими же карточками.

Намерения игрока не покажешь иконкой над головой противника, как в Slay the Spire. Только если в ближайшее время не появится квантовый компьютер, который сможет предсказывать будущее
Намерения игрока не покажешь иконкой над головой противника, как в Slay the Spire. Только если в ближайшее время не появится квантовый компьютер, который сможет предсказывать будущее

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

Более мелкое отличие от StS: отсутствие маны. Это я взял из карточной игры Fate Hunters. Там ману заменяют естественные ограничители, типа количества карт в руке и свойств самих карт: некоторые карты для розыгрыша требуют скинуть или сжечь другую карту из руки.

Fate Hunters. С первого взгляда мало чем отличается от Slay the Spire
Fate Hunters. С первого взгляда мало чем отличается от Slay the Spire

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

Дальше следует рассказать про мета-геймплей.. Но перед этим я сделаю небольшое ЛОРическое отступление…

Лор

Короче, за лор мне пока совсем кринжово. Лор я создавал по принципу «А что, если…». И вот мое «А что если…» звучит так: а что, если суд поединком закрепился бы и дошел до позднего средневековья как основная судебная практика? Я фанат восточных единоборств, поэтому мне было интересно пофантазировать в эту сторону.

В мире моей игры существует множество школ боевых искусств, которые готовят своего рода адвокатов. То есть, людей, которые будут сражаться в суде на стороне обвиняемого или обвинителя. И играть мы будем как раз за таких людей, сражаясь в судах и совершенствуя их боевые навыки.

Мета-геймплей

Мета у меня вытекает из лора. А еще главным образом из модели продаж Magic the Gathering.

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

Так вот, покупать себе новые карточки в колоду и строить ее можно будет прямо как в МТГ. Главное отличие: при покупке бустера игрок забирает не все карточки из него, а только одну. Чем дороже бустер, тем больше выбор — либо тем выше ценность карточек в нем. Это опять же взял из Slay the Spire и других карточных рогаликов.

Причем же тут лор, спросите вы. А вот причем: покупка новых карточек — это по сути совершенствование своего стиля боя. И валюта, за которую игрок покупает карточки — это опыт, полученный за участие в поединках. Но помимо опыта будет еще и обычное золото, за которое игрок может покупать предметы — по типу зельев и артефактов из Slay the Spire. Предметы будут отдельно от карточек — как именно их внедрять, я пока еще не определил.

Каждый боец представляет школу определенного стиля — а это значит, что и набор карточек у него строго определен. Если колода, скажем, из синих карточек, не получится добавить в нее красные карты.

Уровни
В игре есть несколько уровней бойцов. От уровня зависит, какие карточки можно использовать. С точки зрения лора это презентуется так, что сначала бойцы дерутся голыми руками, а с каждым уровнем у них в арсенале появляется все более летальное оружие. С точки зрения геймплея, появляются карточки с бóльшим уроном и более интересными способностями: хочется отразить лор-составляющую так, что по противнику будет тяжелее попасть, но при этом каждое попадание будет сильнее приближать к поражению.

Техническая часть

Пока что самая слабая часть, так сказать. Делаю на Unity, без визуального программирования, только C#. Программировать учусь параллельно с созданием игры. Если честно, пока что это самая интересная для меня часть производства — гораздо интереснее, чем описывать фичи на бумаге или на бумаге же тестить их. Хотя и идет разработка сильно медленно. Пока успел сделать только базовые механики боя. Чисто технически, без визуальных эффектов.

Недавно рассказывал, как делал руку с картами:

Арт

Игру решил делать только в 2D. По мне, в таких играх 3D — это пыль в глаза, которая отвлекает от игрового процесса. Мне вообще не нравится MTG Arena и то, как она оформлена: крайне неудобно на все это смотреть. И очень нравится, как мастерски сделано 2D в StS.

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

И тут стоит сделать важную оговорку: не совсем в одиночку я пилю игру. Мне еще помогает художник, который рисует иллюстрации для карточек, фоны, иконки и прочие штуки.

В отдельной статье рассказывал, как я делал ТЗ для художника.

План разработки

Главной сложностью сейчас для меня видится создание мультиплеерной игры. Да и в целом проект слишком большой для первой инди-игры. Решил поступить так: перед созданием своей игры мечты сделаю еще два релиза.

Первый релиз: игра с возможностью сражения двух игроков на одном экране и сражением против бота. Плюс, две колоды, в которых можно менять карты. Второй релиз: игра с сюжетным режимом, который имитирует мета-геймплей в мультиплеере. Можно покупать карты, получать уровни и т. д. И уже третьим релизом делаю игру в том виде, в котором ее задумал. Естественно, каждый из релизов будет предварять куча демок, видео и других сопроводительных материалов, как этот.

Каждый релиз — это качественная игра. Я убираю баги, делаю удобный интерфейс, красивые анимации. Делаю все настолько красивым, насколько могу, и собираю по итогу обратную связь, чтобы в следующий раз сделать лучше. Каждый релиз выкладываю в Steam и в итоге продаю за настоящие деньги — цену выставлю минимальную.

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

Изначально план был другой: сначала сделать трейлер, потом демку без мультиплеера, потом демку с мультиплеером, потом добавить все остальное в игру и зарелизить. Понял, что цикл выпуска конечного продукта сильно растягивается.


Вот такие вот у меня наполеоновские планы. Рад, что поделился ими с вами. Буду благодарен обратной связи, особенно критике моего подхода или моих задумок.


Этот пост входит в цикл постов про игру, которую я потихоньку делаю уже несколько месяцев. Я делюсь всем производственным процессом: какие решения я принимаю в разработке, геймдизайне, интерфейсе, арте и других сферах. В моем телеграм-канале вы можете посмотреть другие посты и узнать, когда ждать следующие: @nigylamchan.

Комментарии (13)


  1. shaman4d
    10.08.2023 15:16
    +2

    Потом расскажите как вы патчами правили баланс.


    1. Nigylam Автор
      10.08.2023 15:16

      Я думаю, мой подход как раз и позволит на выходе получить более сбалансированную игру: будет много версий для тестирования


  1. ildarin
    10.08.2023 15:16
    +1

    Я делал уже карточную игру. Механика как в Orions: Legend of the Wizards, но вместо насилия - любоф. Ссылку, ессно, не дам (Ибо там затрагивается тема, которая, одному Богу известно - почему-то является запретной, в отличии от убийств и членовредительства). Но делал на ванильном JS, запилил где-то за неделю. На ней же и вывел код стайл, который хорошо ложится на сетевое взаимодействие: через "state" и "controller". А действия - через "history". Т.е. state - содержит лишь информацию (состояние игрового поля), controller - действия с полем. Все действия записываются в history. GUI читает новые события из history и отображает их. Еще и немного механику AI проработал - minmax.

    Я считаю, что реклама — это устаревший маркетинговый инструмент для продажи игр.

    Тут - любо бешено соглашаюсь. Идеальный маркетинг - превентивный. Изучаем потребности ЦА - проектируем потребность - реализуем продукт. Но в вашем случае - все равно: "сначала я сделаль, потом заставиль это кушац". Т.е. желание разраба превалирует над желаниями потребителей. Это уже чисто творчество, но не бизнес. Ибо результат работы в первую очередь удовлетворяет создателя, но не публику.

    Я обожаю тратить деньги на бустеры для Мотыги, но понимаю, что это нечестно.

    Если это в правилах игры - то честно. Честно то, что не обман. Читерить - бесчестно. Харстон тоже "донатная помойка" - но это лучшая многопользовательская ККИ.


    1. Nigylam Автор
      10.08.2023 15:16
      +1

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

      С "изучаем потребности ЦА" не до конца согласен. Такой подход имеет место быть. Но мне больше нравится путь "изучаю свои потребности". То есть, делаю все так, как понравилось бы мне и попутно рассказываю об этом везде, где дадут возможность. Возможно, звучит наивно. Но посмотрим, что в итоге выйдет

      Соглашусь, да. Понятия "честный" и "нечестный" относительно МТГ или Хартстоуна с их донатными механиками неприменимы. Тут скорее "нравится" или "не нравится". Мне вот не нравится Харт, я хочу сделать такую игру, которая мне бы полностью нравилась


      1. ildarin
        10.08.2023 15:16

        Тогда на коммерческий успех расчитывать тоже наивно. Делать для себя - значит для себя.

        Про прогу - нужно разделять логику и интерфейс. Можно игровую логику написать вообще без графики, в консоли или на юнит тестах. А графическую часть - отдельно. Кароч - гуглим MVC или DDD. Хотя, это для профи уже.

        Я шарп мейню, но игрушки на жс пишу - особо не требовательные к производительности. Хотя ща пришлось шарп расчехлить (думал даж плюсы или раст). Нейросетку учить надо, скорость нужна, хочу нпц на нейронке сделать.


        1. Nigylam Автор
          10.08.2023 15:16

          Я прост знаком был с Юнити, а там шарп. Поэтому для меня это самым легким путем было что-то начать делать


          1. ildarin
            10.08.2023 15:16

            Вот код для плавного перемещения карты в нужную позицию: c.position.x - где должно быть, c.container.position.x - где есть сейчас.

                const handCardPositionInterval = setInterval(() => {
                    hand.cards.forEach(c => {
                        c.container.position.x += (c.position.x - c.container.position.x) / 10
                        c.container.position.y += (c.position.y - c.container.position.y) / 10
                    })
                    app.stage.sortChildren()
                }, fps)

            И позиция: aRad - "угол карты", чтобы было "веером". Тут не оптимизированно т.к. dx и rdx можно сохранять, но я ж говорю - на оптимизацию забил)

            handGraphicsInfo = {
                    sx: 200,
                    ex: 1200,
                    sy: 850,
                    ey: 900,
                    fps: 1000 / 60,
                    zindex: 5000,
                    zoom: 1.05,
                }
            const rotationDiff = Math.PI * 0.3
            function updateCardPosition(i, card1, cardsCount) {
                        let di = (i + 1) / cardsCount
                        let dx = handGraphicsInfo.ex - handGraphicsInfo.sx
                        let dy = handGraphicsInfo.ey - handGraphicsInfo.sy
                        let rdx = handGraphicsInfo.sx + di * dx
                        let rdy = handGraphicsInfo.sy + di * dy
                        let aRad = -rotationDiff + (di * rotationDiff)
                        const handposition = { x: handGraphicsInfo.sx + rdx, y: rdy }
                        card1.handposition = handposition
                        card1.aRad = aRad
                        card1.index = i
                        card1.position = {
                            x: card1.handposition.x,
                            y: card1.handposition.y
                        }
                        card1.container.rotation = aRad
                        card1.container.zIndex = i + handGraphicsInfo.zindex
                        return aRad
                    }

            Про то, как на жс по быстрому написать игру - Что такое игра? Как ее написать?

            И код - абстрактный, чистая математика. Детали реализации графического UI - не существенны. Хоть юнити, хоть анрил энжин. Разве что синтаксис поменять на <язык>.


            1. Nigylam Автор
              10.08.2023 15:16

              Спасибо! С углом карты попробую у себя применить


          1. ildarin
            10.08.2023 15:16

            Вт кста, вот за пару дней (36 часов) для GMTK делал карточную игру.

            https://ildar-in.itch.io/unsurvived


  1. haldagan
    10.08.2023 15:16

    Даже в статике все чрезмерно пестрит и глаза разбегаются. И дело не в большом количестве карт на столе

    Я бы не назвал Арену идеальным примером UI, однако она более чем удобна. Глаза разбегаться разве что с непривычки могут, доска считывается достаточно легко. Даже в шакальном качестве совершенно понятно, чем играют оба и какова ситуация.

    сначала сделать трейлер, потом демку без мультиплеера, потом демку с мультиплеером, потом добавить все остальное в игру

    Неправильно ты, Дядя Федор
    Что бы делал я:

    • Прототип на бумаге, поиграть с друзьями

    • MVP с мультиплеером, без анимаций и графики

    И уже потом (если играбельно и цепляет) - альфа для обкатки на незнакомых людях.

    Но вот движков для карточных игр я не видел.

    Tabletop Simulator - движок/симулятор для любых настолок в принципе (сам изнутри не щупал).

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

    Тут у вас противоречие. Если вы кому-то рассказываете о вашем продукте для того, чтобы этот кто-то купил ваш продукт, вы его рекламируете.


    1. Nigylam Автор
      10.08.2023 15:16

      Бумажный прототип уже делал, играл с друзьями. МВП с мультиплеером звучит логично. В принципе, сейчас его и делаю, только мультиплеер не сетевой, а на одном экране. Правда на графику и анимации все же отвлекаюсь

      По поводу рекламы: для меня реклама - это когда я покупаю место (на доске объявлений, в поисковой выдаче, в ленте соцсети), чтобы туда вставить объявление о своем продукте. Когда я рассказываю о своем продукте - это уже контент-маркетинг


  1. saroff
    10.08.2023 15:16

    Сразу скажу несколько предупреждений - подписочная модель - значит чтобы привлечь и сохранить пользователей нужно продумать постоянные обновления контента. Советую сразу подумать над этим как будут выглядеть эти обновления, и как не упереться в "слишком много карт" - ротация а-ля харстоун\мтг, введение новых механик а-ля Legends of runeterra или что-то еще.
    Также, спрашивать с пользователей регулярную плату за ноу-нейм игру в которой возможно, особенно первое время, в принципе не с кем будет играть - достаточно рискованно. Я бы предложил модель дешевая база + регулярные платные контент-паки. (Но тогда новые пользователи могут столкнуться с огромным пейволлом в лице "тебе нужно купить все уже вышедшие контент паки").

    Ну и еще - ККИ ОЧЕНЬ чувствительны к тому, чтобы на каждом этапе "прокачки" ты мог поиграть против игроков того же уровня, что для маленькой игры может быть ОЧЕНЬ сложно. В кратце - первая пачка игроков заходит и прокачивается весело, потом хотят зайти новички - и по ним бульдозером катаются уже опытные игроки.


    1. Nigylam Автор
      10.08.2023 15:16

      Да, пока что только морально готовлюсь ко всем этим проблемам. План такой: первый уровень сделать бесплатным и сначала вложить побольше времени в его развитие. Когда будет достаточно классно все выглядеть и наберется база игроков, запускать следующие уровни с новым контентом и их уже продавать по подписке. Чем больше будет изначальный спрос, тем выше брать цену для подписки. Уровень ограничивает тех, с кем ты можешь сражаться (только игроки твоего же уровня), и карты, которые ты можешь использовать