Каждая сцена содержит как минимум три объекта: дескриптор сцены, объект-монитор и объект-камеру.
Каждый объект имеет уникальное имя в рамках скрипта. Использование одного и того же имени несколькими объектами приведёт к сбоям и ошибкам.
📌 Оглавление
⚡ Общие
Это свойства, общие для большинства типов объектов:
Свойство | Тип | Описание |
---|---|---|
entity_name |
string | Имя объекта в сцене. |
type |
string | Тип объекта. Возможные варианты:SCENE : Дескриптор сцены.MONITOR : Целевой монитор рендеринга.CAMERA : Камера вида.LIGHT : Источник света.COMPOUND : Составной меш (корабли, солнца и т.п.).DEFORMABLE : Деформируемый меш (персонажи).PSYS : Эффект системы частиц.SOUND : Звуковой эффект.MARKER : Маркер/фиктивный объект.MOTION_PATH : Кривая движения (например, траектория корабля). |
template_name |
string | Имя шаблона объекта из каталога, используется для определённых типов объектов. |
lt_grp |
integer | Группа получаемого света. |
srt_grp |
integer | Группа сортировки порядка рендеринга. От первого к последнему — от заднего плана к переднему. |
usr_flg |
integer | Специальные флаги. Для типа COMPOUND : если установлено в 1, объект будет отрендерен как статический фоновый слой (для звездного неба, звёзд и т.п.).В сочетании с starsphere_generic_exclusion или подобными позволяет свету/туману задавать цвета туманностей (установить в 2). |
flags |
string | LIT_DYNAMIC : Меш получает динамическое освещение.LIT_AMBIENT : Меш получает окружающее освещение.HIDDEN : Объект невидим. |
Флаги можно суммировать с помощью символа +
.
📎 spatialprops
Свойство | Тип | Описание |
---|---|---|
pos |
float[3] | Позиция объекта (если не прикреплён к другому объекту, обычно относительно сцены). |
orient |
{float[3]}[3] | Матрица поворота. Используется при установке объекта в сцене и задаёт его ориентацию. |
q_orient |
float[4] | Кватернион ориентации. Используется для анимации. |
axisrot |
{float, AXIS} | Вращение объекта вокруг одной оси. Используется для анимации. |
💨 SCENE
Объект управления сценой. Каждая кат-сцена должна иметь только один объект сцены. На этот объект ссылаются некоторые события, и он может использоваться для настройки таких параметров, как туман и окружающее освещение.
Свойство | Тип | Описание |
---|---|---|
up |
AXIS | По умолчанию Y_AXIS. |
front |
AXIS | По умолчанию Z_AXIS. |
ambient |
AXIS | Цвет окружающего света (без освещения/тени). |
{
entity_name = "Scene_Untitled_2",
type = SCENE,
template_name = "",
lt_grp = 0, srt_grp = 0, usr_flg = 0,
spatialprops =
{
pos = { 0, 0, 0 },
orient = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }
},
up = Y_AXIS,
front = Z_AXIS,
ambient = { 128, 128, 128 }
},
📌 MONITOR
Цель рендеринга кат-сцены. Каждая кат-сцена должна иметь только один объект-монитор. Пространственные свойства монитора не имеют значения, поскольку это метаобъект, который отсутствует в сцене и используется только при переключении между камерами.
{
entity_name = "Shot01_Monitor_1",
type = MONITOR,
template_name = "",
lt_grp = 0, srt_grp = 0, usr_flg = 0
},
💢 CAMERA
Объект камеры вьюпорта. В кат-сцене может быть несколько камер, и для переключения между ними можно использовать событие SET_CAMERA
.
Свойство | Тип | Описание |
---|---|---|
fovh |
float | Горизонтальный угол обзора (FOV). |
hvaspect |
float | Соотношение горизонтали к вертикали. По умолчанию 1.333333 (экран 4:3, для которого была разработана игра). 1.777777 для широкоформатного 16:9. |
nearplane |
float | Ближняя плоскость отсечения фруструма. По умолчанию 1, если только сцена не содержит очень маленьких объектов и камера расположена очень близко. |
farplane |
float | Дальняя плоскость отсечения фруструма. Объекты, находящиеся дальше этого расстояния, будут отсечены. Устанавливайте разумное значение, чтобы избежать мерцания Z-буфера на старом оборудовании. |
{
entity_name = "Zs/NPC/mFloor2/02/ACU/Camera",
type = CAMERA,
template_name = "",
lt_grp = 0, srt_grp = 0, usr_flg = 0,
spatialprops =
{
pos = { 0.752384, 2.833098, 6.642779 },
orient = { { -0.967908, 0.000000, -0.251306 },
{ -0.010469, 0.999132, 0.040322 },
{ 0.251088, 0.041659, -0.967068 } }
},
cameraprops =
{
fovh = 25,
hvaspect = 1.85,
nearplane = 0.3,
farplane = 4000
}
},
📌 LIGHT
Объект источника света, освещающий объекты сетки сцены. Имейте в виду, что из-за старой версии DirectX, используемой Freelancer, объект сетки может получать свет максимум от шести источников. Однако вы можете группировать источники света с помощью свойства lgt_grp, а объекты могут указывать, из какой группы они будут получать свет. Например, окружающая среда может освещаться одной группой источников света, а персонажи в ней — другой группой. Источники света в кат-сценах могут вести себя несколько иначе, чем объекты [Lightsource]
в системах.
Свойство | Тип | Описание |
---|---|---|
on |
boolean | Переключатель. Можно включить или выключить источник света. |
color |
float[3] | Не используется. |
diffuse |
float[3] | Диффузный цвет. Фактический оттенок света. |
specular |
float[3] | Интенсивность бликов (спекулярная). |
ambient |
float[3] | Дополнительный цвет окружающего света. |
direction |
float[3] | Неясно, что делает. |
range |
float | Дальность света. |
cutoff |
float | Расстояние от центра, с которого интенсивность света начинает постепенно уменьшаться. |
type |
string | L_POINT : Точечный источник света.L_DIRECT : Направленный источник света.L_SPOT : Прожектор. |
theta |
float | Полярные координаты для направленного источника света. |
atten |
float[3] | Затухание света. |
{
entity_name = "Ambi_Lightning_ALL_LtG11",
type = LIGHT,
template_name = "",
lt_grp = 11, srt_grp = 0, usr_flg = 0,
spatialprops =
{
pos = { -3.188878, 0, 0.014479 },
orient = { { 0.034878, 0.000000, -0.999392 },
{ 0.000000, 1.000000, 0.000000 },
{ 0.999392, 0.000000, 0.034878 } }
},
lightprops =
{
on = Y,
color = { 255, 255, 255 },
diffuse = { 0, 0, 0 },
specular = { 0, 0, 0 },
ambient = { 0, 0, 0 },
direction = { 0, 0, 1 },
range = 100000,
cutoff = 98.99998,
type = L_DIRECT,
theta = 90,
atten = { 1, 0, 0 }
}
},
💢 COMPOUND
Универсальный сетчатый объект, такой как солнечная энергия, корабль или статический объект. Персонажи используют свой собственный тип (см. DEFORMABLE
).
Свойство | Тип | Описание |
---|---|---|
template_name |
string | Имя объекта из архетипов в зависимости от каталога, указанного в userprops. |
🔭 userprops
Свойство | Тип | Описание |
---|---|---|
category |
string | Файл поиска категории меша (см. ниже). |
Категории, используемые составными объектами:
Категория | Имя файла |
---|---|
Prop |
DATA\petaldb.ini |
Room |
DATA\petaldb.ini |
Spaceship |
DATA\SHIPS\shiparch.ini |
Solar |
DATA\SOLAR\solararch.ini |
Asteroid |
DATA\SOLAR\asteroidarch.ini |
Equipment |
DATA\EQUIPMENT\prop_equip.ini |
Equipment Cart |
DATA\petaldb.ini |
{
entity_name = "li_elite_3",
type = COMPOUND,
template_name = "li_elite",
lt_grp = 0, srt_grp = 0, usr_flg = 0,
flags = LIT_DYNAMIC + LIT_AMBIENT,
spatialprops =
{
pos = { 0, 0, 0 },
orient = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }
},
userprops =
{
category = "Spaceship",
}
},
🔥 DEFORMABLE
Анимированные персонажи (Трент, Джуни и т. д.).
Категория | Имя файла | Описание |
---|---|---|
template_name |
string | Имя шаблона персонажа из файла DATA\CHARACTERS\costumes.ini . |
⚡ compoundprops
Свойство | Тип | Описание |
---|---|---|
floor_height |
float | Высота пола для персонажа. Деформируемые меши игнорируют позицию по высоте в пространственных свойствах. |
💥 userprop
Свойство | Тип | Описание |
---|---|---|
actor |
string | Имя шаблона из списка категорий. Должно совпадать с template_name . |
category |
string | Файл поиска категории меша (см. ниже). |
При использовании START_MOTION
имейте в виду, что некоторые анимации, например, ходьба, заставят персонажа изменить своё положение в пространстве, и это положение сохранится после завершения анимации. Многие анимации специфичны для одиночных сцен, поэтому с ними сложно что-либо сделать. Однако существует также довольно много универсальных анимаций, доступных всем персонажам-людям, и ряд неиспользуемых, но функциональных анимаций (например, танцы).
Чтобы найти названия анимаций персонажей, откройте файлы .anm в папке DATA\CHARACTERS\ANIMATIONS
с помощью UTFEditor. Имейте в виду, что некоторые версии UTFEditor могут аварийно завершать работу при открытии некоторых узлов в этих файлах. Анимации хранятся в узле «Анимация/Скрипт». Большинство названий скриптов имеют две цифры в конце, которые указывают время выполнения, что помогает связать их вместе.
Анимации головы, тела и рук иногда работают раздельно и могут выполняться независимо друг от друга. Например, вы можете запустить анимацию жестов рук персонажа одновременно с другой анимацией выражения лица. Несмотря на несколько громоздкий формат данных, система анимации во Freelancer довольно надежна.
Стоит отметить, что по какой-то причине размещение персонажа требует указания вертикального положения независимо от общих пространственных свойств (см. floor_height
). Анимация размещения по высоте также осуществляется через отдельное событие: START_FLR_HEIGHT_ANIM
.
{
entity_name = "Char_Trent",
type = DEFORMABLE,
template_name = "trent",
lt_grp = 0, srt_grp = 0, usr_flg = 0,
flags = LIT_DYNAMIC + LIT_AMBIENT,
spatialprops =
{
pos = { -18.33887, 0, -51.12214 },
orient = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }
},
compoundprops =
{
floor_height = 0
},
userprops =
{
actor = "player",
category = "Character",
}
},
🔭 PSYS
Эффект системы частиц (эффект Алхимии).
📎 psysprops
Свойство | Тип | Описание |
---|---|---|
sparam |
float | Числовое значение, передаваемое эффекту. Используется для интенсивности двигателя и подобных параметров. По умолчанию 0. |
Имя_шаблона будет ссылаться на атрибут псевдонима [Effect]
в любом из файлов *_ale.ini, находящихся в подпапках DATA\FX
(например, engines_ale.ini в DATA\FX\ENGINES
). Не все эффекты перечислены в DATA\FX\effects.ini
.
{
entity_name = "Ambi_Roids_gf_blsmallasteroid_03",
type = PSYS,
template_name = "gf_blsmallasteroid",
lt_grp = 0, srt_grp = 0, usr_flg = 0,
flags = LIT_DYNAMIC + LIT_AMBIENT,
spatialprops =
{
pos = { -500, 500, 0 },
orient = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }
},
psysprops =
{
sparam = 0
}
},
📎 SOUND
Звуковой эффект. Для его воспроизведения необходимо использовать событие START_SOUND
.
Свойство | Тип | Описание |
---|---|---|
flags |
SPATIAL |
Звуковой эффект пространственный и использует координаты. |
🔭 audioprops
Свойство | Тип | Описание |
---|---|---|
attenuation |
float | Затухание звукового эффекта. |
pan |
float | Панорама стерео. По умолчанию 0. |
dmin |
float | — |
ain |
float | — |
aout |
float | — |
atout |
float | — |
rmix |
float | — |
📌 userprops
Свойство | Тип | Описание |
---|---|---|
category |
string | Каталог источников звука. По умолчанию — «Audio». |
{
entity_name = "Ship_b_e_engine_br_small_1",
type = SOUND,
template_name = "engine_br_small",
lt_grp = 0, srt_grp = 0, usr_flg = 0,
flags = SPATIAL,
spatialprops =
{
pos = { 0, 0, 0 },
orient = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }
},
audioprops =
{
attenuation = 0,
pan = 0,
dmin = 50,
dmax = 1000,
ain = 360,
aout = 360,
atout = 0,
rmix = 0,
},
userprops =
{
category = "Audio",
}
},
🔭 MARKER
Объект-заглушка без визуального представления. Может использоваться в качестве точки вращения для других объектов или движущейся точки, на которую смотрит камера, следуя по траектории.
Свойство | Тип | Описание |
---|---|---|
flags |
REFERENCE |
Маркер является заполнителем для других объектов, которые будут динамически размещены при инициализации катсцены. |
В некоторых скриптах он служит объектом-заполнителем, например, кораблем игрока в сценах приземления/взлёта базы. При запуске сцены игра прикрепит модель корабля игрока к этому маркеру, если он обнаружен в сцене.
Некоторые названия маркеров-заполнителей:
Название | Прикрепление |
---|---|
X/Shipcentre/01 |
Корабль игрока 01. |
Zg/PC/Player/01/A/Stand |
Персонаж игрока 01 в костюме, в анимации стоя. |
Zs/NPC/Bartender/01/P/Stand |
Персонаж бармена 01, в анимации стоя. |
{
entity_name = "Mk_Pr_Smooth_straight_to_LEFT",
type = MARKER,
template_name = "",
lt_grp = 0, srt_grp = 0, usr_flg = 0,
spatialprops =
{
pos = { 0, 21.13857, 0 },
orient = { { 0.864434, 0.384713, -0.323651 },
{ -0.387993, 0.919888, 0.057158 },
{ 0.319712, 0.076165, 0.944449 } }
}
},
🔭 MOTION_PATH
Кривые используются для перемещения объекта по траектории. Траектории могут быть открытыми или замкнутыми.
💢 pathprops
Свойство | Тип | Описание |
---|---|---|
path_type |
string | Тип пути. По умолчанию “CV_CROrientationSplinePath”. |
path_data |
flag, {x, y, z}, {x, y, z, w} [...] | Данные пути: флаг, точки, кватернионы. |
Доступен только один тип пути: CV_CROrientationSplinePath
.
Первый атрибут в path_data — это флаг, указывающий, является ли этот путь открытым (“OPEN”
) или замкнутым (“CLOSED”
).
Каждая точка пути состоит из набора координат и кватерниона поворота.
Создание данных точек пути вручную (особенно кватернионов) — довольно сложная задача, поэтому я рекомендую использовать вашу любимую программу для 3D-моделирования, чтобы создавать плавные пути и экспортировать их в обычный текст, который можно использовать в файлах THN.
{
entity_name = "Path_1",
type = MOTION_PATH,
template_name = "",
lt_grp = 0, srt_grp = 0, usr_flg = 0,
spatialprops =
{
pos = { -10, 7.5, 30 },
orient = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }
},
pathprops =
{
path_type = "CV_CROrientationSplinePath",
path_data = "OPEN,{0.000000,0.000000,0.000000}, {1.000000,0.000000,0.000000,0.000000}, {0.000000,0.100000,0.000000}, {1.000000,0.000000,0.000000,0.000000}, "
}
}