Elite Games - Свобода среди звезд!

Independence War 2 - Cоздание файлов карты (.map)

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

Я буду предполагать, что вы не обладаете дополнительными инструментами, и буду опираться, что все редактирование файлов будет вестись в обычном Блокноте Windows. Так же необходимо скачать с сайта IW2 комплект GeogSDK содержащий в себе компилятор – декомпилятор карт.

Вся вселенная IW2 состоит из нескольких файлов, по два на каждую звездную систему – файлы .map и .lws. В файле .map хранится информация о наличии, расположении, размерах звезд, планет и станций. В файле .lws хранится визуальное оформление системы, задается количество и цвет маленьких звездочек на заднем плане. Так же в нем устанавливаются параметры подсветки и некоторые другие параметры, от которых зависит внешний вид звездной системы.

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

СОЗДАНИЕ ФАЙЛОВ .map

Файл: my_system.map
Карты в игре хранятся в двоичном собственном формате, поэтому нам необходима программа конвертер (компилятор) Geog.exe. Конвертер использует командную строку для получения параметров. Формат вызова:

Geog.exe my_system.csv my_system.map

Для обратной конвертации .map в .csv формат вызова такой:

Geog.exe –decode my_system.map my_system.csv

Это может пригодится для отладки карт, если возникли ошибки, или для просмотра с целью изучения уже готовых карт.
Конвертор на входе понимает только файлы CSV. Это текстовые файлы, содержащие строки с разделенными запятой данными. Есть ограничения: каждая строка в файле — это один объект, переносы строк недопустимы. Количество объектов в системе не должно превышать 1000, нельзя установить больше 100 прыжковых точек в пределах одной системы. Длина одной строки не должна превышать 4096 символов, а имена объектов должны быть не более 260 символов.

Формат CSV файла
Каждая строка содержит один объект и должна начинаться с идентификатора объекта, строки с неверными идентификаторами игнорируются, поэтому возможно добавление произвольных строк комментариев. Рассмотрим подробней каждый вид объектов.

CENTER
Каждый файл обязательно должен содержать данную команду в первой строке. Команда дает указание добавить центр будущей системы, который будет точкой отсчета для остальных объектов. Центр системы устанавливается всегда в центр (на то он и центр) и имеет координаты 0,0,0. Формат команды таков:

Пример значения

Тип значения

Тип данных

CenterОператорСтрока
My SystemНазвание системыСтрока
EndОператорСтрока

Вот так это должно выглядеть в файле:
Center, my system, end

STAR
Добавляет на карту звезду. Звезды вращаются вокруг центра системы, он для них является родителем. Формат команды таков:

Пример значения

Тип значения

Тип данных

StarОператорСтрока
Alpha StarНазвание звездыСтрока
My SystemРодительСтрока
15000000000Расcтояние до родителяFloat, в метрах (положительные значения)
90Поворот вокруг родителяFloat – 0-360 градусов
0Возвышение верх/низ относительно родителяFloat – -90 to 90 градусов
5Цвет звездыInteger 1-11
EndКонец строкиСтрока

Пример строки из CSV файла:
Star,Alpha Star,My System,1500000000,90,0,5,end

В вашей системе может быть несколько звезд. Для размещения их на карте используются следующие параметры: расстояние до Родителя, поворот вокруг родителя. Поворот задается в градусах относительно родителя. Возвышение это поворот вокруг родителя в вертикальной плоскости, задается в градусах положительное значение возвышение, отрицательное опускание.
Цвет звезды задается в пределах от 1 до 11. 1 – яркий белый, 4 – 5 желтый, 11 темно красный. Значения более 11 возможны, но не дают видимого эффекта.

BODY
Добавляет на карту планету или луну. Все планеты и их спутники именуются небесными телами (Body). Формат команды таков:

Пример значения

Тип значения

Тип данных

