События объектов THN
⚙️
События объектов THN

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

Все события имеют одинаковую структуру: { Time, Action, Targets, Properties }

Время определяет время активации события и измеряется в секундах, прошедших с момента запуска скрипта THN.

Действие определяет тип события, например, перемещение объектов, изменение ориентации камеры и т. д.

Цели — это набор основных аргументов, определяющих целевые объекты для действия. Обычно они ссылаются на свойство entity_name. Некоторые события принимают несколько целей, и порядок перечисленных имён важен.

Свойства — это набор дополнительных аргументов, специфичных для каждого типа действия.

Обычно для работы каждой сцены необходимо как минимум одно событие SET_CAMERA.

💥 Оглавление

📎 SET_CAMERA

monitor, camera

Активировать камеру для мониторинга сцены. У события нет свойств.

    {
		0.000, SET_CAMERA, { "Shot02_Monitor_1", "CnB_Camera_00_copy_5" }
	},

⚡ SET_SUBTITLE

Не работает. Предположительно, это должно было добавлять текст на экран, но так и не было использовано. Титры, которые появляются на экране в заставках кампании, — это названия баз и систем, где выполняется скрипт, точно так же, как при входе в систему.

📌 ATTACH_ENTITY

object, parent

Присоедините объект к целевому родительскому объекту. Это формирует иерархию между объектами, позволяя группировать их различными способами. Объекты можно прикреплять к подкомпонентам, например, к точкам крепления.

Например, можно прикрепить объект эффекта двигателя к точке подвески HpEngine01 объекта корабля. При перемещении объекта корабля эффект также будет действовать.

Однако объекты не обязательно должны следовать за другими. Примером косвенного использования может служить наблюдение за объектом с помощью камеры, прикреплённой к этому объекту с флагами, установленными только на LOOK_AT. Имейте в виду, что это будет происходить только в течение определённого времени события.

Свойство Тип Описание
duration float Как долго объект будет прикреплён к родителю (в секундах).
offset float[3] Смещение по позиции.
up AXIS Какая ось считается «вверх».
front AXIS Какая ось считается «вперёд».
target_type string ROOT: Цель — корень объекта.
HARDPOINT: Цель — hardpoint объекта.
PART: Цель — часть составного объекта (multi-part mesh).
target_name string Имя цели прикрепления, имя hardpoint или кости; пусто, если тип ROOT.
flags string POSITION: Объект будет следовать позиции родителя.
ORIENTATION: Объект наследует ориентацию родителя.
LOOK_AT: Объект будет ориентирован на родителя.
ENTITY_RELATIVE
ORIENTATION_RELATIVE
PARENT_CHILD

Свойство flags представляет собой битовую маску, значения можно комбинировать через символ +.

    {
		0.000, ATTACH_ENTITY, { "CnB_Camera_00_copy_4", "aa_main_object" },
		{
			duration = 43.000,
			offset = { 0, 0, 3 },
			up = Y_AXIS,
			front = NEG_Z_AXIS,
			target_part = "",
			target_type = ROOT,
			flags = LOOK_AT + ENTITY_RELATIVE
		}
	},

📌 CONNECT_HARDPOINT

object, target

Соедините точки подвески между различными объектами.

Свойство Тип Описание
duration float Длительность соединения.
hardpoint string Hardpoint исходного объекта.
parent_hardpoint string Hardpoint родительского объекта.
	{
		40.000, CONNECT_HARDPOINTS, { "Prop_glass_green_Bart_Fixt", "Char_li_bartender_Fixture" },
		{
			duration = 6.375,
			hardpoint = "hprightconnect_prop_glass_green",
			parent_hardpoint = "hprightconnect"
		}
	},

🔭 START_SOUND

sound

Воспроизводит звуковой эффект.

Свойство Тип Описание
duration float Длительность воспроизведения звукового эффекта.
flags LOOP Повторять звуковой эффект на протяжении события.
	{
		39.520, START_SOUND, { "sfx_fs_ml_hard03_4" },
		{
			duration = 0.254
		}
	},

🔥 START_MOTION

object

Воспроизведение сценария анимации.

Скрипты анимации составных объектов (.cmp) обычно встроены в файлы в узле «Анимация/Скрипт».

Анимации персонажей находятся в файлах .anm в папке DATA\CHARACTERS\ANIMATIONS.

