Medieval Contrast
8 постов
8 постов
Приветствую, читатели Пикабу! На связи главный разработчик и проектный директор Medieval Contrast Максим Дегтяренко. Отвечая заранее, да, этот пост в том числе для того, чтобы привлечь внимание к нашему проекту, но в основной своей части хотим рассказать о трудностях, с которыми сталкиваемся при разработке.
Многие читатели не любят воду в подобных статьях, поэтому в этот раз мы хотим добавить информативности.
Самое основное, что не маловажно в играх от третьего лица - это движения и анимации персонажа, в данном случае речь идёт о самых базовых механиках. Казалось бы, Unreal Engine сделал всё для того, чтобы такие системы реализовывались в кратчайшие сроки и максимально просто, но не в нашем случае.
Изначальная задача - разделить movement-системы на стандартную и прицеливание/бой, а так же создать эту movement-систему для режима прицеливания. Ключевым фактором, усложнившим разработку, стало наше желание сделать переход между режимами плавным.
Мы начали с выставления камеры для каждого из режимов, руководствуясь в том числе правилом третей, а так же реализовали плавный переход между ними через TimeLine.
Расположение камеры в режиме прицеливания/боя. Камера немного ближе и выше. FOV 90 градусов для наилучшего обзора.
Данной "системой" мы не хвастаемся, это достаточно легко реализуемо, но хотим показать с чего начинали.
Default движения персонажа мы оставили стандартными как в шаблоне Unreal Engine 5 для TPS-игр, но внесли некоторые корректировки в значения Movement-компонента: уменьшили максимальную скорость, скорректировали разгон персонажа, сделали режим спринта и прицеливания (изменение скорости) - всё это, конечно же, с репликацией под кооператив.
Немного о дефолтной системе (если кто-то не знает как она работает): персонаж поворачивает своё тело в зависимости от WASD/inputs, направление движения так же корректируется с ориентацией на расположение курсора/контроллера.
Самым важным по прежнему оставалась система передвижения при прицеливании или в режиме боя. Многие разработчики и YouTube-авторы могут сказать: чего тут сложного? Вроде включить Use Control Rotation Yaw (далее - UCRY) и выключить Orient Rotation to Movement и готово, но такая система имела бы сразу несколько ключевых минусов:
Даже с корректной настройкой UCRY моментально поворачивает персонажа в сторону камеры.
Переход между двумя режимами слишком резкий и банальная интерполяция при переходе от режима к режиму не даст нужного результата, равно как при резком повороте мыши в обратную сторону - персонажа просто мгновенно повернёт без плавного поворота.
Короче говоря, такая система слишком проста и вместе с этим совершенно нереалистична с точки зрения погружения в игровой мир.
Мы начали искать референсы Movement-системы среди игр, созданных на Unreal Engine, и нашли. Подходящая по своей логике система Movement-режимов присутствует в игре Bellwright, буквально то, что нужно и нам: верх тела поворачивается за курсором, ноги при повороте (при большом угле) плавно догоняют тело.
Сделать такую систему для локальной игры достаточно просто, но данная система должна работать непрерывно во время сетевой игры, а значит: отдельное внимание репликации (синхронизация - простыми словами) и сетевой оптимизации.
Сама логика не такая сложная с точки зрения нагрузки, поэтому было решено "вешать" её сразу на Event Tick, так как Unreal Engine оптимизирует выполнение сервером Set Actor Rotation (применение поворота персонажа на сервере) и не даёт ему исполняться каждый тик (она работает в районе 10-20 раз в секунду вместо привязки к FPS игрока, который может доходить до безумных 100-120 в секунду, что просто "убивало" бы сервер). Проблемой так же является то, что применение Set Actor Rotation на сервере в Unreal Engine почему-то синхронизируется между сервером и всеми клиентами КРОМЕ самого игрока, которого сервер поворачивает. Вроде ты даёшь серверу команду повернуть себя, но этот поворот срабатывает везде кроме тебя самого.
Первое что приходит в голову - сделать Multicast-событие, которое и будет поворачивать персонажа сразу для всех, включая игрока-владельца, но такая система:
Создаёт высокую нагрузку на сервер, так как Multicast-событие каждый тик клиента - очень дорого для производительности.
Неминуемо создаёт задержку в исполнении из-за сетевой задержки, что при очень плохом ping может создавать задержку в 5-10 секунд перед лишь одной итерации поворота (в случае с интерполяцией - таких нужно много), т.е персонаж будет постоянно "дёргаться" как для сервера, так и для клиентов.
Интерполяция - плавное изменение значения от изначального до целевого с заданной скоростью. Например, при стартовом значении 0 и целевом 1 интерполяция создаёт ряд последовательных значения вроде: 0.001, 0.005 .... 0.995, 1.
В связи с этим лучше всего оставить Set Actor Rotation на сервере (для сервера и других клиентов), так как это часть Character Movement, которая реплицируется автоматически и не создаёт такой нагрузки, но при этом создать некоторый prediction, когда сначала клиент делает поворот у себя, а потом отправляет его на сервер, не дожидаясь ответа от сервера. Таким образом клиент видит у себя плавный поворот без задержек, а сервер уже потом подтверждает этот поворот у себя и транслирует его другим клиентам так же плавно.
При этом особенность системы такая, что для клиента мы используем локальные переменные, а не реплицируемые для других клиентов (в основном для анимаций), что как раз-таки даёт плавность для самого клиента.
Сейчас мы всё ещё сталкиваемся с проблемами данной системы и ищем решение, если точнее: когда нужно начать поворот персонажа - он срабатывает через 1-2 секунды, что является заметной задержкой, так же скорость интерполяции вращения у хоста (он же игрок, он же сервер) и на клиенте отличаются - у хоста скорость интерполяции корректная, у клиента - сильно замедлена, хотя, казалось бы, у клиента вычисления происходят локально и таких задержек происходить не должно, как и такой разницы в скорости интерполяции.
Под конец хочется добавить, что вся разработка ведётся без огромной опытной команды, учимся на своих ошибках и медленно, но верно идём к требуемому результату.
Надеюсь, в этот раз не будет большой критики и осуждению наших публикаций, всё-таки стараемся делиться нашей работой над игрой как есть, а там уже как получается. Тем не менее будем рады любой объективной информации касаемо системы - для нас это не маловажно, мы читаем и учитываем всё, что вы пишите и всегда даём вам обратную связь. Спасибо!
Сразу предупреждаем: да, это пост про инди-игру.
И да, мы знаем, что на Пикабу у многих рефлекс — захейтить любую инди-разработку просто по факту её существования 😄
Но вместо «смотрите наш трейлер» мы хотим показать кое-что реально полезное: как мы отслеживаем результаты разработки, финансы, вклад команды и будущие роялти — и почему без этого в маленькой студии начинается хаос.
Наша команда небольшая, но в ней есть несколько человек, которые имеют право претендовать на Royalty с продаж нашей игры Medieval Contrast.
И тут появляется главный вопрос, который убивает большинство инди-проектов ещё до релиза:
Кто сколько вложил денег?
Кто сколько реально работал?
Кто сколько должен получить с продаж?
Потому что в реальности один человек может вкладывать деньги, второй — вкладывать сотни часов работы, а третий — помогать периодически. И если это не фиксировать, то после выхода игры начинается классическое:
«Я вкладывал больше»
«Я делал больше»
«Я тащил проект»
«Я вообще тогда работал бесплатно»
Мы решили подойти к этому не “по дружбе”, а по-взрослому.
Сделали систему, которая рассчитывает процент доли каждого участника, учитывая:
финансовые вложения (кто платил за что и сколько)
потраченные человеко-часы (кто сколько работал)
итоговую долю в проекте (динамическая ставка)
будущий доход с продаж (Royalty)
То есть примерно как в стартапах: один вкладывает деньги, другой делает продукт — а итоговая доля рассчитывается справедливо, а не «на глаз».
Мы не стали выдумывать пафосные названия и назвали систему просто — Studio.
Изначальная цель была максимально прагматичная:
учитывать расходы по проекту
фиксировать, кто и на что вкладывает деньги
учитывать часы работы команды
рассчитывать доли и будущие выплаты
отображать статус игры, прогресс, отзывы в Steam и т.д.
Да, можно было сделать всё на Laravel, Symfony, Node.js или вообще на микросервисах.
Но мы выбрали путь попроще:
чистый PHP + MySQL, потому что:
этого достаточно для такой системы
разработка быстрее и дешевле
поддержку можно вести без отдельного backend-разработчика
проект не превращается в «платформу ради платформы»
И вот тут самое интересное: мы реально почувствовали, что проект перестал быть «на энтузиазме» и стал управляемым.
Стало проще:
видеть вклад каждого
понимать, где горит по финансам
оценивать, кто сколько реально сделал
планировать разработку и бюджет
Следующим шагом мы начали делать то, что обычно подключают через сторонние сервисы — но нам захотелось встроить это в Studio.
Добавили мониторинг посещений официального сайта игры:
учёт всех визитов
проверка уникальности (visit_key, ip_hash и т.д.)
отслеживание UTM-меток
фиксация источников перехода (Яндекс, Google, прямые заходы и т.п.)
корректное определение реферера
То есть теперь мы видим не только разработку, но и то, как аудитория реально реагирует на проект.
Если пост зайдёт — покажем, как всё устроено внутри: структура базы, логика уникальности, расчёт долей, интерфейс и какие выводы мы сделали по трафику.
Далее мы планируем привязать к кабинету число продаж, ключей и прочее, что можно интегрировать через API Steamworks. Так же планируем добавить различные заметки, план задач со статусами и прочее, что упростит и улучшит работу в рамках собственной системы в одном месте, а не с использованием нескольких других сервисов.
Приветствуем читателей Пикабу! В этом посте мы хотим рассказать вам о том, с какими трудностями мы сталкиваемся во время разработки нашей игры Medieval Contrast.
Ещё в середине 2024 года мы горели желанием создать собственную уникальную игру, но не понимали в этом абсолютно ничего - всё приходило с опытом. Желание сопровождалось выбором игрового движка при отсутствии серьёзного опыта в разработке или программировании - выбор упал на Unreal Engine 5 со своими BluePrints.
Наш директор и главный разработчик, Дегтяренко Максим, он же основатель музыкального издательства Noral Creative, начал глубокое изучение сферы и самого движка (по образованию он программист). Главные первостепенные цели нашей игры: совместный режим/кооператив, выживание, крафтинг. Сама идея началась с космоса - создание на Марсе пригодных для жизни условий.
Проблемы не заставили себя долго ждать: непонимание того, как устроена репликация в Unreal Engine (простыми словами синхронизация между игроками и сервером, равно игроками между собой), постоянные баги и краши движка выводили из себя - мы просто перегорели.
На данном этапе в разработке участвовало уже несколько человек: разработчик, гейм-дизайнер, level-дизайнер.
Спустя продолжительное время, в марте 2025 года мы начали работу над новым проектом - Medieval Contrast. Мы не стали забрасывать множество разработок с первоначального "космического" проекта и стали развивать их уже в рамках нового проекта.
Medieval Contrast в своей первоначальной идеи была слишком амбициозной и обширной, реализация которой казалась недостижимой - так ли это оказалось на самом деле?
Для прототипирования было необходимо множество ассетов и первое время мы доставали их в различных тг-каналах и тд. Позже стало ясно, что игру нужно делать дальше полноценно и использовать "слитые файлы" - не тот путь, который стоит избирать действительно перспективному (на наш взгляд) проекту. Затраты на текущее время за год разработки превышают несколько сотен тысяч рублей, включая ассеты, маркетинг, хостинг и прочее (даже сейчас вы можете увидеть у нас значок Пикабу+ - всё ради нашего проекта).
Много ли это? Решать вам. Но стоит понимать, что эти вложения осуществлялись и осуществляются с целью сделать хороший проект, при этом мы прекрасно понимаем, что можем не заработать с этого ничего - всё ради цели.
Создание страницы игры в Steam было необходимостью, ведь все разработчики знают - чем раньше появится страница, тем больше шансов на органический охват твоей игры. Мы - российская организация без зарубежного банковского счета, поэтому пришлось воспользоваться помощью коллег-друзей из солнечного Казахстана, которые с радостью предоставили свой счет для регистрации Steamworks.
Стоит отметить, что сам Steamworks получилось зарегистрировать на российское ИП, в этом плане со Steam не возникает никаких трудностей - только с точки зрения банковского счета.
Далее: разработка за разработкой.
На данный момент в Steam наша игра собрала >5000 добавлений в Список Желаемого (Wishlist), о чём мы узнали совсем недавно и были в восторге. Самое интересное, что в течении 2025 года игра очень медленно набирала вишлисты, но с Декабря по Январь пошёл сильный буст, который привлёк 80% вишлистов благодаря рекомендациям Steam.
Что будет дальше - покажет время. Мы продолжаем разработку нашей игры и надеемся в том числе на вашу поддержку, Пикабу!
Возможно, наши посты не так сильно наделены скриншотами и прочими материалами напрямую из движка, но сама игра такого формата требует огромного количества времени работы с функционалом, который не так сильно отражается в визуальной составляющей. Визуал - из коробки, функционал - из голов разработчиков.
В этот раз прислушались к мнению аудитории Пикабу и решили сделать более информативный пост о наших начинаниях.
Хочешь помочь нашему проекту? Переходи на наш официальный сайт и знакомься с идеей нашей игры!
К слову, пишите в комментариях, чего больше хотите видеть в наших постах, о чём хотите знать.
Привет, Пикабу!
Мы уже рассказывали о нашей игре Medieval Contrast, многих привлекают такие публикации с нашей стороны, но отзывы сильно разнятся.
Интересно ли вам вообще видеть новости о разработке какой-либо игры (в том числе нашей)?
В прошлом году мы делились с вами планами на нашу видеоигру Medieval Contrast про кооперативное выживание в средневековье, но с тех пор от нас так и не было никаких новостей.
Мы не забыли про нашу игру и она всё ещё в работе, но удивило нас совсем другое. Мы не вложили в продвижение игры ни рубля, почти не публиковали никакие материалы, а игра набрала уже 5000 вишлистов.
Много или мало? Разработчики, подскажите.
А игроки - Welcome на наш сайт.
Многие музыканты, исполнители, артисты считают, что лейблы всегда стараются обмануть артиста, завышая собственную процентную ставку для своего обогащения за счёт автора, но на самом деле такие высказывания несколько неверны - объясняем почему.
Допустим, лейбл предлагает стандартные условия 70/30, а сам работает на упрощённой системе налогообложения (УСН). Разбираем по пунктам:
🔹 6% налога начисляется на всю выручку (100%).
🔹 Если доход превышает 300 тыс. рублей в год, добавляется ещё 1% сверху.
🔹 Если артист — физлицо, лейбл удерживает с его части НДФЛ 13% (от 70%).
Теперь считаем:
💵 Артист получает 70%, но из них вычитается НДФЛ.
🏛 Лейбл остаётся с 30%, но после налогов реальная цифра — примерно 15%.
То есть лейбл зарабатывает вдвое меньше, чем кажется на первый взгляд. А если владелец лейбла — ИП, то сверху идут ещё обязательные взносы (≈45 тыс. в год).
📊 Вывод: при стандартных 70/30 реальная картина распределения денег выглядит иначе. Лейбл берёт на себя не только часть дохода, но и налоговую нагрузку.
Ещё больше новостей об индустрии музыки - Noral Creative.
На данный момент разработка на стадии итогового прототипирования механик, при этом мы стараемся совмещать прототипирование и финализацию законченных механик с внедрением в основной билд игры, чтобы ускорить процесс разработки.
Игра в Steam: ссылка
Мы не хотим делать копию уже знакомых вам игр с новой визуальной составляющей, а хотим создать полноценно другую игру, в которой вы будете с удовольствием проводить время.
Немного о игре
В нашей игре не будет намеренного затягивания игрового процесса ради увеличенного времени в игре, мы наоборот хотим сделать последовательность игрового прогресса немного проще, при этом оставляя зазор для увеличения объёма контента, чтобы вы проводили время в нашей игре не из-за усложнений в добыче каких-либо ресурсов, открытии навыков и прочего, а за счёт интереса к контенту, который предоставляет наша игра.
Вместе с описанным выше, мы не будем намеренно делать первые 2 часа игры интереснее других, а представим к вашему вниманию с ранних этапов игры то, что она из себя представляет, демонстрируя игровые механики и особенности. С первых шагов вы сможете определить - интересно ли вам играть в нашу игру или нет.
Что за счёт игровых механик
По понятным причинам, мы не можем максимально подробно рассказать об игровых механиках, которые вас ждут в Medieval Contrast, но можем дать вам немного почвы для размышления.
Мы решили отказаться от системы экипировки брони, чтобы не влиять сильно на внешний вид главного героя, сохраняя его идентичность в игровом мире, при этом достаточно объёмная система навыков поможет с интересом перекрыть все необходимые нужды, связанные с защитой персонажа.
Наша команда не ориентируется на похожие игровые проекты, поэтому на первых порах игра может показаться вам необычной и, наоборот, раскрыться позднее.
Реалистичность игрового мира способствует вытекающим из этого игровым механикам. Вы можете промокнуть после дождя и заболеть, если во время не найдёте место, где согреться, либо остаться без еды на зиму, если заранее не позаботиться об этом, так как озёра и реки попросту замёрзнут, а животные будут стараться избегать вас, некоторые во все исчезнут с радаров, так как будут прятаться в своих "домах".
Если вы не сравниваете себя с другими проектами, что нам ждать?
Этот вопрос звучит вполне логично и мы с радостью ответим на него. Вам предстоит не только основать собственную династию и построить первые хижины, но и задавать ритм для вашей династии, так как именно вы - её сердце и ключевое звено. От ваших решений будет зависеть судьба жителей, которые примкнули к вам.
Помимо вашего поселения в игре будут несколько крупных точек интереса: вражеские базы, аванпосты, мирные поселения, торговый порт с рынком и многое другое. Вы постоянно будете вынуждены изучать игровой мир, но делая это с удовольствием и интересом, не зная, куда вас приведет очередной поворот в другом направлении.
Когда игра выйдет?
Изначально мы планировали дату релиза на декабрь 2025 года, но мы хотим создать по-настоящему невообразимую игру, что в масштабах инди-студии очень непросто. В связи с этим, на данный момент, мы думаем, что первой ступенью нашей игры будет ранний доступ, на протяжении которого мы сможем довести игру до близкого к идеалу результата, добавляя новый контент на регулярной основе.
Запланированная стартовая стоимость для раннего доступа - 10-14$, но в некоторых регионах цена может несколько отличаться в ту или иную сторону. В первую неделю релиза стоимость игры будет акционной, а именно со скидкой в 20%.
Будет ли открытое бета-тестирование и демо?
Открытое бета-тестирование не планируется, так как было принято решение начинать с раннего доступа. Продолжительность раннего доступа предварительно оценивается в 6-12 месяцев, после которого стоимость игры будет увеличена.
Мы пока не планируем запуск демо-версии игры, но не исключаем этого в будущем.
Дни разработки не проходят даром — мы трудимся каждый день, чтобы результат нашей работы радовал и удивлял вас в лучшем смысле этого слова.
На этот раз мы хотим поделиться с вами небольшой инсайдерской информацией о лошадях в нашей игре.
Мы добавили в нашу игру высокодетализированные модели лошадей.
Лошади — ваши настоящие спутники. На протяжении всего игрового процесса они будут помогать вам перемещаться по игровому миру.
Саму лошадь можно приобрести в специальной локации за внутриигровую валюту. Вы сможете самостоятельно выбрать подходящую вам по окраске лошадь, так как каждая лошадь визуально по-своему уникальна.
Вы можете в любой момент вызвать лошадь, нажав соответствующую клавишу, и добраться до нужного вам места.
Помимо перемещения, вы сможете надеть на свою лошадь специальное седло с небольшой сумкой, куда можно положить несколько дополнительных предметов, которые не поместились в вашем инвентаре.
Комментарий от разработчиков:
Лошади - одна из самых тяжёлых в реализации систем. Довольно просто "приклеить" тело персонажа к лошади и передать управление на лошадь, но куда сложнее сделать всю систему качественной, включая динамичную коллизию самой лошади, но мы это сделали.