Pull to refresh

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

Reading time4 min
Views22K
В следующий четверг состоится запуск проекта, над которым мы работали последние несколько месяцев. 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 ноября. Не пропустите, для первых участников предусмотрен бонус :)
Tags:
Hubs:
Total votes 72: ↑70 and ↓2+68
Comments80

Articles