Типы объектов THN
🔭
Типы объектов THN

Каждая сцена содержит как минимум три объекта: дескриптор сцены, объект-монитор и объект-камеру.

Каждый объект имеет уникальное имя в рамках скрипта. Использование одного и того же имени несколькими объектами приведёт к сбоям и ошибкам.

📌 Оглавление

⚡ Общие

Это свойства, общие для большинства типов объектов:

Свойство Тип Описание
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}, "
		}
	}