company_banner

Сыграем в DOOM на серверах

  • Tutorial


У меня возникла безумная идея – это сыграть в классический DOOM по сети установленный на VPS под управлением Windows. В целом, это задумывалось как тестирование новых фич, которые мы внедряем: клонирование серверов и разворачивание локальной сети. Да, и на самом деле, это круто сыграть в DOOM прямо на серверах, особенно после просмотра баек от Джона Ромеро было невозможно не поиграть в легенду компьютерных игр.
Давайте посмотрим, что же из этого получилось, с какими проблемами столкнулся и как их решили.

В чём фишка?


У нас появились две интересные возможности: разворачивание локальной сети и создание снапшотов. Если с локальной сетью всё более-менее понятно – это прекрасная альтернатива тому же VPN и разворачивается она сильно проще, то вот что такое снапшот – не все понимают. Да, и буду честен, я тоже не сразу понял. Снапшот позволяет сделать текущий образ сервера и потом на его базе создать другой сервер, даже с другими параметрами, таких как размер диска, памяти, количество ядер. Это очень удобно, особенно если вам необходимо ваш VPS-север перенести из одного дата-центра в другой. Другая возможность, которую мы будем использовать, это однократная настройка рабочего сервера, и потом клонирование его для ваших клиентов.
Понимаю, что всё это выглядит слишком рекламно, но изначально это был боевой тест наших внедрённых фишек. И благодаря ему мы смогли оценить все возникшие проблемы и оперативно их исправить. Поэтому и родилась данная статья.

Разворачиваем мастерсервер


Для этого проекта выбрал сервер со следующими параметрами.



Думаю, для наших задач такой конфигурации более чем достаточно. Изначально хотел использовать Windows Server 2003, но Doom наотрез отказался на ней работать, поэтому всё же решил остановиться на 2016.
Спустя несколько минут, после разворачивания сервера и загрузки операционной системы, мы увидим готовую панель, а главное IP адрес нашего сервера.



В качестве сетевого DOOM я использовал какую-то хитрую сборку Zandronum, DoomSeeker, BrutalDoom, которую мне дали друзья. Но, по сути, вам нужен будет один Zandronum и DoomSeeker для создания сервера, плюс оригинальный .wad-файл, если хотите поиграть на «тех самых картах». Ну или найти подобную сборку на просторах сети. Сразу признаюсь, я не большой знаток модов DOOM, попробовал несколько сборок, поэтому показываю работающий вариант. Возможно, если вы захотите это повторить, у вас должно получиться и с другими сборками. Тот же BrutalDoom намного более весёлый и резвый для игры по сети.
Итак, копируем эту сборку на наш сервер (я рекомендую использовать папку “c:\game\doom”), запускаем zandronum.exe.



И выбираем папку, содержащую WAD-файлы, на которых будем играть. Именно они и определят те карты, на которых вы будете играть. У меня они лежат в папке files вместе с игрой.





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

Создание копии серверов и объединение в единую локальную сеть


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



И выбрать «Сделать снапшот». Если сервер не выключен, то его предложат выключить в интерактивном режиме, так как снимок сервера для переноса осуществляется в выключенном состоянии (фактически копия диска).



В результате будет создан снапшот нашего сервера.



Основной сервер после этого можно запустить, а на базе данного снапшота мы можем создать новые сервера. Для этого идём во вкладку «Заказать»



В разделе, где выбирается «Шаблон сервера», в самом низу будет наш Snapshot, выбираем его.



Обратите внимание, что можно выбрать сервер с другими параметрами. Это очень удобно, если вам необходимо увеличить объём жёсткого диска, ОЗУ и прочего. Разве, что нет возможности сохранить IP-адрес.
В результате, после описанных операций, через некоторое время мы получаем копию нашего сервера. Копия от оригинала отличается только паролём входа, и другими IP и MAC-адресами.



После создания второго сервера, давайте объединим их единую локальную сеть Для это переходим во вкладку «Сеть» любого сервера.



Там выбираем «Настроить локальные сети».



Далее можно дать название нашей локальной сети, например Doom, выбираем диапазоны подсети; после чего можно добавляем сервера, которые мы хотим подключить в эту локальную сеть. После нажимаем «Создать локальную сеть».



И окончательно сеть разворачивается после нажатия на кнопку «Развернуть локальную сеть».



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


Установка проклятых обновлений в момент создания сети.

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


Сервера в единой сети.

После воспоминаний о проблемах и тонкостях разворачивании OpenVPN, этот вариант создания локальной сети просто чудо-чудное! Лично для меня он оказался наиболее удобным.
Как вы понимаете, таким же точно способом мы создаём ещё несколько серверов, на которых уже смогут играть мои коллеги.

Создаём игровой сервер и играем.


Всё, теперь нам осталось только запустить сервер DOOM и играть. На мастер-сервере запускаем doomseeker.exe.



Выбираем «Create Server».



После чего выбираем для какого движка создаём сервер, какой wad-файл использовать и карту.



И жмём «Start server».



После этого на главной машине и на клиентских запускаем zandronum.exe и идём в Multiplayer. Browse servers->internal browse, там выбрать local. Это меню не всегда срабатывает, поэтому в него надо заходить несколько раз.



Не забываем выбрать наш сервер. Жмём «join game» и мы в игре!





Итог



Коллеги играют в DOOM на рабочем месте.

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



RUVDS.com
VDS/VPS-хостинг. Скидка 10% по коду HABR

Comments 10

    +2

    И правда, зачем заморачиваться, создавать новый SID, запускать sysprep… Для поиграть и так пойдет...

      +4
      Всё качественно тестируется, в данном случае игра в DOOM с использованием этих фич — это как разбить бутылку о борт корабля при спуске его на воду.
        +5

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

          +1
          Всё абсолютно верно вы говорите. Так и нужно делать.

          Можно составить свой unattend файл со SkipUserOOBE и SkipMachineOOBE.
          1. Делаем sysprep со своим unattend.xml
          2. Делаем снапшот
          3. Развёртываем много виртуалок с разным SID.
      +3
      Я правильно понимаю, что картинка рендерилась на (клонированных) серверах, и передавалась каждому игроку по RDP? Игра на удаленном компьютере (да ещё в дата-центре) не сильно хуже была, чем на локальном компьютере, по мнению игроков? В смысле задержки между нажатием клавиши и реакцией на экране.
        +2
        Вообще никаких изменений не заметили, всё работало как часы. То есть мы так увлечённо играли, что даже небольшие тормоза бы заметили и все бы ругались.
        0
        оригинальный дум вродебы умел мультиплеейр только по протоколу IPX? ваша сеть поддерживает IPX? или вы просто использовали современные сборки для игры через TCP/IP?
          0
          или вы просто использовали современные сборки для игры через TCP/IP?

          В качестве сетевого DOOM я использовал какую-то хитрую сборку Zandronum, DoomSeeker, BrutalDoom, которую мне дали друзья.
          0

          Я так и не понял?? Цель была по играть?
          Или построение сервиса?? Клонирование виндоус по требованию??..
          Если хотелось играть… есть готовые сервисы даже бесплатно. Например /geforce-now/ от nvidia.

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

          Only users with full accounts can post comments. Log in, please.