20 ноября — запуск первой стратегической MMO-игры для… программистов

    В следующий четверг состоится запуск проекта, над которым мы работали последние несколько месяцев. Screeps — первая известная мне стратегическая игра в MMO-песочнице, созданная для программистов. Вместо традиционного Point'n'click, геймплей заключается в написании и постоянном улучшении программы для AI ваших юнитов на JavaScript, которая управляет ими непрерывно и автономно — даже когда вы не онлайн. Это радикально новая идея, и если вы программист, вам определенно стоит на это взглянуть.



    Если вы программист, то не думали ли вы в предыдущий раз, когда играли в свою любимую онлайн-игру, чтобы было бы здорово как-нибудь ее автоматизировать? Зачем тратить время своей жизни на выполнение действий, которые легко выполняются ботом? Почему вы должны каждый день заходить в игру, чтобы получить награду, если с этим легко справился бы скрипт? Больше никакой бессмысленной траты времени на действия, которые под силу и ребенку, мы же способны на большее. В Screeps скрипты не просто разрешены, Screeps это игра о скриптах!

    Под катом технические и игровые подробности.

    Как это выглядит


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

    var scout = require('scout');
    
    // Производство нового юнита
    var name = Game.spawns.Spawn1.createCreep(['attack','move']);
    Memory.creeps[name] = { role: 'scout' };
    
    // Раздача команд каждому юниту
    for(var i in Game.creeps) {
    
        var creep = Game.creeps[i];
    
        if(creep.memory.role == 'scout') {
            // AI разведчика вынесен в отдельный модуль
            scout(creep);
        }
        else {
            // Добыча и транспортировка ресурса
            if(creep.energy < creep.energyCapacity) {
                var target = creep.pos.findNearest(Game.SOURCES_ACTIVE);
                creep.moveTo(target);
                creep.harvest(target);
            }
            else {
                creep.moveTo(Game.spawns.Spawn1);
                creep.transferEnergy(Game.spawns.Spawn1);
            }
        }
    }
    


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

    Screeps можно назвать игрой-платформой. Это как писать приложения на базе какого-то фреймворка, только в качестве фреймворка — игровой мир, а в качестве приложения — ваш геймплей.

    Игровая концепция


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

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

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

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

    Строительство юнитов, называемых creeps, происходит так же, как и в других стратегических играх, за одним исключением — вы сами конструируете «тело» нового крипа, выбирая из 7 доступных вариантов частей тела, и составляя из них последовательность длиной до 30 элементов. Это даёт тысячи возможных видов крипов и их ролей: простые работяги и огромные строительные машины, выкапывающие источник целиком за считанные циклы; маленькие курьеры и вместительные тяжёлые грузовики; быстрые дешёвые разведчики и хорошо оснащенные бойцы с возможностью регенерации. Или даже крипы, более похожие на добывающие, охранные или осадные башни, ведь они способны перемещаться только на пару клеток в минуту, при этом обладая невероятными характеристиками. Все ограничено лишь вашей фантазией и тактикой.

    Однако, срок жизни любого крипа — 30 минут, через которые он умрет “от старости”. Поэтому вам понадобится не просто управлять существующими крипами, но наладить производство и автоматическое управление сменяющимися поколениями крипов.

    Кроме создания крипов, вам также придется заботиться об инфраструктуре ваших комнат. Построенные дороги позволят быстрее перемещаться медленным крипам и настроить эффективную логистику, ramparts заблокируют перемещения противника и дадут дополнительную защиту, а spawn extensions позволят строить более мощных крипов.

    Как это работает


    Технологически игровой движок исполнен в двух различных (но работающих одинаково) вариантах — в клиентском и серверном. Клиентский вариант выполняет игровую симуляцию в вашем браузере. В этом режиме будет работать Simulation Room, в котором можно тестировать свои игровые скрипты без каких-либо ограничений, также там будет туториал и режим Survival Mode, где можно потренироваться на реальной задаче выживания под наплывом волн вражеских крипов.

    В реальном онлайновом режиме игровые скрипты всех игроков выполняются уже непосредственно на сервере. Движок написан на Node.js, и скрипт игрока выполняется в нем же, то есть доступны все языковые возможности реального JS. Однако программа игрока запускается в изолированном процессе и окружении с отключенным стандартным require (точнее, замененным на игровой вариант), поэтому вмешаться в работу сервера не получится. Кроме того, выполнение процесса ограничено по времени и потреблению памяти, если оно превышает заданный лимит, то скрипт игрока просто не закончит выполнение, предупредив его об этом.

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

    Фронтэнд работает на AngularJS, а вся графика — это простые анимированные SVG-формы.

    Кстати, после успешного запуска игровой движок планируется выпустить в open-source, чтобы игроки могли лучше понимать механику игры, занимаясь написанием своих скриптов. Игровую симуляцию на этом движке можно будет запустить в консольном standalone-режиме на локальной машине.

    Сайт проекта: www.screeps.com

    Запуск назначен на 20 ноября. Не пропустите, для первых участников предусмотрен бонус :)
    Метки:
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 80
    • 0
      Хм, вас опередили
      • +3
        Вовсе нет. Это не MMO sandbox.
        • 0
          Еще есть
          • +3
            Опять же — это не MMO в реальном времени, в которой юниты живут всегда, а сессионная игра, матчи в которой запускаются и завершаются. Разница огромна.
            • 0
              Согласен. В любом случае спасибо за наводку — попробую свой зоопарк завести :)
        • +1
          У Микрософт давно (очень) похожее было — terrarium2.codeplex.com/
          • 0
            Как и сказали выше, задумка не нова. Но в виде онлайн-стратегии я ее еще не видел. Заинтересовали, подписался на уведомление о запуске.
            • +2
              Да, смысл слова «первая» не в том, что это первая «игра для программистов», а в том, что первая «стратегическая MMO-песочница для программистов».
              • +1
                Вот это и понравилось.
                Т.к. играл во всяких роботов и прочее. надоедает после десятого руанда.
                А после статьи вспомнился Travian, т.к. там тоже мир «жил в оффлайне» и это было нереально круто.
                • 0
                  Все верно, Травиан — наиболее близкий пример. Надеюсь, мы вас не разочаруем :)
                  • 0
                    Ну, идея у вас уже проверенная временем. Если сделаете хорошую реализацию, я думаю успех обеспечен. В общем, ждемс, удачи :)
                    Только, пожалуйста, не делайте строительство длительностью в несколько реальных дней, как было в том же травиане на высоких уровнях )))
            • +7
              1)
              про монетизацию ничего не рассказали. как-то же вы собираетесь поддерживать сервер и отбивать время и деньги.
              человек может убить кучу времени на создание скриптов, а вы с нг скажете «ребзя, отныне каждый чих любым вашим крипсом платно!»
              или подписка?
              2)
              и что если сначала ктото выложит стратегию, которая сразу захватит доступные комнаты, а новых будет давить просто своей разросшейся армией?
              • 0
                1) Подписка на объем серверной мощности (CPU и память). Все честно, подробности — на старте.
                2) Тут уже задача сделать такой гейм-дизайн, чтобы подобное было затруднено. Да и универсальной стратегии быть не может, потому что комнаты будут различаться по ландшафту.
                • –1
                  2) можно брать налог с добычи ресурсов в зависимости от размера армии, как это было в war craft 3
                  • +2
                    Мне кажется если будет подписка на серверные мощности то всё в итоге в них и упрётся. Особо и придумывать ничего не надо.
                    • +2
                      Согласен.

                      Битва с соседом без «подписки»: 1 такт игрока1, 5 тактов соперника: пока более умный ИИ игрока1 идет к ресурсу, соперник уже подошел к нему.

                      В итоге все игроки с «подпиской» будут задавливать игроков без подписки очень легко с глупым АИ. И это добьет проект.

                      В качестве монетизации можно было бы проводить турниры раз в месяц между игроками. Есть взнос за участие, победитель получает 30%. 70% сервер оставляет себе. Между игроками есть 3 боя на 3х рандомных картах (3х3 ячейки).

                      Также монетизация возможна в качестве образовательной платформы для использования в ВУЗах на факультативах по JavaScript.
                      В конце семестра — зачетный бой против АИ преподавателя…

                      Возможна и монетизация со спонсорами.

                      К примеру, codeforces.ru для «игроков» бесплатен, а монетизацию Мирзаянов продумал по аналогии с указанной мною выше.
                      • +1
                        Битва с соседом без «подписки»: 1 такт игрока1, 5 тактов соперника: пока более умный ИИ игрока1 идет к ресурсу, соперник уже подошел к нему

                        Такты для всех игроков идут одинаково. Просто за такт один игрок с лучшим тарифом может выполнить более ресурсоемкий скрипт, чем другой. Но при этом более грамотно написанный скрипт может быть менее ресурсоемким сам по себе, поэтому преимущество не очевидно.
                        • 0
                          Что значит выполнить скрипт? Весь?

                          Есть такты процессора (игрового мира), каждый такт — 1 команда скрипта. Пошаговое поочередное исполнение всех сценариев.
                          Так реализовано в colobot, robowar, robocode и других проектах (перечень таких проектов).

                          Или же игроку предоставляется непродуманное API, где в скрипте каждый раз нужно будет инициализировать переменные, обсчитывать весь мир, определять стратегию, чтобы сделать ОДИН ход?

                          Мой скрипт не будет ресурсоемким, но он требует сохранения своего контекста.
                          То есть каждый ход будет просто «move, attack » + чуть-чуть логики, но суммарно это будет подветвь большого скрипта, скажем дерева принятия решений.

                          Так что будет «такт» в вашем проекте?
                          • Одна команда процессора
                          • Одна строчка кода
                          • Одна функция в скрипте (OnTurn)
                          • «Весь скрипт», как сказано вами выше
                          • 0
                            Речь про такт игровой механики. Одна итерация выполнения всех скриптов игроков, после которой выполняются все полученные команды. Вы можете хранить любые временные данные в вашем собственном JSON-хранилище, которое передается из такта в такт, но какие-то вычисления все равно придется делать в реальном времени в каждом такте. Например, надо пересчитывать путь, так как на предыдущей просчитанной траектории могут возникнуть препятствия (ваши или чужие крипы).
              • 0
                Хотелось бы увидеть пост с описанием механики, чтобы можно было подумать над стратегией до старта
                • 0
                  API документацию было бы интересно. Вряд ли она до 20 уже изменится. Хотя старт проекта тогда пожетсче будет, наверное.
                • –13
                  «Easy to learn, hard to master»

                  Нагло украли у Blizzard
                • 0
                  На первый взгляд похоже на Code Combat.
                  • +1
                    Видео не доступно, увы.
                    • +1
                      Попробуйте сейчас — заработало?
                    • +1
                      Отличная задумка и, судя по видео, приличное исполнение. Не понимаю почему читатели так скептически подходят к Скрипсам.

                      Фигачьте дальше, пожалуйста!
                      • 0
                        Очень интересная задумка!
                        А никто не знает подобную игру, только для пацифистов. Например, градостроительная стратегия, или аналог Transport Tycoon?
                        • 0
                          Colobot (и продолжение Ceebot)
                          • 0
                            В Transport Tycoon нужно было уничтожать конкурентов похлеще, чем в каком-нибудь Старкрафте :)

                            А если серьезно, то здесь сеттинг практически как в шахматах. Это скорее похоже на соревнование для программистов, какой-либо реализм отсутствует.
                          • 0
                            Разные скрипты могут иметь совершенно разные параметры быстродействия и сложности (и следовательно, по разному будут нагружать ваши сервера). Я подумал, что это тоже может быть объектом геймплея (и монетизации). Построили Spawn — у вас есть возможность писать скрипты со сложностью N, построили второй — можно писать скрипты сложности 2*N (ну, или 1.9*N, чтобы была нелинейная зависимость). Построил 100 — можно делать очень сложные скрипты.
                            Будет непросто определять сложность скрипта, обычными SLOC не обойтись, но мне кажется, это может быть интересным моментом, добавляющим динамику и сложность.
                            • 0
                              Сложность скрипта мы и не пытаемся определять. Ограничение идет по физическому времени исполнения скрипта в миллисекундах.
                              • 0
                                да, неплохое решение. Но я больше говорю о том, чтобы это ограничение было геймплейным, а не техническим. Чтобы игровыми действиями можно было бы заработать больше машинного времени. Ну, и продавать не просто «тарифный план», а «убер-научный центр, +10 к машинному времени» (утрирую).
                                • +1
                                  А как вы определяете время выполнения скрипта в мс? Если сервер загружен — одно время, если нет — другое?
                              • –1
                                Очень интересно, хотя я и не программист.
                                • 0
                                  Получает тут даже генетические алгоритмы можно попробовать применять. А какую либо информацию между тактами в «банке данных» сохранять можно?
                                  • 0
                                    Да, игроку доступен один большой JSON-объект для сохранения любых данных.
                                  • 0
                                    А крипы смогут как-то «общаться» с чужими крипами? Это позволило бы создавать достаточно сложные альянсы игроков…
                                    • 0
                                      На запуске нет, впоследствии — обязательно.
                                    • +4
                                      Через некоторое время умельцы напишут обёртку, чтобы можно было мышкой щелкать :)
                                      • 0
                                        Скорее, появятся фреймворки/готовые боты на продажу, которые нужно будет только настроить)
                                      • 0
                                        Нагрузочное тестирование проводили?
                                        • +1
                                          Не рано ли запуск? Может, стоило на kickstarter-е денег подсобрать?
                                          Описание есть, демо-ролик есть, api наброски — есть.
                                          • 0
                                            А мне напомнило mysqlgame, правда они почему-то не сделали API для управления, хотя казалось бы это логично для такой игры)
                                            • +1
                                              Уже завтра. В котором часу планируете запускать проект?
                                              • +3
                                                Ждем письма. Все включая документацию и песочницу будет открыто сегодня?
                                                • +3
                                                  Точно 20 ноября 2014 года?
                                                  Мы заждались уже.
                                                  • +4
                                                    Видимо в 23:59:59 откроют проект. ):
                                                    • +1
                                                      А они не уточнили какого года 20 ноября
                                                      • +3
                                                        Я пытаюсь быть оптимистом.
                                                      • +1
                                                        Тогда интересно, по какому часовому поясу :)
                                                      • 0
                                                        Да. Только открыли не игру, а только песочницу и компанию по сбору денег.
                                                      • +2
                                                        И правда, ну где же? Мы уж заждались!
                                                        • 0
                                                          artch, куда писать о багах?
                                                          • +1
                                                            И считать ли отсутствие элементов ММО и sandbox, заявленных, как основное преимущество, багом? =) Лично я взгрустнул…
                                                            • 0
                                                              В Game Concepts:
                                                              A standard spawn can spawn creeps up to 5 parts in фlength.
                                                            • –1
                                                              Эх, был бы хотя бы CoffeeScript/TypeScript доступен…
                                                              • +1
                                                                Какой облом… Даже не стал смотреть песочницу, ибо сыграть с компьютером я могу и в других играх…
                                                                • 0
                                                                  А как создать ConstructionSite?
                                                                  • 0
                                                                    Слева от поля, третья иконка сверху с кубиком. Вроде пока все точки, например, дороги надо будет «протыкать». API для программного создания ConstructionSite вроде пока нет.
                                                                    • 0
                                                                      Спасибо, а то ищу уже с утра в документации) Грустно без API конечно.
                                                                  • +1
                                                                    Пошёл в таториал, создал не одного строителя а 4х, таториал создал мне противника и игра сказала «CPU limit reached».
                                                                    На core i7 в хроме.
                                                                    Грустно это.
                                                                    • 0
                                                                      С таким кодом им никаких серверов не хватит все это поддерживать.
                                                                      • 0
                                                                        Странно в Surrival у меня 8 рабочих/строителей, 12 воинов, 6 лекарей и в последний момент на карте около 40 вражеских юнитов. Тоже core i7 хром, все норм.
                                                                        • 0
                                                                          Покажи часть кода, где ты создаешь автоматически новые юниты
                                                                        • 0
                                                                          А при чем здесь ваш core i7. Это сообщение о том, что вы использовали выделенные вам серверные мощности на выполнение скрипта.
                                                                          • 0
                                                                            При чем тут серверные мощности, если разработчики говорят, что песочница работает в браузере? Зачем им тогда деньги на сервера просить?
                                                                            • 0
                                                                              Видимо, имеется в виду, что контроль за лимитом мощности на один tick производится везде (и на клиенте и на сервере). Правда, мне не ясно, как они его высчитывают — тупо, по времени выполнения что ли?
                                                                              А по поводу ошибки — она вылезает иногда, но как-то плавающе и чаще, когда ничего не делаешь, больше похоже на баг.
                                                                              • 0
                                                                                >Правда, мне не ясно, как они его высчитывают — тупо, по времени выполнения что ли?
                                                                                Автор уже пояснял этот вопрос: habrahabr.ru/post/242963/#comment_8122321
                                                                                • 0
                                                                                  Да, но он так и не ответил про разные процессоры и их загруженность. С учетом того, что они собрались брать за это деньги — как-то халтурно. В идеале, нужно разобрать JS на токены, посчитать для каждого стоимость, грубо говоря статический анализ. И так, хоп, нажимаешь кнопку — узнать стоимость скрипта — 56000 тактов, для вашего тарифного плана осталось 4000, купить тут.
                                                                                  Но ждем открытия, может что придумают.
                                                                                  • 0
                                                                                    Посчитать стоимость выполнения скрипта в вакууме теоретически невозможно. Одна и та же строчка скрипта может различаться на порядки в зависимости от контекста. А для того, чтобы определить контекст, скрипт требуется выполнять. Что мы и делаем.

                                                                                    Влияния от разных процессоров не будет, потому что это будет выделенная машина с однородной приоритетной нагрузкой на каждом ядре — выполнением скриптов игроков.
                                                                                    • 0
                                                                                      Теоретически невозможно?) Я что предлагала считать строчки?) Влияния не будет? Очень интересно будет на это посмотреть, жду открытия с большим нетерпением.
                                                                        • +1
                                                                          Нехватает отладки.
                                                                          • +1
                                                                            А console.log как же?
                                                                            • –3
                                                                              console.log('test')
                                                                              [21:50:27]
                                                                              test
                                                                              undefined
                                                                          • 0
                                                                            А чего нет версии на русском языке? Это бы серьёзно снизило порог вхождения.
                                                                            • +1
                                                                              Вы про 1с программистов на JavaScript?
                                                                              • 0
                                                                                Не код на русском языке, а обучение и документация.
                                                                                • +1
                                                                                  Честно говоря, трудно представить современного программиста без знания английского на уровне чтения технической документации.
                                                                            • 0
                                                                              Суть игры сводится к написанию ботов? Хм, битва ботов, такой ММО я еще не видел.

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