Выбор анимации смерти

Логика выбора анимаций смерти для юнита типа human хранится в файле \properties\animation_selector\human_death.inc

Селектор обрабатывает запросы, имена которых соответствуют обстоятельствам смерти.

Варианты запросов для выбора анимаций смерти:

  • stand_dying - смерть стоя;

  • squat_dying - смерть сидя;

  • lie_dying - смерть лежа;

  • swim_dying - смерть во время плавания;

  • corpse_drop и corpse_drag - падение и протаскивание трупа во время смерти;

  • default_dying - специальный запрос, который делается 1 раз и запоминает, что вернулось. По этому запросу должна быть анимация смерти, которая будет проигрываться, если ничего другого не нашлось. Она нужна, чтобы не было мертвых стоящих солдат после загрузки.

Выбор анимаций смерти

После выбора запроса на анимацию (перечислены выше) в условных конструкциях блока if проверяются разные варианты обстоятельств смерти.

Варианты проверок:

Одной из проверок по флагам обстоятельств смерти является проверка направления: front или back. Если проигрыванию анимации мешает препятствие, то дальше выбор анимации идёт по списку:

  1. Берется правильное направление, которое указано в значении параметра human_kill_flags .

  2. Флаги направления (front и back) меняются местами.

  3. Используется вариант без флагов направления - предполагается, что в этом варианте выберется анимация, где солдат падает на месте и влетит в препятствие.

Основным способом указания анимации является случайный выбор анимации смерти по ее весу из указанного списка анимаций.

Пример выбора анимаций смерти по флагу обстоятельств смерти без указания направления
{stand_dying
...
	{if human_kill_flags "cover_in_trench"
		{random_select
			{weight 1 "stand_die_trench_1"}
			{weight 1 "stand_die_trench_2"}
			{weight 1 "stand_die_trench_3"}
		}
	}
	[...]
	
}
Пример выбора анимаций смерти по флагу обстоятельств смерти с указанием направления
{squat_dying 
    {if human_kill_flags "front" 
        {if human_kill_flags "blast" 
            {random_select 
                {weight 1 "death_from_explosion_front"} 
                {weight 1 "death_from_explosion_front02"}
                {weight 0.5 "stand_die_back_5_blast"} 
                {weight 1 "stand_die-force_back_1"} 
                {weight 1 "stand_die-force_back_2_far"} 
                {weight 1 "stand_die-force_back_3_far"} 
            } 
        } 
        {random_select 
            {weight 1 "squat_die"} 
            {weight 1 "squat_die_back_1"} 
            {weight 1 "squat_die_back_2"} 
            {weight 1 "squat_die_force-back"} 
        }
    } 
    {if human_kill_flags "back" 
        {if human_kill_flags "blast" 
            {random_select 
                {weight 1 "death_from_explosion_back"} 
                {weight 1 "death_from_explosion_back02"} 
                {weight 0.5 "stand_die_front_1_blast"} 
                {weight 1 "stand_die-force_front_1"} 
                {weight 1 "stand_die-force_front_2"} 
                {weight 1 "stand_die-force_front_3_far"} 
                {weight 1 "stand_die-force_front_4_far"} 
            } 
        }
    }
    [...]
}

Поведение объекта human после смерти

После смерти движок располагает труп по поверхности. Чтобы после завершения анимации смерти положение тела юнита сохранялось без изменений (например, при смерти в окопе), в настройках анимации используется свойство {props "dont_update_placement_after_death"}. Его можно указать в файле properties\animation\human\human_anm.ext или в любом списке настроек анимаций.

Пример настройки анимации смерти в human_anm.ext
{sequence "stand_die_trench_1" {speed 0.9} {props "dont_update_placement_after_death"} [...]}
{sequence "stand_die_trench_2" {speed 0.9} {props "dont_update_placement_after_death"} [...]}
{sequence "stand_die_trench_3" {speed 1.2} {props "dont_update_placement_after_death"} [...]}

Last updated