После нескольких лет работы в стол наша новая игра стала обретать осязаемые формы, и захотелось чем-то поделиться. Это не настоящий анонс, скорее разминка застоявшихся социальных мышц.
Об игре
1. Жанр — визуальная новелла с элементами интерактивного кино
2. В основе драматическая история о свадьбе
3. Важная тема — проблемы современного ИИ (эх, не устареть бы к релизу!)
4. Действие, как и в предыдущих наших играх, развернётся в мире Прогресс-программы
5. Текстовый движок — Ink
6. Визуальный движок — Unity6. По платформам изначально ориентируемся на Steam, далее как пойдёт
Страницы Steam и трейлера пока нет. Готовим их к полноценному анонсу в 2026-м. Тогда же раскроем название и подробности по сюжету.
И немного скринов из рабочей версий:
Об источниках вдохновения
Здесь одной строкой расшифрую слова из заголовка, которые отсылают к источникам вдохновения для игры. Соединив их все вместе, можно представить направление нашего движения.
1. Свадьба — «Свадьба» Лунгина, «Торжество» Винтерберга и немного всем известного «Горько».
2. Бергман — «Сцены из супружеской жизни» Ингмара Бергмана (не так давно выходил хороший сериал-ремейк с Оскаром Айзеком).
3. RetroGPT — фильм «Она» с Хоакином Фениксом, замешанный с ретрофутуризмом из мира художника Саймона Сталенхага.
4. Мармеладов 1 — визионер и дизайнер Вадик Мармеладов — создатель сервиса «подписки на жизнь» Lot 2046.
5. Мармеладов 2 — спившийся титулярный советник Семён Захарович Мармеладов из «Преступления и Наказания» — представитель русской классической литературы.
О нас
Мы — это студия Provodnik Games. Сейчас в команде 3 человека: сценарист-программист (я), художник и аниматор.
К настоящему моменту на нашему счету 2 новеллы: Вагон-Вагон и Серость. Вторая была отмечена несколькими наградами в индустрии и добралась до Steam и консолей.
В этот раз мы ставим перед собой цель — выйти к широкому кругу игроков. Новая драма должна стать глубже и масштабнее наших предыдущих проектов, но при этом более доступной, вовлекающей.
Текущие дела
На данный момент у нас готов черновой сценарий и собран 1 эпизод c финальной графикой на Unity. Прохождение текстовой версии занимает около 4-5 часов.
Сейчас все силы направлены на визуальное и звуковое оформление игры. Оставшийся объём работ велик (боюсь, не один год), но мы не унываем и терпеливо жуём слона по кусочкам.
В заключение ещё пара картинок из повседневной работы нашего художника:
Подбор референсов для главной героини
Подбор референсов для отеля в горах
Вот такие дела.
Приходите в наши соцсети — VK и Телеграм, нам будет очень приятно. Там потихонечку будем раскрывать другие подробности.
Продолжается путь по созданию игры про мехов. Чтобы она не выглядела хотя бы на первый взгляд так простенько, было принято решение добавить несколько камер. Ну то есть вид сверху, сзади подальше, сзади поближе, кокпит. На это есть несколько причин: ну во первых должно быть круто, во вторых - если в каком-то из режимов будет проседать fps , то можно переключить на другой. А так же, чтобы мех не смотрелся просто картинкой в кадре, я добавил камерам сглаживание резкости слежения (как сложно звучит, offset кароче ) Я и не подозревал в какой геморрой это выльется: то ли дрожат ноги не успевая за торсом, то ли камера не успевает за торсом, то ли фиг пойми. Если убрать эту компенсацию момента рывка камеры - всё норм двигается, но очень скучно - мех как нарисованный, а у меня-то он настоящий )) Вот вопрос: переход на cinemashine даст профит? Пропадёт тряска, или только опять зря всё переделаю? Да, Юнити я освоил недавно (и это было не так то и просто). Если найдутся люди, готовые помочь, подсказать - милости прошу. Всем отозвавшимся искреннее спасибо. Да, игру можно будет запускать на смартфоне, пк. Такие дела.
Любо вы можете протестить игру в открытом тесте на Гугл Плей. Вылетает / не вылетает, тормозит / не тормозит и так далее.
После смерти Эшли Андерсон, работавшей в сфере обслуживания в отеле «Гринвуд», происходят необъяснимые события. Ночью 6 октября 2012 года, когда Эшли пришла убирать номер 352, на неё напали постояльцы. Несмотря на все меры, девушка погибает. После этого невероятного убийства нападавшие признались, что использовали Эшли для своего ритуала в номере. Ровно через год после инцидента постояльцы номера 352, Т. Х. и его семья, были найдены мёртвыми в своём номере. Следователи не смогли найти никаких улик, указывающих на причину убийства семьи. Не сумев прояснить этот загадочный инцидент, власти решили закрыть отель. Но, несмотря на то, что отель закрыт, говорят, что каждый год 6 октября внутри загорается свет и слышны странные звуки. Чтобы разобраться в ситуации, власти решили, что молодой детектив Аарон Паркер — главный кандидат на эту должность. Так ли правдивы эти заявления? Реальны ли звуки, доносящиеся из отеля? Вам, как детективу, будет непросто раскрыть паранормальные события в этом проклятом отеле.
Окружающая среда:
Действие игры разворачивается в отеле, расположенном в лесистой местности вдали от города, в Гринвуде, Англия. Вы будете одни в холодных и величественных коридорах отеля, но не волнуйтесь, за вами будет наблюдать товарищ по команде. Кто знает, может быть, за вами наблюдают и другие?
Сверхъестественные существа:
Дух женщины, потерявшей жизнь после ритуала, проведённого в отеле, и демоны, которые были её союзниками, могут появиться перед вами в любое время в отеле. Обязательно следите за дверями, предметами и даже за манекенами.
Комментарий разработчика об игре:
Мы рекомендуем не играть в одиночку людям, которые боятся темноты, страдают заболеваниями сердца и боятся оставаться в одиночестве.
Отказ от ответственности:
Это вымышленное произведение. Имена, персонажи, места и события являются исключительно плодом воображения или используются в вымышленных целях. Любое сходство с реальными событиями, местами, живыми или умершими людьми является случайным.
ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ!: Обновления могут повредить старые файлы сохранения. Для достижения наилучших результатов начните новую игру.
ВНИМАНИЕ: Эта игра может вызвать приступы у людей с фотосенситивной эпилепсией. Игрокам рекомендуется проявлять осмотрительность.
Опубликовано 4 июля 2025 г.
Жанр Симуляторы
Тип Одиночная игра
Теги #FPS #УЖАСЫ #СИМУЛЯТОР #ИССЛЕДОВАНИЕ #МИСТИКА #АТМОСФЕРИЧЕСКАЯ #ОТ ПЕРВОГО ЛИЦА #ОДИНОЧНАЯ ИГРА #ГОЛОВОЛОМКИ #3D #МРАЧНЫЙ #ТРИЛЛЕР #ПСИХОЛОГИЧЕСКИЙ ХОРРОР #ПОИСК ПРЕДМЕТОВ #РЕАЛИСТИЧНАЯ #ИГРА В БОГ #ДЕМОНЫ #IMMERSIVE SIM #КИНЕМАТОГРАФИЧЕСКАЯ #3D ВИДЕНИЕ
Системные требования
Минимальные:
Требуется 64-разрядный процессор и операционная система
ОС: WINDOWS® 10 (64-разрядная версия обязательна)
Процессор: Intel® CoreTM2 Quad 2.7 ГГц или лучше, AMD PhenomTM II X4 3 ГГц или лучше
Анализ первой сессии -- это "момент истины" для твоей игры.
Представь, что игрок только что установил твою игру. У него нет лояльности, нет эмоциональной связи с проектом. Его первая сессия -- это как первое свидание: либо возникает магия, либо вы больше не увидитесь.
Замылил картинку для интриги :D
Ниже я расскажу, как на основе длительности этого "свидания", можно давать оценку и строить гипотезы. А еще прикреплю SQL запросы и поделюсь аналитикой по своей веб-игре Ферма на острове (https://yandex.ru/games/app/336608).
Что показывает длительность первой игровой сессии
1. Эффективность онбординга
Короткая сессия (менее 3-5 минут) часто означает, что игрок "уперся в стену" -- не понял механики, запутался в интерфейсе или столкнулся с техническими проблемами
Оптимальная длительность (5-15 минут) говорит о плавном вхождении в игру
Длинная сессия (15+ минут) — игрок "зацепился", он получил достаточно мотивации продолжать
2. Прогноз долгосрочного удержания
По моим данным (я их округлил для наглядности), игроки с первой сессией:
Менее 2 минут — 80% никогда не возвращаются
5-10 минут — 45% возвращаются на следующий день
15+ минут — 65% играют через 7 дней
3. Качество маркетингового трафика
Разная длительность сессии по источникам:
Рекламные сети — часто короткие сессии, если реклама не соответствует геймплею
Рекомендации друзей — более длинные сессии, так как есть социальное доверие
Органический поиск — самые вовлеченные пользователи
Сбор данных и SQL запросы
Данные я собираю в Unity Analytics.
Анализ длительности первой сессии за последние 90 дней
WITH first_sessions AS (
SELECT
USER_ID,
EVENT_JSON:sessionID::STRING as session_id,
MIN(EVENT_TIMESTAMP) as first_session_start
FROM EVENTS
WHERE EVENT_JSON:eventName::STRING = 'newPlayer'
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.first_session_start,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE e.EVENT_DATE > CURRENT_DATE-90
GROUP BY fs.USER_ID, fs.session_id, fs.first_session_start
),
percentiles AS (
SELECT
APPROX_PERCENTILE(duration_seconds, 0.1) as p10_seconds,
APPROX_PERCENTILE(duration_seconds, 0.5) as p50_seconds,
APPROX_PERCENTILE(duration_seconds, 0.9) as p90_seconds,
AVG(duration_seconds) as avg_duration_seconds,
COUNT(*) as total_sessions
FROM session_durations
WHERE duration_seconds >= 0 -- исключаем отрицательные значения
)
SELECT
ROUND(p10_seconds, 2) as p10_duration_seconds,
ROUND(p50_seconds, 2) as median_duration_seconds,
ROUND(p90_seconds, 2) as p90_duration_seconds,
ROUND(avg_duration_seconds, 2) as average_duration_seconds,
total_sessions
FROM percentiles;
Анализ длительности первой сессий по платформам за последние 90 дней
Если аналитика по твоей игре собирается сразу для нескольких платформ, то будет полезно посмотреть на них отдельно.
WITH first_sessions AS (
SELECT
USER_ID,
EVENT_JSON:sessionID::STRING as session_id,
MIN(EVENT_TIMESTAMP) as first_session_start,
EVENT_JSON:platform::STRING as platform
FROM EVENTS
WHERE EVENT_JSON:eventName::STRING = 'newPlayer'
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING, EVENT_JSON:platform::STRING
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.platform,
fs.first_session_start,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE e.EVENT_DATE > CURRENT_DATE-90
AND fs.platform IS NOT NULL
GROUP BY fs.USER_ID, fs.session_id, fs.platform, fs.first_session_start
)
SELECT
COALESCE(platform, 'Не указана') as platform,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.1), 2) as p10_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.5), 2) as median_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.9), 2) as p90_duration_seconds,
ROUND(AVG(duration_seconds), 2) as average_duration_seconds,
COUNT(*) as total_sessions
FROM session_durations
GROUP BY platform
ORDER BY total_sessions DESC;
Анализ длительности первой сессии понедельно за последние три квартала
Иногда может быть полезно посмотреть как изменилась длина первой сессии с течением времени.
WITH first_sessions AS (
SELECT
USER_ID,
EVENT_JSON:sessionID::STRING as session_id,
MIN(EVENT_TIMESTAMP) as first_session_start,
EVENT_JSON:platform::STRING as platform,
YEAR(EVENT_TIMESTAMP) as session_year,
WEEK(EVENT_TIMESTAMP) as session_week
FROM EVENTS
WHERE EVENT_JSON:eventName::STRING = 'newPlayer'
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING, EVENT_JSON:platform::STRING,
YEAR(EVENT_TIMESTAMP), WEEK(EVENT_TIMESTAMP)
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.platform,
fs.first_session_start,
fs.session_year,
fs.session_week,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE e.EVENT_DATE > CURRENT_DATE-270
AND fs.platform IS NOT NULL
GROUP BY fs.USER_ID, fs.session_id, fs.platform, fs.first_session_start,
fs.session_year, fs.session_week
)
SELECT
session_year,
session_week,
CONCAT(session_year, '-W', LPAD(session_week, 2, '0')) as year_week,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.1), 2) as p10_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.5), 2) as median_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.9), 2) as p90_duration_seconds,
ROUND(AVG(duration_seconds), 2) as average_duration_seconds,
COUNT(*) as total_sessions
FROM session_durations
WHERE session_year IS NOT NULL
AND session_week IS NOT NULL
GROUP BY session_year, session_week
ORDER BY year_week ASC;
Анализ длительности первой сессии по версиям за последний год
И еще интереснее сравнить длительность первой сессии для каждой версии игры за последнее время.
WITH first_sessions AS (
SELECT
USER_ID,
EVENT_JSON:sessionID::STRING as session_id,
MIN(EVENT_TIMESTAMP) as first_session_start,
EVENT_JSON:clientVersion::STRING as version
FROM EVENTS
WHERE EVENT_JSON:eventName::STRING = 'newPlayer'
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING, EVENT_JSON:clientVersion::STRING
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.version,
fs.first_session_start,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE e.EVENT_DATE > CURRENT_DATE-360
AND fs.version IS NOT NULL
GROUP BY fs.USER_ID, fs.session_id, fs.version, fs.first_session_start
)
SELECT
version,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.1), 2) as p10_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.5), 2) as median_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.9), 2) as p90_duration_seconds,
ROUND(AVG(duration_seconds), 2) as average_duration_seconds,
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING, EVENT_JSON:clientVersion::STRING
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.version,
fs.first_session_start,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE fs.version IS NOT NULL
GROUP BY fs.USER_ID, fs.session_id, fs.version, fs.first_session_start
)
SELECT
version,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.1), 2) as p10_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.5), 2) as median_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.9), 2) as p90_duration_seconds,
ROUND(AVG(duration_seconds), 2) as average_duration_seconds,
COUNT(*) as total_sessions
FROM session_durations
WHERE version IS NOT NULL
GROUP BY version
HAVING total_sessions > 100
ORDER BY version DESC;
Номер версии генерируется автоматически при сборке -- могу рассказать другим постом, если интересно...
1. Я исключил данные по версиям, в которых было менее 100 первых сессий, чтобы убрать всплески:
Вот эти пики точеные портят картину
Например тут было две сессии, где игроков затянуло
2. Выгребаю данные за всё время, чтобы вот вообще всё увидеть :D
Вот, что получилось:
Результат анализа времени первой игровой сессии
Релиз 1.1.2 от 30 октября 2024 года каким-то образом сломал первое впечатление об игре.
50% игроков проводили 43 секунды и меньше в свою первую игровую сессию
Тогда я об этом узнал не сразу, а только через неделю, потому что только-только настраивал аналитику. Это было мега печально, потому что эти игроки были привлечены рекламой за кровные.
Протестировав игру через инкогнито самостоятельно и привлекая друзей, удалось определить причину отвала: аналитика собиралась некорректно.
В браузерных играх, Unity Analytics складывает идентификатор пользователя в куки, а как только они протухают, то обновляет его. Получалось, что каждый раз, игра идентифицировала игрока по новой и считала, что это его первая сессия.
Решение было простым: генерировать случайный идентификатор и сохранять его в данных игрока, а затем использовать в качестве UnityServices.ExternalUserId.
20 октября была выпущена версия 1.2.0, в которой игра начала идентифицировать игроков корректно:
Это позволило адекватно оценить продолжительность первой игровой сессии и составить ряд гипотез. Первое, что бросилось в глаза после плейтестов: игра дарит игроку снаряжение, но не объясняет, как им пользоваться.
Спустя еще неделю игра начала обучать игрока экипировать и прокачивать снаряжение, и вот результат:
Это дало прирост в две минуты или ~28%!
После нескольких релизов летом, начиная с реализации защиты от накруток при переводе времени на устройстве, медиана начала падать:
Возможно, механики просто наскучили и игроки хотят чего-то нового.
Гипотезы закончились, проект наскучил и я переключился на новый.
Заключение
Надеюсь, что мне удалось рассказать что-то интересное и поделиться опытом аналитики.
Набор Ultimate Nature Pack поддерживает следующие версии Unity: Unity 2019, Unity 2020, Unity 2021, Unity 2022, Unity 2023, Unity 6+. URP и HDRP не поддерживаются.
Набор Ultimate Nature Pack включает в себя более 355 уникальных полностью редактируемых деревьев, пней, кустов, растений и цветов, созданных с помощью Unity Tree Creator. Набор Ultimate Nature Pack основан на множестве различных климатических условий, что позволяет вам увидеть растительность со всего мира. Каждый тип растительности уникален и представлен в нескольких размерах, что обеспечивает огромное разнообразие. Все деревья оснащены коллайдерами, идеально подходящими для их стволов.
Демонстрационные сцены включены в демонстрацию
Лесная демонстрация
Пляжная демонстрация
Горная демонстрация
Деревья
10 сосен (тип 1) – 5 больших и 5 маленьких
5 сосен (тип 2) – 5 средних
5 сосновых пней – разных размеров
15 можжевельников – 5 больших и 10 маленьких
10 заснеженных сосен – 5 больших и 5 маленьких
5 заснеженных сосновых пней – разных размеров
5 кустов заснеженных сосен – разных размеров
10 секвойи – 10 больших
10 мертвых деревьев (тип 1) – 5 больших и 5 маленьких
10 мертвых деревьев (тип 2) – 5 больших и 5 маленьких
5 мертвых пней – разных размеров
25 пальм – 10 больших прямых, 10 маленьких, 5x Изогнутые
Физический движок я пилю для игры, потому что считаю, что прогресс в вычислительной технике уже достаточный, чтобы в играх, где физика раньше имитировалась, использовать реальную физику без чрезмерной нагрузки на железо.
Игра, для которой я это делаю, называется Simulario, и доступна для вишлистения на Стиме. Когда она выйдет пока не ясно, потому что я только закончил делать физ-движок, и приступил к реализации геймплея.
Эпоха Flowmap уже здесь! Теперь вы можете создавать невероятно эпическое небо с анимацией, сохраняя при этом отличную производительность. Использование в играх уровня AAA и голливудских фильмах!
Эта версия знаменитого пакета неба включает в себя невероятно детализированные, апокалиптические грозовые облака. Могу сказать, что это самая детализированная и эпическая версия из всех, что я делал на сегодняшний день. Благодаря новым знаниям в области Houdini и 20-летнему опыту работы с матовой живописью в киноиндустрии, я представляю вам идеальное решение для создания эпических небесных сфер в ваших проектах.
Пакет содержит 6 матовых картин кинематографического качества с высоким разрешением (4K) и обзором 360 градусов, которые можно использовать для улучшения вашего окружения и придания ему кинематографического эффекта. В папке Sources также находятся исходные файлы RAW-карт высот и тепловых карт.
Пакет использует систему анимации Flowmap из пакета Matte Painting Skybox Bundle Pack. Все небеса полностью анимированы. Это полностью оптимизированная для производительности система чертежей.
Небо имеет базовые экземпляры материалов для лёгкого изменения цвета, контрастности, экспозиции, скорости и других параметров анимации. Я также включил в подарок 8K-ландшафт с анимированными тенями от облаков. Для слабых и мощных компьютеров я включил версии с ландшафтом и без него.
Небо проецируется на сферу с UV-развёртками, которые служат полукуполами. Поэтому пакет не основан на старой системе боксов из 6 изображений. Это купол неба.
Я бывший художник по цифровым мэтам, поэтому надеюсь, вам понравятся мои рисунки. Обратите внимание, что я создал эти рисунки специально для этого пакета. Он не включает изображения скайбокса, которые можно найти в моей серии Elite Landscapes или предыдущих наборах скайбоксов.
Включенные форматы
Unreal Engine
Технические характеристики
Особенности:
6 изображений неба
4K
Система анимации Flowmap на основе чертежей
Пейзаж 8K
Размеры текстур: все небо 4K.
Столкновения: не требуются.
Уровни детализации: не требуются.
Количество сеток: 1 статичная сетка для небесной сферы.
Количество материалов и экземпляров материалов: 5 базовых материалов, 15 экземпляров материалов
Количество текстур: 23
Поддерживаемые платформы разработки: ПК и консоли.
Поддерживаемые целевые платформы сборки: ПК и консоли.
Важные/дополнительные примечания: Если вы хотите связаться со мной: (darth_velarion@yahoo.com)