BodyоператорСтрока
JupiterНазвание планетыСтрока
Alpha StarРодительСтрока
778e9Расcтояние до родителяПоложительное Float, в метрах
20Поворот вокруг родителяFloat – градус поворота
5Возвышение над родителемFloat – градус поворота
1X orientation vector valueFloat – 0 to 1.0
0Y orientation vector valueFloat – 0 to 1.0
0Z orientation vector valueFloat – 0 to 1.0
1.0ВытянутостьПоложительное Float, 0 – шар 1 — элипс
7e7Радиус планетыПоложительное Float, в метрах
4Тип планеты*Integer 2,3,4
2Тип Текстуры1 скалистая или 2 Газовый Гигант
4Карта текстуры 1Integer
6Карты текстуры 2Integer
32Текстура 1 RedInteger 0 – 255
32Текстура 1 BlueInteger 0 –255
200Текстура 1 GreenInteger 0 –255
32Текстура 2 RedInteger 0 –255
200Текстура 2 BlueInteger 0 –255
32Текстура 2 GreenInteger 0 –255
32Текстура 3 RedInteger 0 –255
32Текстура 3 BlueInteger 0 –255
200Текстура 3 GreenInteger 0 –255
4Карта текстур облаковInteger, 255=none
5Количество колец планетыInteger, 8 max
171ОблачностьInteger 0 – 255
EndОператорСтрока


Пример из CSV файла:
Body,Jupiter,Alpha Star, 778e9,20,5,1,0,0,1.0,7e7,4,2,4,6,32,32,200,32,200,32,32,32,200,4,5,171,end,

(Этот пример должен быть в одной строке в *.csv файле).

Кроме выше рассмотренных параметров, рассмотрим новые:

Вытянутость – параметр, влияющий на степень сплющенности планеты, значение варьируются от 0 (идеальный шар) до 1 (вытянутый эллипс). Больше поставить можно, но выглядит это нереально и похоже больше на таблетку, чем на планету.
Тип планеты – возможны следующие значения:
Центр системы = 0,
Звезда = 1,
Планета = 2,
Спутник (луна) = 3,
Газовый гигант = 4,
Астероид = 5,
Погибший газовый гигант = 6,
Пояс астероидов = 7,
Туманность = 8,
Ошибка => 9.

Причем для планет не рекомендуется ставить значения кроме 2,3,4 .
Внешний вид планеты зависит от типа текстуры. Бывают 1- скалистые (обычная поверхность), и 2 — текстуры газового гиганта.

Далее следуют 2 текстурных индекса, которые отсылают нас к номеру текстуры. Номер текстуры есть в «Planets.ini (в архиве Resourse.zip)». Не ставьте текстурный индекс, больше чем их есть в Planets.ini иначе рискуете получить невидимую планету. Следующие три параметра Текстура 1 Red, Текстура 1 Green, Текстура 1 Blue – это цвет первой текстуры, следующие 3 параметра это цвет второй текстуры.

И последние три значения это, как я понимаю, цвет текстуры облаков. Цвета представлены в стандартном RGB формате, каждое число может быть от 0 до 255.
Следующий параметр индекс текстуры облаков. Смотреть также в «Planets.ini (в архиве Resourse.zip)» (255 – отсутствие таковых).

Дальше идет количество колец планеты – с этим все просто бывает от 0 до 8. правда кольца бывают только у газовых гигантов. (Тип планеты = 4)
Облачность – принимает значения от 0 до 255. Судя по всему, чем больше число, тем плотнее облака.

STATION
Добавляет космическую станцию на орбите планеты или звезды. Формат команды таков:

Пример значения

Тип значения

Тип данных

StationОператорСтрока
Home BaseНазвание станцииСтрока
JupiterРодительСтрока
1000000000Расcтояние до родителяПоложительное Float, в метрах
90Поворот вокруг родителяFloat – Градус поворота
5Возвышение над родителемFloat – Градус поворота
1.0X orientation vector valueFloat – 0 to 1.0
0Y orientation vector valueFloat – 0 to 1.0
0Z orientation vector valueFloat – 0 to 1.0
28Номер модели станцииInteger.
116Специализация Integer
22ПринадлежностьInteger
20Уровень населенияInteger (группами по 200 человек)
EndОператорСтрока

