Difference between revisions of "Prop sphere"

From Valve Developer Community
Jump to: navigation, search
(removed a sentence for being completely false. also wondering if the entire TIP is necessary.)
Line 21: Line 21:
== Extending prop_sphere ==
== Extending prop_sphere ==
The following simple addition to <code>CPhysSphere</code>:
* Allows level designers to configure the collision model's radius
[[Extending_Prop_Sphere|Visit this snippet, on how you can improve the existing prop_sphere code.]]
* Fully applies the [[prop_data]] and [[$surfaceprop]] of the chosen [[model]].
=== C++ ===
Open \server\props.cpp and replace the existing <code>CPhysSphere</code> with this:
<source lang=cpp>
class CPhysSphere : public CPhysicsProp
DECLARE_CLASS( CPhysSphere, CPhysicsProp );
float m_fRadius;
bool CreateVPhysics()
SetSolid( SOLID_BBOX );
SetCollisionBounds( -Vector(m_fRadius), Vector(m_fRadius) );
objectparams_t params = g_PhysDefaultObjectParams;
params.pGameData = static_cast<void *>(this);
IPhysicsObject *pPhysicsObject = physenv->CreateSphereObject( m_fRadius, GetModelPtr()->GetRenderHdr()->textureindex, GetAbsOrigin(), GetAbsAngles(), &params, false );
if ( pPhysicsObject )
VPhysicsSetObject( pPhysicsObject );
return true;
LINK_ENTITY_TO_CLASS( prop_sphere, CPhysSphere );
DEFINE_KEYFIELD( m_fRadius, FIELD_FLOAT, "radius"),
=== Extended FGD ===
<source lang=ini>
@PointClass base(BasePropPhysics, RenderFields) studioprop() sphere(radius) = prop_sphere : "Creates a perfect sphere."
radius(float) : "Radius" : 12 : ""
== Stock Keyvalues ==
== Stock Keyvalues ==

Revision as of 13:08, 16 September 2018

prop_sphere is a point entity available in all Source games. It is not in any of Valve's FGDs, however.

It is essentially a prop_physics with a perfectly spherical VPhysics collision model. If you want to create an spherical entity, it is far more efficient to use prop_sphere than try to create a spherical collision mesh!

Tip.png Tip: The only spherical model in Half-Life 2 is models\combine_helicopter\helicopter_bomb01.mdl.
Bug.png Bug: The collision mesh will not be visible with the vcollide_wireframe 1 command.

Stock FGD

If you don't intend to make any changes to the entity's C++ code, use this:

@PointClass base(BasePropPhysics, RenderFields) studioprop() = prop_sphere : "Creates a perfect sphere."

Extending prop_sphere

Visit this snippet, on how you can improve the existing prop_sphere code.

Stock Keyvalues


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.


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: (in all games since Left 4 Dead)

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.


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!


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.


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

Stock Flags


  • 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.


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

Stock Inputs


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.
If the object was told to sleep, tell it to start moving again.
Tell the object to stop moving completely. No physics forces will re-enable motion, not even Wake.
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.
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).


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.

Stock Outputs


Fired when motion has been enabled on the prop, either via the Health Level to Override Motion keyvalue or from the EnableMotion input.
Fired when the prop has woken (force has been applied to it while it was asleep, or the Wake input has been called).
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.
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.
Fired when the player has dropped the prop (from either +use or the gravity gun). !activator is the player.
Fired when the player has picked the prop up with +use or the gravity gun (in Half-Life 2).
Fired when the player has picked the prop up with the gravity gun specifically.