Difference between revisions of "Prop physics"

From Valve Developer Community
Jump to: navigation, search
(category, extra link, first sentence)
m (Added lang and update formatting.)
 
(73 intermediate revisions by 32 users not shown)
Line 1: Line 1:
[[Category:Entities]]
+
{{lang|Prop physics}}
 +
{{toc-right}}
 +
{{base_point|prop_physics}} It is used to add rigid, [[VPhysics]]-simulated [[model]]s to the world.
  
A '''prop_physics'' is an entity which, when placed in a map and set with a model, creates a physics object.  Physics objects can be picked up with the grav gun, according to their weight, and fully interact with their world in terms of collision, gravity, and world effects.  If you have played a source game in any form you have definetly seen one in action.  Additional settings in the entity include a multiplyer for weight, name field for I/O interactions, damage type (sharp or blunt), etc.  Entities can be flaged to start motion disabled (think sawblades), and additionally flaged to allow or disallow gravity gun pickup, etc.
+
The only value required for prop_physics to work is a path to a model. As long as that model is [[prop_data|physics-enabled]], the correct data will be loaded from it when the map starts. It is possible to change any embedded physics data with the "Override Parameters" keyvalue.
  
If you are creating a multiplayer map, you should use a [[prop_physics_multiplayer]] for most objects instead of a [[prop_physics]].  [[Prop_physics]] is ideal for single-player maps, where accuracy of interactions has no network overhead to worry about.  The detail going into the interaction between objects in multiplayer results in an undesireably large network overhead and thus requires the detail of the interactive aspects of the objects be simplified.  To solve this, Valve created [[prop_physics_multiplayer]], which uses a much simpler structure of the model to do physics interactions, resulting in much better network play. Extremly simple models (simple being anything "boxy" [computer cases, keyboards, small jars, etc]) will not have [[prop_physics_multiplayer]] settings, but this is fine because those models are so simple that making them prop_physics will not have an adverse effect on network trafic.  If you are having a problem in a multiplayer map with a small object that is behaving strangly as a [[prop_physics_multiplayer]], try making it a [[prop_physics]].
+
Physics objects like prop_physics can be [[Parent|parented]], though it is not in the default [[FGD]] and may not function correctly. It is recommended to instead use dynamic physics constraints. See [[Physics Entity Overview]] for more information.
  
Valve has tryed hard to keep you from having to reinvent the chair every time you want a chair in your map.  Models have built in properties that set the material, health, and sounds associated with an object.  If you are dissatisfyed with the built in properties, use a [[prop_physics_override]] to gain more control over the object's properties.  I have yet to require the use of this yet, so someone with more understanding of where this should be used than myself should clean this up.
+
{{tip|Multiplayer maps should use {{ent|prop_physics_multiplayer}} or {{ent|prop_physics_respawnable}}. To create a jointed physics object, use {{ent|prop_ragdoll}}.}}
  
If you are making a multiplayer map and want your breakable objects to come back after a while, use a [[prop_physics_respawnable]].
+
{{altnames|name1=physics_prop|misc=The classname is always changed to {{ent|prop_physics}} on spawn.}}
  
----
+
== Consistency ==
''See Also''
+
{{todo|Move this section to its own article.}}
  
[[List of entities]]
+
Consistency becomes a large problem when dealing with the many prop models that the Source engine provides. From a player's perspective, object interactivity should remain consistent across all the levels of your game / mod. (Why? Shouldn't the level designer have control over this, dependent on the context of the prop's use?) To enforce this, the game-related data of props is stored within the model itself.
  
[[Overview of Prop Types - Description of the various model prop entities.|Overview of Prop Types]]
+
Models that are meant to be physically simulated (chairs, tables, wooden planks, etc) will remove themselves if they are placed as [[prop_static]] or [[prop_dynamic]] entities. Other game-related data, such as mass, "health", gib amount & models, and so on are all stored inside the prop model as well.
 +
 
 +
The method by which they are stored, and guidelines for how to set it up, can be found in the [[Prop Data]] section of the model's QC file.
 +
 
 +
== See also ==
 +
* <code>[[prop_data]]</code>
 +
* [[Prop Types Overview]]
 +
** {{ent|prop_physics_multiplayer}}
 +
** {{ent|prop_physics_respawnable}}
 +
** {{ent|prop_physics_override}}
 +
** {{ent|prop_dynamic}}
 +
** {{ent|prop_static}}
 +
** {{ent|prop_ragdoll}}
 +
 
 +
== Keyvalues ==
 +
{{KV BasePropPhysics}}
 +
{{KV RenderFields}}
 +
 
 +
== Flags ==
 +
{{Fl BasePropPhysics}}
 +
 
 +
== Inputs ==
 +
{{IO|Ignite|Ignite, burst into flames.}}
 +
{{IO|IgniteLifetime|<code>Ignite</code> with the given lifetime. {{todo|Before the flames extinguish, or before health reaches zero?}}|param=float}}
 +
{{IO|IgniteNumHitboxFires|<code>Ignite</code> with the given number of hitbox fires.|param=integer}}
 +
{{IO|IgniteHitboxFireScale|<code>Ignite</code> with the given hitbox fire scale.|param=float}}
 +
{{I BasePropPhysics}}
 +
{{I RenderFields}}
 +
 
 +
== Outputs ==
 +
{{O BasePropPhysics}}
 +
 
 +
[[Category:Physics]]

Latest revision as of 06:33, 16 September 2021

English

prop_physics is a point entity available in all Source games. It is used to add rigid, VPhysics-simulated models to the world.

The only value required for prop_physics to work is a path to a model. As long as that model is physics-enabled, the correct data will be loaded from it when the map starts. It is possible to change any embedded physics data with the "Override Parameters" keyvalue.

Physics objects like prop_physics can be parented, though it is not in the default FGD and may not function correctly. It is recommended to instead use dynamic physics constraints. See Physics Entity Overview for more information.

Tip.png Tip: Multiplayer maps should use prop_physics_multiplayer or prop_physics_respawnable. To create a jointed physics object, use prop_ragdoll.
This entity is also tied to physics_prop. The classname is always changed to prop_physics on spawn.

Consistency

To do: Move this section to its own article.

Consistency becomes a large problem when dealing with the many prop models that the Source engine provides. From a player's perspective, object interactivity should remain consistent across all the levels of your game / mod. (Why? Shouldn't the level designer have control over this, dependent on the context of the prop's use?) To enforce this, the game-related data of props is stored within the model itself.

Models that are meant to be physically simulated (chairs, tables, wooden planks, etc) will remove themselves if they are placed as prop_static or prop_dynamic entities. Other game-related data, such as mass, "health", gib amount & models, and so on are all stored inside the prop model as well.

The method by which they are stored, and guidelines for how to set it up, can be found in the Prop Data section of the model's QC file.

See also

Keyvalues

BasePropPhysics:

Physics Impact Damage Scale (physdamagescale) <float>
Multiplies damage received from physics impacts. 0 means the feature is disabled for backwards compatibility.
Impact damage type (Damagetype) <boolean>
If true (1), damage type is sharp and the object can slice others.
Damaging it Doesn't Push It (nodamageforces) <boolean>
Whether damaging the entity applies force to it.
Scale Factor For Inertia (inertiascale) <float>
Scales the angular mass of an object. Used to hack angular damage and collision response.
Confirm:Doesn't actually affect inertia?
Mass Scale (massscale) <float>
Multiplier for the object's mass.
Override Parameters (overridescript) <string>
A list of physics keyvalues that are usually embedded in the model. Format is key,value,key,value,....
Health Level to Override Motion (damagetoenablemotion) <integer>
If specified, this object will start with motion disabled. Once its health has dropped below this specified amount, it will enable motion.
Physics Impact Force to Override Motion (forcetoenablemotion) <float>
If specified, this object will start motion disabled. Any impact that imparts a force greater than this value will enable motion.

DXLevelChoice:

Minimum DX Level (mindxlevel) <choices>
The entity will not exist if the engine is running outside the given range of DirectX Versions. Replaced by SystemLevelChoice from Left 4 Dead Left 4 Dead onwards.
Warning.png Warning: If these are used, the object may break when the user switches their DirectX settings.
Maximum DX Level (maxdxlevel) <choices>

SystemLevelChoice:

Minimum Effect Details Level (mincpulevel) <choices> (in all games since Left 4 Dead)
Maximum Effect Details Level (maxcpulevel) <choices> (in all games since Left 4 Dead)
Don't render for players with Effect Details levels that exceed the minimum or maximum.



Note.png Note: The key's names is because of thecpu_levelcommand; the command Effect Details uses.
Minimum Shader Details Level (mingpulevel) <choices> (in all games since Left 4 Dead)
Maximum Shader Details Level (maxgpulevel) <choices> (in all games since Left 4 Dead)
Don't render for players with Shader Details levels that exceed the minimum or maximum.


Note.png Note: The key's names is because of thegpu_levelcommand; the command Shader Details uses.

GMODSandbox:

Allow Physics Gun (gmod_allowphysgun) <boolean> (only in Garry's Mod)
If set, players cannot use Physics Gun on this entity.
Sandbox Tool Whitelist (gmod_allowtools) <string> (only in Garry's Mod)
If set, only given tools can be used on this entity. You need to supply the tool class names, the names of the .lua files of those tools. This also includes the context menu properties!

RenderFields:

Render Mode (rendermode) <choices>
Set a non-standard rendering mode on this entity.


Render FX / Transparency (0 - 255) (renderamt) <integer>
Transparency amount, requires a Render Mode other than Normal. 0 is invisible, 255 is fully visible.
Render Color (R G B) (rendercolor) <color255>
Color tint.
Disable Receiving Shadows (disablereceiveshadows) <boolean>
Prevent the entity from receiving shadows on itself.

RenderFXChoices:

Render FX (renderfx) <choices>
Preset pattern of appearance effects.



Flags

BasePropPhysics:

  • 1: Start Asleep.
  • 2: Don't take physics damage.
  • 4: Debris - Don't collide with the player or other debris.
  • 8: Motion Disabled.
  • 64: Enable motion when grabbed by gravity gun.
  • 128: Not affected by rotor wash.
  • 256: Generate output on +use.
  • 512: Prevent pickup.
  • 1024: Prevent motion enable on player bump.
  • 4096: Debris with trigger interaction.
  • 8192: Force server-side (Multiplayer only; see sv_pushaway_clientside_size)
  • 1048576: Gravity gun can ALWAYS pick up. No matter what.

BreakableProp:

  •  [16] : Break on Touch
  •  [32] : Break on Pressure

Inputs

Ignite
Ignite, burst into flames.
IgniteLifetime <float>
Ignite with the given lifetime. To do: Before the flames extinguish, or before health reaches zero?
IgniteNumHitboxFires <integer>
Ignite with the given number of hitbox fires.
IgniteHitboxFireScale <float>
Ignite with the given hitbox fire scale.

BasePropPhysics:

Sleep
Tell the prop to quit moving. Any physics forces (excluding gravity and water buoyancy) will cause the object to resume moving as usual. Sleeping also occurs automatically when the object has no physics forces to keep it awake, and when it is no longer moving a noticeable amount.
Wake
If the object was told to sleep, tell it to start moving again.
DisableMotion
Tell the object to stop moving completely. No physics forces will re-enable motion, not even Wake.
EnableMotion
If the object's motion has been disabled entirely, tell it to resume movement as usual. This will also Wake the object, if it is Sleeping.
DisableFloating
If the object would normally float when in water, tell it to not float. There seems to be no way to re-enable floating behavior, but programming a method to do this should be fairly simple (CALLBACK_DO_FLUID_SIMULATION).


RenderFields:

Alpha <integer>
Sets the entity's transparency to a number from 0 (invisible) to 255 (fully visible). Requires the entity to have its Render Mode (rendermode) set to a number other than 0.
Color <color255>
Sets an RGB color for the entity.

Outputs

BasePropPhysics:

OnMotionEnabled
Fired when motion has been enabled on the prop, either via the Health Level to Override Motion keyvalue or from the EnableMotion input.
OnAwakened
Fired when the prop has woken (force has been applied to it while it was asleep, or the Wake input has been called).
OnOutOfWorld
Fired whenever the object is detected to be outside the world. Specifically, it checks if the object is outside of the world's bounding box or if the object is traveling at over 2000 units per second in any cardinal direction.
OnPlayerUse
Fired when the player has +used the prop.
Note.png Note: This output (but not any of the other pickup-related ones) will fire only if the Generate output on +USE spawnflag is set.
OnPhysGunDrop
Fired when the player has dropped the prop (from either +use or the gravity gun). !activator is the player.
OnPlayerPickup
Fired when the player has picked the prop up with +use or the gravity gun (in Half-Life 2).
OnPhysGunOnlyPickup
Fired when the player has picked the prop up with the gravity gun specifically.