Пример из CSV файла:
Station,Home Base,Jupiter,1000000000,90,5,1.0,0,0,28,116,22,20, end,

Номер модели станции – задает внешний вид станции, возможны значения от 0 до 36 (см. приложение для детальной расшифровки)

Специализация – задает вид деятельности станции, возможные значения:

Специализация

Значение

Disused 1
WaterMine 2
OrganicsMine 3
InorganicsMine 4
BiomassMine 5
CommonMetalsMine 6
RareMetalsMine 7
ExoticMetalsMine 8
RadioactivesMine 9
FusionableGasesMine 10
WaterProcessingPlant 11
OrganicsProcessingPlant 12
InorganicsProcessingPlant 13
BiomassProcessingPlant 14
CommonMetalsProcessingPlant 15
RareMetalsProcessingPlant 16
ExoticMetalsProcessingPlant 17
RadioactivesProcessingPlant 18
FusionableGasesProcessingPlant 19
NeutroniumProcessingPlant 20
Shipyard 21
HeavyManufacturingPlant 22
BiologicalManufacturingPlant 23
WetwareManufacturingPlant 24
HiTechManufacturingPlant 25
ElectronicsManufacturingPlant 26
WeaponsManufacturingPlant 27
PharmaceuticalsManufacturingPlant 28
PlasticsManufacturingPlant 29
FusionReactorsManufacturingPlant 30
EnergyCellsManufacturingPlant 31
StationFabricationManufacturingPlant 32
LuxuriesManufacturingPlant 33
TerraformingStation 34
BioBomber 35
Waystation 36
RepairStation 37
OreTransferStation 38
ResearchAndDevelopmentLab 39
ResearchStation 40
MedicalResearchCentre 41
BlackBudgetResearchStation 42
SensitiveResearchStation 43
FinancialCentre 44
RegionalHQ 45
Villa 46
CentralHQ 47
AgriculturalSettlement 48
Resort 49
LuxuryResort 50
MedicalFacility 51
LeisureComplex 52
NeutroniumMine 53
SecurityStation 54
Fortress 55
HighSecurityPrison 56
LowSecurityPrison 57
HardLabourPrison 58
Homestead 59
MercenaryBase 60
TradingPost 61
Warehousing 62
BlackMarket 63
DryDock 64
DockingStation 65
EntertainmentStation 66
Settlement 67
PoliceBase 68
PoliceOutpost 69
SystemDefenceStation 70
SystemDefenceDock 71
NavalAcademy 72
NavalTrainingBase 73
Outpost 74
Base 75
RepairDock 76
MarineBarracks 78
PerimeterDefences 79
NavalTestingSite 80
NavalResearchFacility 81
JumpFortress 82
SupplyDepot 84
DefenceStation 85
STCPost 86
STCHQ 87
FTLArray 88
FTLInterchange 89
STLTranceiver 90
STLInterchange 91
PlanetaryAdministration 92
SystemAdministration 93
ClusterAdministration 94
RegionalDepartment 95
University 96
Ark 97
Garden 98
Asylum 99
Hospice 100
PirateBase 101
PirateCove 102
PirateOutpost 103
GangsterHideout 104
ViceDen 105
Casino 106
CollectiveSettlement 107
Hermitage 108
ReligiousCentre 109
MadScientistLab 110
Hideout 111
Habitat 112
Junkyard 113
BoxTown 114
AsteroidSculptures 115
PlayerBase 116
GunstarArray 117
JumpAccelerator 118
HoffersGap 119
HoffersHeel 120
Beanstalk 121
TransferStation 122

Принадлежность – устанавливает, кому подчиняется данная станция, возможны значения:

Принадлежность

Значение

