В следующий четверг состоится запуск проекта, над которым мы работали последние несколько месяцев. 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 ноября. Не пропустите, для первых участников предусмотрен бонус :)
Автор: artch