Примечание: таким цветом выделены
до конца не выверенные части
Проект ЗЕРКАЛО-44 посвящен стратегической игре, позволяющей
программировать поведение боевых единиц и соединений.
Общие положения
Игра происходит на игровом поле (далее ИП). ИП
представляет собой модель части поверхности астероида или планеты -
есть непроходимые участки (скалы, вода), есть участки с нормальной проходимостью
(в сл. версии возможны участки с пониженной проходимостью
- болота, песок и т.п.) ИП двумерно (2D), ограничено и разделено
на прямоугольные клетки - единицы местоположения.
В толще земли ИП находится руда: одного вида, определенное
кол-во в каждой клетке. Руда может быть извлечена и переработана в концентрат
руды. Концентрат может быть переработан в ресурс-металл, из которого
потом построены игровые единицы. Существуют связанные области повышенного
(на порядки) содержания руды - месторождения. (подробнее см. Ресурсы)
Основные игровые единицы - роботы (далее - юниты).
Юниты могут быть разной величины (массы), от нескольких тонн до сотен
тонн. Юниты делают в игре всё: добывают руду, возят концентрат или другие
грузы, сражаются, перерабатывают концентрат в ресурс-металл, строят
себе подобных и т.д. Каждый юнит состоит из корпуса, в который можно
помещать определенные функциональные устройства - реакторы, генераторы
защитного поля, вооружение, перерабатывающие и производственные блоки
и т.п. Для того что бы быть произведенным, юнит должен быть сконструирован
игроком (см. Кострукция юнита).
Игрок управляет юнитами с помощью мыши и клавиатуры,
отдавая простейшие команды типа "Идти в точку х,у", "Стоять",
"Атакавать точку х,у" и т.п. Для более сложных команд существуют
программы поведения юнитов. Программы поведения для одного юнита обьедены
в модуль. Модули пишутся на специальном объектно-ориентированном языке,
имеют уникальное имя и сохраняются от игры к игре. Игрок может сам писать
модули в специальном редакторе, а может и использовать написанные ранее
им или другими игроками. При конструировании юнита указывается его модуль
поведения, который может быть заменен на другой в ходе игры.
Модули состоят из алгоритмов поведения и обработчиков
событий. Алгоритм поведения представляет собой некую последовательность
действия юнита в игровом мире, например, "Разведывать месторождения
руды" или "Охранять базу". Алгоритмы поведения вынесены
в меню юнита (появляющееся при активизации юнита мышкой). Обработчики
событий - это реакции юнита на внешние раздражители (попадание, появление
в зоне радара врага, сообщения от других юнитов/соединений). Подробное
описание модулей см. раздел Программная модель
юнитов и соединений
Группу юнитов можно объединять и назначать этой группе
свои специальные модули поведения. Каждый юнит может входить в состав
только одного соединения. Соединения юнитов выполняют более общие задачи,
нежели одиночные юниты, например, организация линии доставки концентрата
руды на базу или охрана экспанда. Модули соединений пишутся игроком(ами).
В програмную модель соединения входит список ассоциированных юнитов.
Модуль соединения управляет подчиненными юнитами посредством отдачи
команд - вызовом специальных методов юнита, как атомарных, так и разработанных
игроком. Юнит входящий в состав соединения может транслировать свои
события модулю соединения, таким образом соединение может реагировать
на внешние раздражители.
Объединение всех соединений и одиночных юнитов есть
армия колонии. Армия тоже имеет свой модуль поведения, в алгоритмах
поведения которого игроком могут быть реализованы стратегические задачи,
к примеру, производство определенного кол-ва юнитов и формирование из
них боевого соединения, разведка месторождений, создание экспанда и
охрана его, и т.д. Модуль армии получает события от ассоциированных
соединений / юнитов и управляет ими посредством отдачи команд.
Инетерфейс
Экран разделен на несколько частей - окно, карта,
палеты управления (аналогично Старкрафту)
Каждый юнит имеет свое палету управления (меню) -
область экрана с клавишами (аналог меню юнита Старкрафта), нажатие которых
активизирует то или иное действие юнита. В зависимости от конструкции
юнита активизированы те или иные клавиши (например, команда "добывать"
неактивна, если у юнита нет добывающего блока).
По умолчанию за клавишами закреплены стандартные алгоритмы
действий. Игрок может переопределить эти действия посредством написания
соответствующего класса алгоритма
поведения(КАП): за каждой клавишей закреплено имя и если имя КАП
сформировано с именем клавиши, то при нажатии этой клавиши вызывается
данный КАП. Если существуют несколько КАП с одинаковым именем клавиши
в имени КАП, то у клавиши появляется ниспадающая палета выбора. Есстественно,
на все действия можно повесить "горячие кнопки".
Принадлежащий соединению юнит имеет два режима функционирования:
автоматический и ручной. При автоматическом режиме он выполняет только
команды соединения и при активизации юнита мышкой выбирается все юниты
соединения. При ручном юнит выполняет команды игрока (но не забывает
к какому соединению он принадлежит). В зависимости от режима у юнита
меняется палета управления: в автоматическом режиме отображается палета
управления соединения, в ручном режиме - палета управления юнита.
Доступ к алгоритмам поведения армии игрок имеет при
активизации юнита-базы через палету управления (или
можно сделать спецальную всегда отображаемую палету - на случай, если
юнит-базу уничтожат)
Гейм-плей
Игра начинается с появления на ИП юнита-базы
игрока. При старте игроку даётся некоторое кол-во ресурса, позволяющее
инициализировать колонию. Типовые задачи игрока в игре: разведка ИП,
добыча и переработка руды, производство юнитов, исследование технологий,
построение армии, защита своей колонии, атака колонии противника. Игра
заканчивается с уничтожением всех юнитов противника.
В состав игры входят типовые (разработанные создателями
игры) конструкции юнитов и их модулей поведения, так что играть можно
сразу, не вдаваясь в конструирование, написание модулей поведения и
их отладку. Но при желании игрок может изменить конструкции / модули.
Существует специальный режим игры - отладочный - в
котором игроку позволено менять код модулей поведения. В этом режиме
на экране отображаются все события юнита / соединения, текущий выполняемый
код и данные, ассоциированные с модулем.
Сингл-плей игры состоит из набора миссий, каждая из
которых характеризуется своим ИП и колонией противника
(разработанных создателями игры или создателями мишон-пака).
При мульти-плее игрок-создатель игры выбирает ИП,
загружает колонии противников / союзников, и ждет присоединения других
игроков (аналог мульти-плея в Старкрафте). Отладочный режим игры при
мульти-плее запрещен.
Конструкция юнита
Конструкция юнита разрабатывается игроком в специальном
конструкторе юнитов. Там игрок выбирает размер (массу) корпуса, устанавливает
необходимые ему блоки, регулирует соотношения между параметрами блоков
и запоминает конструкцию юнита под уникальным именем. Такие описания
конструкций хранятся от игры к игре и могут использоваться игроком по
его желанию в разных играх. Так же можно обмениваться файлами-конструкциями
между игроками: в конструкторе юнитов существует опции импорт и экспорт.
Юниты производятся в производственном блоке из ресурса-металла.
Стоимость производства: 2 т ресурса за
1 т готового юнита. Конструкция юнита служит основой для его производства,
нельзя менять параметры конструкции при производстве: завод лишь воплощает
разработку игрока в виртуальную жизнь. Производственный блок может производить
юниты, конструкции которых зарегестрированы в игре для игрока - эти
конструкции высвечиваются в меню выбора производства.
Для своих действий юнит использует энергию. Энергия
может вырабатываться реактором и накапливаться в аккумуляторе. Юнит
потребляет энергию только когда производит какое-либо действие (движется,
стреляет, отражает удары и т.п.) Некоторые действия потребляют исчезающе
малое кол-во энергии и не учитываются (поворот пушки, работа ЦПУ и т.п.)
Потребляемая блоком энергия зависит от типа блока, его массы и соотношения
параметров блока (см. в Спецификации блоков).
Основа конструкции юнита - его корпус. Корпус имеет
три подблока: шасси (определенного типа - колесное, гусеничное, шагающее
и т.п.), двигатель и броню. От массы каждого подблока зависит, соответственно:
грузоподьемность, скорость и защита (см. в Спецификации
блоков).
На корпус можно поставить любое число разнородных
блоков (нельзя, к примеру, поставить два радара, но два реактора - можно),
ограничение - грузоподьемность корпуса. Корпус тратит энергию на удержание
груза (для всех типов шасси, за исключением колесного и тракового),
при перемещении себя и груза, для обеспечения броневой защиты.
В игре существуют следующие блоки (там где не указана
масса подразумается переменная масса от 1 т):
- реактор - производит энергию для юнита (масса 50
т)
- аккумулятор - накапливает энергию
- радар - обнаруживает местность и находящиеся на ней обьекты,
- масс-анализатор - дополнение к радару для обнаружения руды (масса
30 т)
- генератор ЗП - создает, поддерживает и восстанавливает защитное
поле;
- оружие (всё оружие имеет скорость перезарядки как параметр блока)
- пушка - стеляет антипротонами на определенное расстояние зарядом
определенной мощности
- ракетная установка - стреляет ракетами определенной мощности
- разрядник - стреляет электрическим разрядом большой мощности
на минимальном расстоянии
- добывающий блок (добывалка) - добывает руду из земли
- кузов - служит для перевозки обьектов игры: юнитов, концентрта руды,
остовов.
- ремонтный блок - ремонтирует броню дружественного юнита (масса 75
т)
- телепорт - переносит юниты от одного телепорта к другому (масса
500 т)
- перерабатывающий блок - перерабатывает концентрат руды в ресурс
(масса 100 т)
- производственный блок - производит юниты (масса 200
т)
- исследовательский блок - исследует технологии (масса 100
т)
Каждый блок имеет уникальное время производства 1 тонны
блока (или время производства всего блока для блоков с постоянной массой).
Производственные блоки могут соединятся в пары, тогда
мощность ведомого блока полностью переходит к ведущему, для этого юниты,
несущие эти блоки должны быть на минимальном расстоянии.
Максимальная масса производимого юнита при этом так же увеличивается (пропорционально
кол-ву "сцепленных" блоков). У одного производственного блока
может быть несколько ведомых.
Подробное описание блоков см. в Спецификации
блоков
Модель виртуального мира игры
Единицы измерения - мегаджоули (МДж), тонны (т), метры
(м) и секунды (сек). Ускорений нет (не учитываются).
ИП (сектор) представляет собой прямоугольник, разбитый
на клетки. Максимальный размер ИП 65535 х 65535
клеток. Клетка - единица местоположения, два обьекта не могут занимать
одну и ту же клетку. Каждый обьект занимает одну или больше клеток.
Физический размер клетки - 1х1 метр.
ИП имеет три слоя:
- земля - здесь находятся и двигаются
наземные юниты
- слой движения ракет - здесь двигаются
ракеты, взрываясь при нахождении над / под контуром обьекта
- воздух - здесь двигаются воздушние
юниты (геликоптеры)
ИП генерится с помощью специального (на основе псевдослучайных
чисел) алгоритма из одного числа - номера сектора.
Время дискретно. Полный такт состоит из стадий:
- расчет детонации ракет / осуществление
выстрелов из пушек
- приращение величин полей / заряда
пушек
- расчет движения юнитов / ракет
(желаемое положение в зав-ти от вектора скорости)
- расчет столкновений
- отработка программ роботов (обработка
событий, обработка сообщений, определение вектора движения, поворот
оружия, пуск ракет / запись выстрела пушек)
Упрощающее допущение: хранилищ
для концентрата руды нет - после доставки их к перерабатывающему блоку
она сразу поступает в пользование всех переработчиков. Так же нет хранилища
для ресурса-маталла - весь ресурс после преобразования из концентрата
становится доступен для всех производственных блоков. Другое дело энергия
- она доступна только в пределах юнита и может передаваться при непосредственном
контакте юнитов.
Модель физического взаимодействия
юнитов
Каждый юнит на ИП характеризует его местоположение
и контур его корпуса. Контур корпуса может занимать несколько клеток
ИП. Каждую клетку ИП может занимать только один юнит.
Защитные поля юнитов не могут взаимопересекаться,
они отталкиваются друг от друга. То есть при столкновении юнитов они
будут отталкиваться друг от друга, полями или корпусами. Юнит без поля
(или с выключенным полем) может беспрепятственно проникнуть под радиус
защитного поля своего союзника. Под чужим полем свое поле включать нельзя.
Энергия может передаваться от юнита к дружественному
юниту на минимальном расстоянии - таким
образом можно заряжать аккумуляторы от юнитов с реакторами. Скорость
зарядки зависит от свободной энергии реактора в данный момент, но не
больше чем 10 % от емкости заряжаемого
аккумулятора. Так же на минимальном расстоянии
могут передаваться грузы из кузова в кузов (в перерабатывающий блок)
со скоростью 5*
т / сек.
Юниты могут уничтожать друг друга посредством оружия.
Защита от попадания существует двух типов - броня и защитное поле. Броня
имеет накапливающееся повреждение, поле может восстанавливаться. При
полном уничтожении поля и брони юнит прекращает жизнедеятельность и
превращается в остов с массой, рассчитанной по формуле Мостова
= Мюнита - Ростаточная от последнего
удара * 1. Остов юнита может быть
доставлен (целиком) на переработку и превращен в ресурс-металл.
Остов является непроходимым препятствием и может быть уничтожен: удар
оружия в 1 Мдж сжигает 1 тонну остова.
Остов присутствует на карте в течении 5
минут, затем исчезает.
Колония
Колония есть набор конструкций юнитов, их модулей,
модулей соединений и модуля колонии. Колония существует как отдельный
обьект (файл) и может распространяться между игроками off-line. Если
в модуле колонии есть специальный алгоритм поведения, отвечающий за
генеральную линию развития, то такая колония может выступать в роли
противника / союзника в мулти-плее.
Юнит-база
Юнит-база - специфичный юнит, зародыш колонии. Имеет
стандартную и неизменную конструкцию (гусеничное шасси, N
реакторов, перерабатывающий блок, 2 производственных блока, броню в
50 т, защитного поля и вооружения нет).
Единственный юнит при старте игры. С уничтожением юнита-базы игра не
заканчивается.
Минимальное расстояние
Минимальным расстоянием в игре считается расстояние
в 3 метра. На минимальном расстоянии действует
разрядник, можно заражать аккумуляторы, можно передавать грузы, чинить
юниты.
Ресурсы
Распределённые: каждая клетка имеет исчерпаемый запас
руды. Существуют "месторождения" руды - это связанные области
клеток, ёмкость которых на порядок больше обычных. Руда находится в
толще земли, её извлеченем занимаются добывающие блоки. Они производят
концентрат руды, который складывают на поверхность (или сразу в кузов,
своего юнита или близрасположенного юнита)
Концентрат, лежащий на поверхности клетки, не является
препятствием для юнитов и имеет опредленную массу. Кузов может забирать
произвольное кол-во концентрата с поверхности. Визуально лежащий на
поверхности концентрат выглядит как серая субстанция, интенсивностью
цвета отображающая свою плотность (массу). Концентрат обнаруживается
обыкновенным радаром.
Концентрат перерабатывается в ресурс с помощью перерабатывающего
блока. Из 3 т концентрата получается 1
т ресурса. Остов юнита, доставленный на перерабатывающий завод, учитывается
как 1 т ресурса за 1 т остова. Стоимость
производства: 2 т ресурса за 1 т готового
юнита для всех блоков.
При старте игрок получает 1000
т ресурса.
Можно сделать ресурсы возобновляемыми:
к примеру, на каждой клетке ресурс востанавливается со скоростью 0.001
т/сек до первоначального значения.
Технологии
Входят как коэффициент-множитель во все соотношения
/ цифры игры, обозначенные красным (растущие)
и синим (уменьшаюшиеся) цветом (или сотв.
звездочками * и *).
Формула коэффициентов:
для красных K
= 1.5 - (2 / (N + 4)), график
для синих K
= 0.5 + (2 / (N + 4)), график
где N - уровень
технологии, от 0 и выше.
Например, скорость восстановления защитного поля для
нулевого уровня этой технологии 0.1 МДж
/ сек. Коэффициент-можитель - 1. На первом уровне коэффициент будет
1.1, и скорость восстановления защитного поля будет 0.11 МДж / сек,
на втором, соответственно, ~1.33 и ~0.16 и т.д.
Формула выбрана с насыщением, что позволяет каждому
игроку самому решить, до какого уровня развивать технологии.
Существующие юниты автоматически обновляют свои уровни
технологий после завершения исследования.
Продолжение:
Спецификации блоков
Программная модель юнитов и соединений
|