Neutral 1
Independent 2
Exile 3
Military 4
Underworld 5
Government 6
Transient 7
Society 8
Invalid 9
Stepson 10
Kong 11
MAASCorporation 12
CarvaCartel 13
Junkers 14
Police 15
NOMEXCorporation 16
NSOLaplace 17
Marauders 18
Angels 19
TheOman 20
MCA 21
Player 22
League 23
TrimannShipping 24
RhondusGasMining 25
AshantiInvestment 26
CrosspointMinerals 27
HeliosMining 28
JardinTerraforming 29
ChonBodifule 30
OrionProducts 31
VonShellingIndustries 32
MegalithCorp 33
HibatshPMC 34
DesterCorporation 35
WhindWeaponsSystems 36
AdvancedSecurityCorp 37
Network54 38
Infonet 39
StellarNet 40
WordsworthTechnology 41
NetcomSA 42
CoventryEngineeringResearch 43
NINEXWetware 44
UniversalConsumerProducts 45
HighlifeProducts 46
LowOrbitRecovery 47
KIMOShipping 48
DatagonTechnologies 49
MicoriaCommunications 50
LOMAXEngines 51
LOMAXTechnologies 52
NumikoProducts 53
TheThirdWay 54
Aliens 55


BELT
Создает пояс астероидов.

Belt

Оператор

Строка

Dark BeltНазвание поясаСтрока
Alpha StarРодительСтрока
600000000000Расcтояние до родителяПоложительное Float, в метрах
0Поворот вокруг родителяFloat – градус
0Для пояса не используется Float – градус
6000000Радиус поясаFloat – радиус в метрах


Пример строки из CSV файла
Belt,Dark Belt,Alpha Star,600000000000,0,0,0,0,0,0,6000000

NEBULA
Создает туманность такую же как вокруг базы «Лукреции».

Пример значения

Тип значения

Тип данных

NebulaОператорСтрока
GhostНазвание туманностиСтрока
Alpha StarРодительСтрока
600000000000Расcтояние до родителяPositive Float, meters
0Поворот вокруг родителяFloat – градусы
0Поворот над родителемFloat – градусы
500000Радиус туманностиFloat – метры
EndОператорСтрока

Пример из CSV файла:
Nebula, Ghost, Alpha Star, 6e11,0,0,5e5,end,

L-POINT
Создает прыжковую зону в точке Лагранжа (точка между планетой и луной, в месте равноденствия сил гравитации обоих тел)

Lpoint

Оператор

Строка

Io LpointНазвание L-ТочкиСтрока
JupiterИмя планетыСтрока
IoИмя луны(спутника)Строка
0.5Смещение от планетыВ процентах от планеты
1Количество маршрутовInteger
CoyoteНазвание звезды назначенияСтрока
EndОператорСтрока


Пример из CSV файла:
Lpoint,Io Lpoint,Jupiter,Io,0.5,1,Coyote,end,

Смещение от планеты – устанавливает как будет смещена точка прыжка между планетами. 0.5 устанавливает точку ровно в месте равноденствия гравитации. 0.1 располагает точку прыжка на минимальном расстоянии от планеты.

Количество маршрутов – количество звездных систем, в которые можно отправиться через данную точку прыжка.
Если точка имеет несколько маршрутов, они перечисляются в файле друг за другом.
0 = локальный прыжок в пределах одной звездной системы. L-Pointы можно скрывать или делать не рабочими из кода игры. Если две системы имеют встречные маршруты прыжков на карте систем, они соединяются линией.

Установка и ориентация объектов
Все объекты могут быть установлены относительно своего родителя, и только Центр системы всегда устанавливается в координаты 0,0,0.
Далее, имеем несколько параметров для получения точного местоположения объекта. Расстояние до родителя, поворот вокруг родителя и возвышение над родителем. С расстоянием все понятно, рассмотрим повороты:

Поворот вокруг родителя – возьмем, к примеру, систему из одной звезды, одной планеты и луны планеты. Пусть для планеты мы зададим угол поворота вокруг родителя равным 90 градусов. А для луны поворот = 180 градусов
Получим такую картинку:

