Переводы блогов проектов от сообщества
October 17, 2021

Правда о Дымовой Шашке

Перевод статьи "The truth about the Smoke Bomb" из официального блога Pre-Fortress 2.


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

Разберёмся с тем, откуда у нас есть код для гранат; в 2012 году исходный код движка Source от 2008 года был слит в сеть, внутри утечки был исходный код TF2 (а также другие неиспользуемые исходные файлы, такие как гранаты). И, что особенно важно здесь, он содержал код дымовой шашки.

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

Однако дымовая шашка на самом деле здесь не производит снаряд, вместо этого она выполняет следующий код:

// дать им состояние дымовой шашки
// ( невидимость в течение X секунд, возможность передвигаться на полной скорости )
// ( атака снимает состояние )
if ( pTFPlayer->CanGoInvisible() )
{
	pTFPlayer->m_Shared.AddCond( TF_COND_SMOKE_BOMB, tf_smoke_bomb_time.GetFloat() );
}

Даже если у вас нет возможности прочитать код, можно посмотреть на комментарии и названия переменных, которые дают понять, что он делает. И снова, снаряд не создается, и даже не существует его модели, он просто применяет к игроку условие невидимости. Указанная консольная команда tf_smoke_bomb_time не найдена нигде в кодовой базе, поэтому продолжительность условия неизвестна.

Если бы вы посмотрели на всю функцию EmitGrenade дымовой бомбы, то заметили бы, что код, добавляющий условие, инкапсулирован с помощью оператора #if, то есть он не компилируется и не будет присутствовать в игре. Некоторые основные предположения о том, почему это так, заключаются в том, что, вероятно, функциональность гранаты была перенесена в другое место в кодовой базе, возможно, это было сделано, когда её перевели с гранаты на часы невидимости.

Также в исходном коде есть неиспользуемый HUD HudSmokeBomb, который должен был отображаться во время невидимости. Он показывает индикатор, указывающий на время, которое у вас осталось, и вместе с ним отображает значок cond_smoke_bomb.

Что касается ассетов, был обнаружен только файл частицsmoke_disappear.pcf. Он был найден в сборке TF2, которая просочилась вместе с бета-версией Postal 3. Этот файл содержал частицу, которая предположительно должна была быть испущена игроком при активации гранаты.

И это в значительной степени вся информация, на самом деле не так уж всё и особенно. Это интересный взгляд на более раннюю версию уже ставшей культовой механики, но не более того. У нас нет никаких планов по возвращению гранаты в PF2, но я оставлю вам отрывок, на котором вы можете увидеть её в действии.