Свойство Тип Описание
animation string Имя последовательности анимации
duration float Длительность
time_scale float Масштаб времени анимации (1)
weight float 1
heading float -1
event_flags integer 2, похоже, означает повторение (loop), 3 — воспроизведение один раз?
	{
		39.769, START_MOTION, { "Char_li_bartender_Fixture" },
		{
			animation = "Sc_MLBODY_WLKG_000LV_XA_01",
			duration = 6.607,
			time_scale = 1,
			weight = 1,
			heading = -1,
			event_flags = 2
		}
	},

💥 START_IK

    {
		42.375, START_IK, { "Char_trent", "Char_Tr_Mk_IKeyes_glass" },
		{
			duration = 2.921,
			end_effector = "Eye IK Left",
			count_to_root = 1,
			target_part = "",
			target_type = ROOT,
			damping = 1,
			up = Y_AXIS,
			front = Z_AXIS,
			point_at = 1,
			move_to = 0,
			transition_duration = 0.300,
			event_flags = 128
		}
	},

⚡ START_PSYS

effect

Инициализируйте и воспроизведите эффект системы частиц.

Свойство Тип Описание
duration float Длительность жизни эффекта частиц.
	{
		22.000, START_PSYS, { "Ship_civ_freighter_1_engine2" },
		{
			duration = 7.000
		}
	},

💨 START_FOG_PROP_ANIM

scene

Анимируйте настройки тумана в сцене (fogprops). По умолчанию в сценах туман отсутствует, поэтому для его настройки необходимо использовать это событие.

💢 fogprops

Свойство Тип Описание
fogon boolean Включение/выключение тумана в сцене.
fogcolor integer[3] Цвет тумана в формате RGB.
fogmode string Возможные варианты:
F_LINEAR: Линейное затухание тумана
F_EXP: Экспоненциальное затухание
F_EXP2: Неясно, что делает
F_NONE: Не используется
fogstart float Расстояние начала тумана.
fogend float Расстояние конца тумана.
    {
		0.000, START_FOG_PROP_ANIM, { "Layer_Br_08_Bar_hardpoint" },
		{
			duration = 0.100,
			fogprops =
			{
				fogon = Y,
				fogtable = N,
				fogcolor = { 62, 62, 80 },
				fogmode = F_LINEAR,
				fogstart = 0,
				fogend = 1000,
				fogdensity = 0.1
			}
		}
	},

📎 START_SPATIAL_PROP_ANIM

object

Анимируйте общие пространственные свойства объекта (spatialprops, т. е. положение, ориентация и т. д.). Если вы хотите, чтобы объект двигался по заданной траектории, используйте событие START_PATH_ANIMATION.

Свойство Тип Описание
duration float Длительность анимации.
target_type string Возможные варианты:
ROOT
PART
    {
		149.100, START_SPATIAL_PROP_ANIM, { "Ambi_Roids_solar_badlands_dynamic_03", "Ambi_Roids_solar_badlands_dynamic_03_Target" },
		{
			duration = 60.000,
			target_part = "",
			target_type = ROOT,
			spatialprops =
			{
				pos = { 170.7793, 1584.076, 966.3994 }
			},
			param_curve =
			{
				CLSID = "FreeFormPCurve",
				points =
				{
					{  0.000000,  0.000000,  0.000000,  0.952381 },
					{  1.000000,  1.000000,  0.947368,  0.000000 },
				}
			},
			pcurve_period = -1000
		}
	},

💥 START_LIGHT_PROP_ANIM

light

Анимируйте свойства объекта освещения (lightprops). С помощью этого события можно настраивать свойства источника света для создания различных визуальных эффектов, таких как стробоскопический свет, эффекты затухания и молнии.

    {
		6.500, START_LIGHT_PROP_ANIM, { "Ambi_Lt_Decon_Burst" },
		{
			duration = 1.100,
			lightprops =
			{
				diffuse = { 0.729412, 1, 0.729412 },
				ambient = { 0.121569, 0.376471, 0.121569 },
			},
			param_curve =
			{
				CLSID = "FreeFormPCurve",
				points =
				{
					{  0.000000,  0.000000,  0.000000,  0.000000 },
					{  0.243590,  1.000000,  0.000000, -4.250000 },
					{  1.000000,  0.000000,  0.000000,  0.000000 },
				}
			},
			pcurve_period = -1000
		}
	},