Для возвышения то же самое только объект смещается вверх или вниз.
Дальше. Самый интересный момент ориентация объекта. Для задания наклона по осям координат используются три значения в формате единичного вектора (Сумма всех отклонений должна быть равна 1.

Методика точного расчета мной еще до конца не изучена и оставляет широкое поле для экспериментов.
Еще необходимо сказать о точности измерений расстояния. Если вы располагаете, объекты на расстояние дальше чем 1е15 метров от центральной точки, то они будут смещаться. При расстоянии большем, чем 1е16 погрешность будут составлять метры, а при расстояниях больше чем 1е18 погрешность может составить несколько километров!
Расстояние до объектов задается числом с плавающей точкой двойной точности размером 53 бита. Когда величина, указанная после точки, становится слишком большой, система отбрасывает числа младшего порядка, чтобы оставить место для отображения больших величин. По сути, она отбрасывает метры, чтобы можно было отобразить большие расстояния

Самое большое число, которое величина с плавающей точкой двойной точности может отобразить с тем учетом, чтобы продолжать индивидуальный подсчет метров: 9,007,199,254,740,991. На это следует обратить внимание, если вам необходимо точное расположение объектов.

Теперь от теории перейдем к практике, открываем блокнот и добавляем в него все объекты, не забывая, что первым идет родитель затем потомки. У меня для примера получился вот такой файл:

Center, Mantikora system, end

Star, Mantikora I, Mantikora system, 1500000000, 0, 0, 5, end,

Body, Medusa, Mantikora I, 14959790000, 20,0, 1, 0, 0, 0, 700000000, 2, 1, 4, 6, 32, 200, 200, 32, 200, 32, 200, 20, 200, 4, 5, 171, end,

Body, Moon, Medusa, 384400000, 120, 0, 1, 0, 0, 0, 3476400, 3, 1, 4, 6, 32, 200, 200, 32, 200, 32, 32, 200, 200, 3, 0, 0, end,

Station, Vasilisk, Medusa, 500000000, 30, 0, 0, 0, 0, 12, 106, 2, 20, end,


Данный пример создает карту с одной звездой (Mantikora I) желтого цвета, одной планетой (Medusa) имеющей один естественный спутник (Moon) и одну станцию на орбите (Vasilisk).

Сохраняем полученный файл с произвольным именем, например Mantikora.csv
Теперь его необходимо с помощью программы Geog.exe конвертировать в формат .map
Для этого копируем файл Geog.exe в папку с *.csv файлом и запускаем с командной строки. В моем примере будет выглядеть вот так :

Geog.exe mantikora.csv mantikora.map

В итоге в той же папке должен появиться файл Mantikora.map. Для проверки его можно конвертировать обратно в csv

Geog.exe –decode mantikora.map mantikora_dekompiled.csv

Если все было сделано правильно файлы mantikora.csv и mantikora_dekompiled.csv должны совпадать. Небольшая разница была замечена у чисел с плавающей точкой, да и то в последних разрядах.
Если теперь карту поместить в игру и попробовать в нее поиграть, то нам предстанет ужасное зрелище, абсолютно черный экран, где-то вдалеке висит наше солнце. Это явно непорядок, поэтому в следующей статье мы займемся визуальным оформлением и украшательством нашей звездной системы.

Андрей Мунгалов a.k.a. vampo
К началу раздела | Наверх страницы Сообщить об ошибке
Independence War 2 - Cоздание файлов карты (.map)
Все документы раздела: Independence War 1 | Предыстория | Мифология | Персонажи | Сражения | Пиратство | Экран HUD | Снаряжение | Прохождение 0-го акта | Прохождение 1-го акта | Прохождение 2-го акта | Прохождение 3-го акта | А знаете ли вы что... | Клавиши управления | Команды управления | Диски | Технические вопросы | Файлы | Моды | Моды по "Вавилону 5" | Мод B5core | Конструктор | Ссылки |


Дизайн Elite Games V5 beta.18
EGM Elite Games Manager v5.17 02.05.2010