Ru/Prop data: Difference between revisions
Line 131: | Line 131: | ||
* {{todo:ru|подтвердить, что не разрушаемые (здоровье 0) модели могут воспламеняться.}} | * {{todo:ru|подтвердить, что не разрушаемые (здоровье 0) модели могут воспламеняться.}} | ||
=== | === Взрывающиеся объекты === | ||
'' | ''Эти два поля определяют количество жизни, которое отнимет объект во время взрыва.'' | ||
; <code>explosive_damage <float></code> | ; <code>explosive_damage <float></code> | ||
: | : Сила повреждений от взрыва. | ||
; <code>explosive_radius <float></code> | ; <code>explosive_radius <float></code> | ||
: | : Радиус взрыва. Чем дальше от взрыва, тем повреждений меньше. | ||
=== Gibs === | === Gibs === |
Revision as of 11:47, 7 September 2015
prop_data
могут быть использованы, чтобы создавать модели:
- Физические (по умолчанию, модели с
prop_data
не могут быть статикой) - Разбиваемые (с гибсами)
- Поджигаемые
- Взрывающиеся
Их блок KeyValues встроен с помощью QC-команды $keyvalues
.

$surfaceprop
.
$staticprop
.Пример
$keyvalues { prop_data { base Wooden.Small dmg.bullets 0 explosive_damage 100 explosive_radius 50 } }
Здесь мы получаем prop_data из стандартного base_type "Wooden.Small". Затем берём дополнительные ключевые значения, чтобы дать модели три специальные характеристики: она будет пуленепробиваемой, но когда взорвётся, нанесет ущерб до 100 сущностям в радиусе 50 единиц.
Советы
- Вам не нужно что-либо переопределять
- Просто установите
base
, и она будет работать как физический объект. - Не переопределяет уровни здоровья у ваших пропов
- Вместо этого, пусть здоровье будет настроено по-умолчанию. Таким образом, один стул не получит вдвое больший урон, чем другой стул.
- Всегда, когда это возможно, избегайте смешивания типов материалов внутри одного пропа
- Не создавайте полуметаллические, полудеревянные пропы.
- Избегайте скопления нескольких объектов в одном пропе
- Особенно, если вы или Valve по отдельности смоделировали идентичные объекты в разных местах.
- Избегайте движущихся частей или материалов, которые Source не моделирует
- Не помещайте воду в физический аквариум.
Должна ли моя модель быть физической?
В Half-Life 2, Valve старается следовать этим общим правилам:
- Если модель прикреплена к не-физической вещи или поддерживает её...
- То должна быть статикой.
- Если генерирует статичный свет...
- То должна быть статикой.
- Если она настолько велика, что игрок не может двигать её...
- То должна быть статикой.
- В остальном...
- Она должна быть физикой.
Кроме того Valve рассматривает металл и пластик как неуязвимые, но всё же разбиваемые материалы.
Свойства
Тип основы
base <string>
- Даёт модели предопределенный тип prop_data, обеспечивая одним движением все данные, необходимые движку, чтобы создать модель одновременно и физической и разбиваемой. Большинство других команд в блоке prop_data переопределяют значения, унаследованные отсюда.
Общие
health <int>
- Количество повреждений, которые объект должен принять до момента разбивания. 0 означает, что не ломается.
allowstatic <bool>
- Позволяет использовать модель как статику. Для обеспечения согласованности, избегайте по возможности.
physicsmode <choices>
- Задает режим физики, используемый в prop_physics_multiplayer. Может быть переопределен сущностью в Orange Box.
- Твердый, отталкивает игрока.
- Не-твердый, но отталкивается игроком.
- Не-твердый, моделируется только на стороне клиента.
blockLOS <bool>
- Определяет, блокирует ли он линию взгляда NPC. Если не указано, движок игры будет принимать решение на основе размеров модели.
AIWalkable <bool>
- Должны ли боты проходить этот объект? Template:Todo:ru
Модификаторы урона
Модификаторы урона используются для отражения разницы между суммой ущерба, которую объект принимает от различных атак. Не используйте их, чтобы отражать полную силу ущерба. (например, камень устойчив ко всему. Чтобы отразить это, увеличьте здоровье всех камней, не ставьте модификаторы урона ниже.)
dmg.bullets
<float>- Изменяет урон от пуль.
- Бумага, ткань и стекло = 0.5
- Дерево = 0.75
- Flesh = 1.25.
dmg.club
<float>- Урон от тупого предмета.
- Ткань = 0.75
- Бумага и керамика = 1.25
- Дерево = 2.0
dmg.explosive
<float>- Урон от взрывов.
- Бумага, ткань, керамика, флэш и дерево = 1.5
damage_table
<choices>- Таблица повреждений задана в коде C++ (в physics_impact_damage.cpp), и содержит самую подробную информацию о том, какой урон получает объект с различных направлений и силы удара. Только стекло и керамика наследуют один base_type. Template:Tip:ru
glass
- Чрезвычайно хрупкий, разбивается даже при падении.
player
- Template:Todo:ru
player_vehicle
- Template:Todo:ru
npc
- Template:Todo:ru
Воспламеняющиеся объекты
fire_interactions
- это подраздел prop_data
, который отвечает за воспламеняемость. Имеет всего три известных параметра, каждый с одним известным значением:
$keyvalues { prop_data { fire_interactions { ignite halfhealth // Будет самовозгораться при достижении 50% здоровья. explosive_resist yes // Ограничивает урон от взрыва, так что объект загорается вместо того, чтобы разрушиться. flammable yes // Может загораться от огня и взрывов. } } }
Взрывающиеся объекты
Эти два поля определяют количество жизни, которое отнимет объект во время взрыва.
explosive_damage <float>
- Сила повреждений от взрыва.
explosive_radius <float>
- Радиус взрыва. Чем дальше от взрыва, тем повреждений меньше.
Gibs
The prop_data system handles generic gibs. Generic gibs are used for any breakable object that doesn't have custom gibs.
breakable_model <choices>
- Defines the set of generic gibs (as defined in
scripts\propdata.txt
) this prop should break into. Props with a wooden base type gib in this manner already. See also creating custom gibs.WoodChunks
GlassChunks
ConcreteChunks
MetalChunks
breakable_count <int>
- The number of generic breakable gibs to break into. If this is not specified, the engine will generate a sensible number based on the gibs' and model's sizes.
breakable_skin <int>
- Allows you to specify a skin to use on the gib models, which is useful for matching the original prop's skin.
- Only props with Wooden base_types inherit a gib skin (skin 0).
multiplayer_break <choices>
Подтвердить:Determines where the gibs from a prop_physics_multiplayer are simulated.
both
server
client
(default)
- Нужно сделать: Confirm whether breakable_count, breakable_skin and multiplayer_break do not affect custom gibs.
- Нужно сделать: Confirm whether multiplayer_break is set for the breakable model rather than each individual gib itself.
Creating new base types
All base types are defined in scripts\propdata.txt
. If you edit a base type in this file, you will affect the behaviour of all models using it (that do not have their own overrides).
The format of the file is:
PropData.txt
{
<base type name>
{
<any number of the prop_data KVs listed above>
}
}
Valve generally only use their base types to set health and damage modifiers.
Creating generic gibs
Generic gibsets are also defined in propdata.txt. Valve have only four, and only one (WoodChunks
) is assigned to a base type - most models instead specify theirs directly, with breakable_model
.
Defining a new gibset is easy as most of the work is done by the engine:
PropData.txt
{
BreakableModels
{
WoodChunks
{
// Smallest to largest:
models\Gibs\wood_gib01e.mdl 1
models\Gibs\wood_gib01d.mdl 1
models\Gibs\wood_gib01c.mdl 1
models\Gibs\wood_gib01b.mdl 1
models\Gibs\wood_gib01a.mdl 1
}
}
}
Prototyping models
When working on prototypes, or when you don't have modellers handy, it's useful to be able to work around the prop data system's enforcement. To do this, use the prop_physics_override and prop_dynamic_override entities instead of prop_physics and prop_dynamic. A prop_physics_override entity will not remove itself if it is assigned a model that wants to be static (i.e. has no "prop_data" entry in its $keyvalues
.QC section). It will also allow the level designer to set its "health".
The override entities allow you to temporarily use models incorrectly while prototyping, or waiting for a modeller to finish up a new model that has the properties you desire. It is highly recommended that you use Hammer's Entity Report feature to check each of your maps to ensure you have no override entities left when you ship them. Otherwise you may be shipping physics inconsistencies, and players are extremely quick to notice them (the orange bucket won't move when I shoot it on this level, but it did on the previous one).
See also func_physbox for brush-based physics objects.
See also
- prop_data base types
- prop_static, prop_dynamic, prop_physics - common prop entities.
- Prop Types Overview - an article describing various prop types.
- physgun interactions - another QC $keyvalues block that defines some special interactions between prop_physics models and the physcannon.