• Мультиплеер в быстрых играх (Часть IV: Хэдшот! Путешествуем во времени)

    • Translation

    1. Части I, II (синглплеер с авторитарным сервером)
    2. Часть III (Появление врага)
    3. Часть IV (Хэдшот!)

    Как повесить идеальный хэдшот если у тебя пинг 2 секунды? Вы узнаете в этой статье.

    Текущий алгоритм работы мультиплеера


    • Сервер получает команды с клиентов и времена их отправления
    • Сервер обновляет состояние мира
    • Сервер с некоторой частотой отправляет свое состояние всем клиентам
    • Клиент отправляет команды и локально воспроизводит их результат
    • Клиент получает обновленные состояния мира и:
      • Применяет состояние от сервера
      • Заново применяет все свои команды, которые сервер не успел применить.
      • Интерполирует предыдущие состояния других игроков
    • С точки зрения игрока, есть два серьезных последствия:
      • Игрок видит себя в настоящем
      • Игрок видит других в прошлом.

    Обычно это отлично работает, но это становится большой проблемой для событий, которым нужна высокая пространственно-временная точность. Например если хочется разнести врагу башку!
    Читать дальше →
  • Особенности консольной инди-разработки в российской провинции

      Мне очень приятно, что мою последнюю статью про продвижение игры на Steam Greenlight, которую я писал на хабр чуть больше года назад, прочитали почти 50k раз и как мне кажется в итоге она была написана не зря. Тогда наша маленькая команда только-только получила зелёный свет. С того момента произошло еще много событий, но одним из самых интересных и значимых было то, что мы также прошли в программу ID@Xbox для независимых разработчиков, с возможностью выпуска своей игры на консоли Xbox One. И вот неделю назад игра все-таки увидела свет.

      image

      В этой статье я хочу поделиться интересной и возможно кому-то полезной информацией о том, с чем мы столкнулись пока готовили к релизу нашу игру на консоли Xbox One и Steam. А для этого я попробую раскрыть следующие темы:
      • Сколько может стоить разработка консольного проекта
      • Где мы взяли такие деньги
      • Как все подсчитать и иметь представление на что рассчитывать
      • Почему мы решили работать без издателя и внешних инвестиций
      • Как мы попали в Steam и на Xbox One
      • Почему нужно платить и получать возрастные рейтинги
      • В чем разница между Steam и Xbox — минусы и плюсы консольной разработки для инди
      Читать дальше →
    • Adventure Jam 2016

        image

        Хочется рассказать про опыт участия в Adventure Jam 2016. Некоторое время назад я решил попробовать принять участие в каком-нибудь геймджеме и вывесил пост про поиск команды в одном из сообществ вконтакте. Прошло больше месяца, никто не писал, и я уже забыл об этой затее, но внезапно на связь вышел художник Сергей. Довольно быстро мы нашли крупный конкурс длиной в две недели, темой которого были игры-адвенчуры. Решено было делать классический point'n'click-квест. Команду пополнили аниматор Борис и композитор Василий, за несколько скайп-сессий мы обсудили сеттинг и сюжет, после чего принялись за работу. Под катом вы найдете небольшой постмортем в четырех частях от лица каждого участника команды, с описанием техпроцесса, проблемами и решениями, впечатлениями и выводами, которые каждый вынес из участия.
        Читать дальше →
      • Основы геймдизайна: 20 настольных игр. Часть вторая: нарды, монополия, скрэббл

        • Translation
        В статье Джона Харриса из серии «Основы геймдизайна» представлен подробный обзор самых популярных настольных игр, включая традиционные вроде шахмат и го, ролевые вроде «Зова Ктулху», европейские вроде «Колонизаторов» и многие другие, у которых есть чему поучиться.


        Читать дальше →
        • +10
        • 21.5k
        • 7
      • Событийная модель на основе async и await

        В далеком 2012, когда цена на нефть еще была трехзначной, а трава зеленее, майкрософтом был выпущен .NET 4.5, а с ним и конструкция async/await. Про неё написано уже довольно много статей (Async в C#), а большинство разработчиков C# хорошо её изучили. Но все ли варианты использования были рассмотрены, можно ли выжать из await немного больше?

        Самым очевидным вариантом использованием этой конструкции является ожидание завершения некой асинхронной операции. Первое, что приходит на ум — это ожидание ввода-вывода. Например, мы послали запрос клиенту и ожидаем ответа, тогда используя await мы сможем продолжить выполнение кода после получения ответа, а сам код при этом будет выглядеть синхронным. Но что если во время ожидания возникнет необходимость прервать выполнение этой операции? Тогда нам придется использовать CancellationToken, причем если таких операций несколько, то токены необходимо будет линковать или использовать один общий токен. При этом причина отмены будет скрыта от кода, использующего этот CancellationToken. Кроме отмены, код должен поддерживать обработку потери соединения, таймаута, возвращаемых ошибок и т.д.

        В классическом варианте это выльется в использование CancellationToken для обработки отмены, try catch для обработки разрыва соединения и код анализа возвращенных данных, для оценки результата запроса. Но можно ли уместить всё это в единой парадигме? В этот статье я предлагаю рассмотреть альтернативный подход, основанный на событийной модели с использованием синтаксического сахара async/await.
        Читать дальше →
      • Мультиплеер в быстрых играх (части I, II)



        1. Части I, II (синглплеер с авторитарным сервером)
        2. Часть III (Появление врага)
        3. Часть IV (Хэдшот!)


        Предлагаю вашему вниманию перевод статьи Fast-Paced Multiplayer (Part I): Introduction.

        Разработка игры — само по себе непростое занятие. Но мультиплеерные игры создают совершенно новые проблемы, требующие разрешения. Забавно, что у наших проблем всего две причины: человеческая натура и законы физики. Законы физики привнесут проблемы из области теории относительности, а человеческая натура не даст нам доверять сообщениям с клиента.
        Читать дальше →
      • Баня, детский ноут и утка. Как реально делаются игры. Часть 1. Художник

        Здравствуйте господа. Сегодня мы поведаем вам секрет, как стать настоящим инди-разработчиком! Не то, что сейчас там называют инди, с бюджетом в несколько миллионов долларов, а самым настоящим бедным, голодным, немытым инди-разработчиком, жрущим доширак и делающим игры по ночам, когда все нормальные разработчики игр спят в своих тёплых кроватках от ИКЕА.


        Читать дальше →
      • Взрывная волна в Unity3D (displacement shader)

          Мой телеграм канал: https://t.me/winc0de.
          Всем привет, пишу небольшую 2D игру и параллельно хотел бы рассказывать о реализации некоторых вещей в Unity3D.
          Программирование графики само по себе очень интересное занятие с безграничным количеством вариаций результата. В этой статье опишу реализацию искажения пространства от взрывной волны.

          Читать дальше →
          • +24
          • 25.9k
          • 9
        • Рендеринг UTF-8 текста с помощью SDF шрифта

          • Tutorial

          Продолжаем серию статей о мобильном геймдеве. В этой статье я расскажу как рендерить UTF-8 текст с помощью SDF Bitmap шрифтов, как эти шрифты создавать и как использовать эту технику для качественного рендеринга иконок.


          Читать дальше →
        • Списки действий: простой, гибкий, расширяемый ИИ

          • Translation
          Большинство людей привыкли решать задачи знакомыми и понятными им способами. Мы предпочитаем не сходить с проторенной дорожки и не изобретать велосипед, даже если это сулит очевидную выгоду. Избавиться от такого образа мышления очень сложно, поэтому мы продолжаем использовать устаревшие технологии и решения, тем самым вызывая недоумение у наших более продвинутых ровесников. В этой и следующих статьях я хочу познакомить читателей с широким спектром решений, способных повысить качество разработки. Сегодня мы поговорим о списках действий.


          Читать дальше →
          • +14
          • 18.5k
          • 5
        • Повесть о создании классической RTS в домашних условиях с нуля + разбор основных этапов разработки (AI, сеть и т.д.)

          image

          В статье речь пойдет об одном очень не новом проекте, который создавался совсем в другое время и совсем в других условиях. Это моя старенькая RTS под названием Земля онимодов (Onimod land). Чтобы было сразу понятно, что она собой представляет, можно посмотреть коротенькое видео:
          Читать дальше →
        • Как добиться успеха на Kickstarter, если ты инди (часть 1)

            Подробный анализ успешной кампании Exoplanet: First Contact на Kickstarter


            Предисловие




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

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

            Мы надеемся, что подробный анализ кампании Exoplanet: First Contact позволит талантливым разработчикам вынести необходимые уроки и избежать множества ошибок на пути к успеху.
            Читать дальше →
          • Как легко и непринужденно написать игру за 2 года

            В данной публикации я расскажу о моём опыте разработки 2D игры под Android, которая затянулась на 2 года и набрала 15 загрузок в Google Play. Также поделюсь некоторыми мыслями по поводу разработки.



            Предыстория


            В один прекрасный день, когда на моей машине весело работал Debian Linux, а я бороздил просторы каталога конфигурационных файлов, попутно уничтожая свои нервные клетки, и ко мне пришла идея отдохнуть. Как и положено плохим парням с плохим зрением, я решил отдохнуть играя в какую-нибудь игру. Едва увидев скриншот игры Funny Boat, я понял, что мне срочно необходимо сделать её клон на Android.
            Читать дальше →
            • +27
            • 23.3k
            • 8
          • 4 способа сделать игровое обучение интересным

            • Translation
            Согласитесь, мы все ненавидим туториалы. Установив игру, мы хотим сразу перейти к действию, а не ковыряться в меню, разбираясь в правилах и управлении. Но хочешь не хочешь, а для каждой новой игры нужно учить новые правила. По-другому никак.
            По большому счету можно выделить 3 вида игровых туториалов: неинтерактивные, интерактивные и пассивные. Давайте по очереди рассмотрим каждый из них.


            Читать дальше →
          • CMake — создание динамических библиотек

            Введение


            CMake (от англ. cross platform make) — это кроссплатформенная система автоматизации сборки программного обеспечения из исходного кода.

            CMake не занимается непосредственно сборкой, a лишь генерирует файлы управления сборкой из файлов CMakeLists.txt.

            Динамические библиотеки. Теория


            Создание динамических библиотек со статической линковкой в ОС Windows отличается от ОС GNU/Linux.

            На ОС Windows для этого требуется связка .dll (dynamic link library) + .lib (library) файлов.
            На ОС GNU/Linux для этого нужен всего лишь один .so (shared object) файл.
            Читать дальше →
          • Pathfinding: До одури простая реализация алгоритма воронки (Funnel Algorithm)

            • Translation
            • Tutorial


            Алгоритм воронки — это простой алгоритм поиска наипростейшего пути, проходящего через «порталы». Наиболее подробное описание можно найти по ссылке Efficient Triangulation-Based Pathfinding (2)
            Здесь же этот алгоритм будет реализован до одури просто. Вместо использования очередей и прочих очешуительных вещей, наша простейшая реализация перезапускает цикл каждый раз, когда обнаруживает очередной угол. Это значит, что некоторые порталы будут опрашиваться таки чаще, чем должны были бы, тем не менее, делая реализацию всяко проще.
            Читать дальше →
          • Покопаемся в «режиссёрской версии» Wasteland 2: механики и интерфейсы



              На мой взгляд, самый «фаллаутный» фаллаут после второго — это Wasteland 2 в полной версии, которая Director’s Cut. В эпоху зеркальных римейков игр и фильмов эта штука очень радует и старым духом, и новыми решениями. Поэтому я предлагаю покопаться немного у неё под капотом в плане механик GameDev.

              Начнём с самого главного – эта игра следует старой доброй формуле «Мир, игра, игроки». Современные высокобюджетные проекты нацелены на то, чтобы игрок решал, что и как происходит в мире, и не пропускал какие-то важные действия. Максимум контента за один проход, чтобы ничего не осталось за кадром. Это путь хорошего фильма. Путь хорошей игры – реалистичный мир, живущий в экосистеме, которую можно покачнуть силами одного человека только с очень большим трудом.

              Так вот, миру Wasteland 2 плевать на вас. Там нет счастливых прибытий в последний момент, чтобы всех спасти, нет ожидающих чего-то NPC. Реальное время. Например, когда вы входите в Хайпул, там горит дом. Не успели потушить – ну, он тупо сгорит. Второй важный аспект – крутой постоянно движущийся сюжет, скорее, характерный своими поворотами для серии Биошоков. Захватывающий с первых минут, без долгой раскачки. И этот сюжет – реально высокого разрешения. Постоянно предлагающий суровый выбор между моралью, порядком и законом.

              И это три разных выбора.
              Читать дальше →
            • Математика на пальцах: методы наименьших квадратов

              • Tutorial

              Введение




              Я математик-программист. Самый большой скачок в своей карьере я совершил, когда научился говорить:«Я ничего не понимаю!» Сейчас мне не стыдно сказать светилу науки, что мне читает лекцию, что я не понимаю, о чём оно, светило, мне говорит. И это очень сложно. Да, признаться в своём неведении сложно и стыдно. Кому понравится признаваться в том, что он не знает азов чего-то-там. В силу своей профессии я должен присутствовать на большом количестве презентаций и лекций, где, признаюсь, в подавляющем большинстве случаев мне хочется спать, потому что я ничего не понимаю. А не понимаю я потому, что огромная проблема текущей ситуации в науке кроется в математике. Она предполагает, что все слушатели знакомы с абсолютно всеми областями математики (что абсурдно). Признаться в том, что вы не знаете, что такое производная (о том, что это — чуть позже) — стыдно.

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