💥 START_CAMERA_PROP_ANIM

camera

Анимируйте свойства объекта камеры (cameraprops). Свойства, специфичные для камеры, включают настройку угла обзора.

    {
		89.744, START_CAMERA_PROP_ANIM, { "Cam_09_TCI_artifact", "Cam_09_PathPt3_PCOL" },
		{
			duration = 9.553,
			cameraprops =
			{
				fovh = 20
			},
			param_curve =
			{
				CLSID = "FreeFormPCurve",
				points =
				{
					{  0.000000,  0.000000,  0.000000,  0.000000 },
					{  1.000000,  1.000000,  0.000000,  0.000000 },
				}
			},
			pcurve_period = -1000
		}
	},

💨 START_PSYS_PROP_ANIM

effect

Анимируйте свойства объекта эффекта (psysprops). Вы можете управлять одним свойством: sparam. Sparam — это число с плавающей точкой, передаваемое в эффекты и используемое для управления некоторыми эффектами, такими как интенсивность свечения выхлопных газов двигателя, инверсионных следов и двигателей.

Значения Sparam обычно задаются в диапазоне от 0 до 1, где 0 — анимация холостого хода двигателя, а 1 — полный крейсерский режим. Вы также можете задать длительность. Это время, необходимое двигателю для перехода из текущего состояния в заданное вами значение sparam. Обратите внимание, что анимация «заряда на крейсерском режиме» зашита в эффект следа двигателя, а не в сам эффект двигателя.

	{
		7.500, START_PSYS_PROP_ANIM, { "rtc_shipdust_2" },
		{
			duration = 0.100,
			psysprops =
			{
				sparam = 0.7
			}
		}
	},

📌 START_FLR_HEIGHT_ANIM

character, marker

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

	{
		75.573, START_FLR_HEIGHT_ANIM, { "char_order_extra_04" },
		{
			duration = 0.000,
			target_type = ROOT,
			floor_height = -10.40001
		}
	},

📌 START_AUDIO_PROP_ANIM

sound

Анимированные свойства звуковых эффектов (аудиореквизит).

    {
		66.027, START_AUDIO_PROP_ANIM, { "sfx_fs_mr_hard01_13" },
		{
			duration = 4.000,
			audioprops =
			{
				attenuation = -100
			},
			param_curve =
			{
				CLSID = "FreeFormPCurve",
				points =
				{
					{  0.000000,  0.000000,  0.000000,  0.000000 },
					{  1.000000,  1.000000,  0.000000,  0.000000 },
				}
			},
			pcurve_period = -1000
		}
	},

📌 START_REVERB_PROP_ANIM

sound

Анимированные свойства реверберации звукового эффекта.

    {
		0.000, START_REVERB_PROP_ANIM, { "Layer_Hi_02_City_Ambi_Day" },
		{
			duration = 0.100,
			reverbprops =
			{

			}
		}
	},

📌 START_PATH_ANIMATION

object, path

Перемещение объекта по траектории.

Свойство Тип Описание
duration float Длительность.
start_percent float Начальная точка в процентах от длины пути (по умолчанию: 0.0).
stop_percent float Конечная точка в процентах от длины пути (по умолчанию: 1.0).
offset float[3] Дополнительное смещение позиции, применяемое во время анимации.
up AXIS Какая ось считается «вверх» (по умолчанию: Y_AXIS).
front AXIS Какая ось считается «вперёд» (по умолчанию: NEG_Z_AXIS).
flags string Возможные варианты:
POSITION: Использовать координаты позиции из данных пути
ORIENTATION: Использовать кватернион ориентации из данных пути
LOOK_AT: Объект будет ориентирован вдоль пути (игнорирует кватернион ориентации пути)
	{
		0.000, START_PATH_ANIMATION, { "CnB_Camera_00_copy_1", "Path_1" },
		{
			duration = 30.000,
			start_percent = 0,
			stop_percent = 1,
			offset = { 0, 0, 0 },
			up = Y_AXIS,
			front = NEG_Z_AXIS,
			flags = POSITION,
			param_curve =
			{
				CLSID = "FreeFormPCurve",
				points =
				{
					{  0.000000,  0.000000,  0.000000,  0.000000 },
					{  1.000000,  1.000000,  0.000000,  0.000000 },
				}
			},
			pcurve_period = -1000
		}
	},