2013-12-02 19:31:46 -08:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Implements many of the entities that control logic flow within a map.
//
//=============================================================================
# include "cbase.h"
# include "entityinput.h"
# include "entityoutput.h"
# include "eventqueue.h"
# include "mathlib/mathlib.h"
# include "globalstate.h"
# include "ndebugoverlay.h"
# include "saverestore_utlvector.h"
# include "vstdlib/random.h"
# include "gameinterface.h"
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
# include "mapbase/variant_tools.h"
# include "mapbase/matchers.h"
# include "mapbase/datadesc_mod.h"
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
# include "activitylist.h"
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
// memdbgon must be the last include file in a .cpp file!!!
# include "tier0/memdbgon.h"
extern CServerGameDLL g_ServerGameDLL ;
2020-05-04 16:25:15 +10:00
//-----------------------------------------------------------------------------
// Purpose: An entity that acts as a container for game scripts.
//-----------------------------------------------------------------------------
# define MAX_SCRIPT_GROUP 16
class CLogicScript : public CPointEntity
{
public :
DECLARE_CLASS ( CLogicScript , CPointEntity ) ;
DECLARE_DATADESC ( ) ;
void RunVScripts ( )
{
/*
EntityGroup < - [ ] ;
function __AppendToScriptGroup ( name )
{
if ( name . len ( ) = = 0 )
{
EntityGroup . append ( null ) ;
}
else
{
local ent = Entities . FindByName ( null , name ) ;
EntityGroup . append ( ent ) ;
if ( ent ! = null )
{
ent . ValidateScriptScope ( ) ;
ent . GetScriptScope ( ) . EntityGroup < - EntityGroup ;
}
}
}
*/
static const char szAddCode [ ] =
{
0x45 , 0x6e , 0x74 , 0x69 , 0x74 , 0x79 , 0x47 , 0x72 , 0x6f , 0x75 , 0x70 , 0x20 , 0x3c , 0x2d , 0x20 , 0x5b , 0x5d , 0x3b , 0x0d , 0x0a ,
0x66 , 0x75 , 0x6e , 0x63 , 0x74 , 0x69 , 0x6f , 0x6e , 0x20 , 0x5f , 0x5f , 0x41 , 0x70 , 0x70 , 0x65 , 0x6e , 0x64 , 0x54 , 0x6f , 0x53 ,
0x63 , 0x72 , 0x69 , 0x70 , 0x74 , 0x47 , 0x72 , 0x6f , 0x75 , 0x70 , 0x28 , 0x20 , 0x6e , 0x61 , 0x6d , 0x65 , 0x20 , 0x29 , 0x20 , 0x0d ,
0x0a , 0x7b , 0x0d , 0x0a , 0x09 , 0x69 , 0x66 , 0x20 , 0x28 , 0x20 , 0x6e , 0x61 , 0x6d , 0x65 , 0x2e , 0x6c , 0x65 , 0x6e , 0x28 , 0x29 ,
0x20 , 0x3d , 0x3d , 0x20 , 0x30 , 0x20 , 0x29 , 0x20 , 0x0d , 0x0a , 0x09 , 0x7b , 0x20 , 0x0d , 0x0a , 0x09 , 0x09 , 0x45 , 0x6e , 0x74 ,
0x69 , 0x74 , 0x79 , 0x47 , 0x72 , 0x6f , 0x75 , 0x70 , 0x2e , 0x61 , 0x70 , 0x70 , 0x65 , 0x6e , 0x64 , 0x28 , 0x20 , 0x6e , 0x75 , 0x6c ,
0x6c , 0x20 , 0x29 , 0x3b , 0x20 , 0x0d , 0x0a , 0x09 , 0x7d , 0x20 , 0x0d , 0x0a , 0x09 , 0x65 , 0x6c , 0x73 , 0x65 , 0x0d , 0x0a , 0x09 ,
0x7b , 0x20 , 0x0d , 0x0a , 0x09 , 0x09 , 0x6c , 0x6f , 0x63 , 0x61 , 0x6c , 0x20 , 0x65 , 0x6e , 0x74 , 0x20 , 0x3d , 0x20 , 0x45 , 0x6e ,
0x74 , 0x69 , 0x74 , 0x69 , 0x65 , 0x73 , 0x2e , 0x46 , 0x69 , 0x6e , 0x64 , 0x42 , 0x79 , 0x4e , 0x61 , 0x6d , 0x65 , 0x28 , 0x20 , 0x6e ,
0x75 , 0x6c , 0x6c , 0x2c , 0x20 , 0x6e , 0x61 , 0x6d , 0x65 , 0x20 , 0x29 , 0x3b , 0x0d , 0x0a , 0x09 , 0x09 , 0x45 , 0x6e , 0x74 , 0x69 ,
0x74 , 0x79 , 0x47 , 0x72 , 0x6f , 0x75 , 0x70 , 0x2e , 0x61 , 0x70 , 0x70 , 0x65 , 0x6e , 0x64 , 0x28 , 0x20 , 0x65 , 0x6e , 0x74 , 0x20 ,
0x29 , 0x3b , 0x0d , 0x0a , 0x09 , 0x09 , 0x69 , 0x66 , 0x20 , 0x28 , 0x20 , 0x65 , 0x6e , 0x74 , 0x20 , 0x21 , 0x3d , 0x20 , 0x6e , 0x75 ,
0x6c , 0x6c , 0x20 , 0x29 , 0x0d , 0x0a , 0x09 , 0x09 , 0x7b , 0x0d , 0x0a , 0x09 , 0x09 , 0x09 , 0x65 , 0x6e , 0x74 , 0x2e , 0x56 , 0x61 ,
0x6c , 0x69 , 0x64 , 0x61 , 0x74 , 0x65 , 0x53 , 0x63 , 0x72 , 0x69 , 0x70 , 0x74 , 0x53 , 0x63 , 0x6f , 0x70 , 0x65 , 0x28 , 0x29 , 0x3b ,
0x0d , 0x0a , 0x09 , 0x09 , 0x09 , 0x65 , 0x6e , 0x74 , 0x2e , 0x47 , 0x65 , 0x74 , 0x53 , 0x63 , 0x72 , 0x69 , 0x70 , 0x74 , 0x53 , 0x63 ,
0x6f , 0x70 , 0x65 , 0x28 , 0x29 , 0x2e , 0x45 , 0x6e , 0x74 , 0x69 , 0x74 , 0x79 , 0x47 , 0x72 , 0x6f , 0x75 , 0x70 , 0x20 , 0x3c , 0x2d ,
0x20 , 0x45 , 0x6e , 0x74 , 0x69 , 0x74 , 0x79 , 0x47 , 0x72 , 0x6f , 0x75 , 0x70 , 0x3b , 0x0d , 0x0a , 0x09 , 0x09 , 0x7d , 0x0d , 0x0a ,
0x09 , 0x7d , 0x0d , 0x0a , 0x7d , 0x0d , 0x0a , 0x00
} ;
int iLastMember ;
for ( iLastMember = MAX_SCRIPT_GROUP - 1 ; iLastMember > = 0 ; iLastMember - - )
{
if ( m_iszGroupMembers [ iLastMember ] ! = NULL_STRING )
{
break ;
}
}
if ( iLastMember > = 0 )
{
HSCRIPT hAddScript = g_pScriptVM - > CompileScript ( szAddCode ) ;
if ( hAddScript )
{
ValidateScriptScope ( ) ;
m_ScriptScope . Run ( hAddScript ) ;
HSCRIPT hAddFunc = m_ScriptScope . LookupFunction ( " __AppendToScriptGroup " ) ;
if ( hAddFunc )
{
for ( int i = 0 ; i < = iLastMember ; i + + )
{
m_ScriptScope . Call ( hAddFunc , NULL , STRING ( m_iszGroupMembers [ i ] ) ) ;
}
g_pScriptVM - > ReleaseFunction ( hAddFunc ) ;
m_ScriptScope . ClearValue ( " __AppendToScriptGroup " ) ;
}
g_pScriptVM - > ReleaseScript ( hAddScript ) ;
}
}
BaseClass : : RunVScripts ( ) ;
}
string_t m_iszGroupMembers [ MAX_SCRIPT_GROUP ] ;
} ;
LINK_ENTITY_TO_CLASS ( logic_script , CLogicScript ) ;
BEGIN_DATADESC ( CLogicScript )
// Silence, Classcheck!
// DEFINE_ARRAY( m_iszGroupMembers, FIELD_STRING, MAX_NUM_TEMPLATES ),
DEFINE_KEYFIELD ( m_iszGroupMembers [ 0 ] , FIELD_STRING , " Group00 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 1 ] , FIELD_STRING , " Group01 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 2 ] , FIELD_STRING , " Group02 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 3 ] , FIELD_STRING , " Group03 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 4 ] , FIELD_STRING , " Group04 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 5 ] , FIELD_STRING , " Group05 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 6 ] , FIELD_STRING , " Group06 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 7 ] , FIELD_STRING , " Group07 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 8 ] , FIELD_STRING , " Group08 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 9 ] , FIELD_STRING , " Group09 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 10 ] , FIELD_STRING , " Group10 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 11 ] , FIELD_STRING , " Group11 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 12 ] , FIELD_STRING , " Group12 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 13 ] , FIELD_STRING , " Group13 " ) ,
DEFINE_KEYFIELD ( m_iszGroupMembers [ 14 ] , FIELD_STRING , " Group14 " ) ,
2020-05-19 22:44:59 +10:00
DEFINE_KEYFIELD ( m_iszGroupMembers [ 15 ] , FIELD_STRING , " Group15 " ) ,
2020-05-04 16:25:15 +10:00
END_DATADESC ( )
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
// Purpose: Compares a set of integer inputs to the one main input
// Outputs true if they are all equivalant, false otherwise
//-----------------------------------------------------------------------------
class CLogicCompareInteger : public CLogicalEntity
{
public :
DECLARE_CLASS ( CLogicCompareInteger , CLogicalEntity ) ;
// outputs
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
COutputVariant m_OnEqual ;
COutputVariant m_OnNotEqual ;
# else
2013-12-02 19:31:46 -08:00
COutputEvent m_OnEqual ;
COutputEvent m_OnNotEqual ;
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
// data
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
variant_t m_iValue ;
bool m_iShouldCompareToValue ;
bool m_bStrLenAllowed = true ;
int DrawDebugTextOverlays ( void ) ;
# else
2013-12-02 19:31:46 -08:00
int m_iIntegerValue ;
int m_iShouldCompareToValue ;
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
DECLARE_DATADESC ( ) ;
CMultiInputVar m_AllIntCompares ;
// Input handlers
void InputValue ( inputdata_t & inputdata ) ;
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
void InputValueNoFire ( inputdata_t & inputdata ) ;
void InputSetIntegerValue ( inputdata_t & inputdata ) ;
# endif
2013-12-02 19:31:46 -08:00
void InputCompareValues ( inputdata_t & inputdata ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_multicompare , CLogicCompareInteger ) ;
BEGIN_DATADESC ( CLogicCompareInteger )
DEFINE_OUTPUT ( m_OnEqual , " OnEqual " ) ,
DEFINE_OUTPUT ( m_OnNotEqual , " OnNotEqual " ) ,
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
DEFINE_KEYVARIANT ( m_iValue , " IntegerValue " ) ,
DEFINE_KEYFIELD ( m_iShouldCompareToValue , FIELD_BOOLEAN , " ShouldComparetoValue " ) ,
DEFINE_KEYFIELD ( m_bStrLenAllowed , FIELD_BOOLEAN , " StrLenAllowed " ) ,
# else
2013-12-02 19:31:46 -08:00
DEFINE_KEYFIELD ( m_iIntegerValue , FIELD_INTEGER , " IntegerValue " ) ,
DEFINE_KEYFIELD ( m_iShouldCompareToValue , FIELD_INTEGER , " ShouldComparetoValue " ) ,
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
DEFINE_FIELD ( m_AllIntCompares , FIELD_INPUT ) ,
DEFINE_INPUTFUNC ( FIELD_INPUT , " InputValue " , InputValue ) ,
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
DEFINE_INPUTFUNC ( FIELD_INPUT , " InputValueNoFire " , InputValueNoFire ) ,
DEFINE_INPUTFUNC ( FIELD_INPUT , " SetReferenceValue " , InputSetIntegerValue ) ,
# endif
2013-12-02 19:31:46 -08:00
DEFINE_INPUTFUNC ( FIELD_INPUT , " CompareValues " , InputCompareValues ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose: Adds to the list of compared values
//-----------------------------------------------------------------------------
void CLogicCompareInteger : : InputValue ( inputdata_t & inputdata )
{
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
// Parse the input value, regardless of field type
inputdata . value = Variant_ParseInput ( inputdata ) ;
# else
2013-12-02 19:31:46 -08:00
// make sure it's an int, if it can't be converted just throw it away
if ( ! inputdata . value . Convert ( FIELD_INTEGER ) )
return ;
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
// update the value list with the new value
m_AllIntCompares . AddValue ( inputdata . value , inputdata . nOutputID ) ;
// if we haven't already this frame, send a message to ourself to update and fire
if ( ! m_AllIntCompares . m_bUpdatedThisFrame )
{
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
// Need to wait for all inputs to arrive
g_EventQueue . AddEvent ( this , " CompareValues " , 0.01 , inputdata . pActivator , this , inputdata . nOutputID ) ;
# else
2013-12-02 19:31:46 -08:00
// TODO: need to add this event with a lower priority, so it gets called after all inputs have arrived
g_EventQueue . AddEvent ( this , " CompareValues " , 0 , inputdata . pActivator , this , inputdata . nOutputID ) ;
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
m_AllIntCompares . m_bUpdatedThisFrame = TRUE ;
}
}
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
//-----------------------------------------------------------------------------
// Purpose: Adds to the list of compared values without firing
//-----------------------------------------------------------------------------
void CLogicCompareInteger : : InputValueNoFire ( inputdata_t & inputdata )
{
// Parse the input value, regardless of field type
inputdata . value = Variant_ParseInput ( inputdata ) ;
// update the value list with the new value
m_AllIntCompares . AddValue ( inputdata . value , inputdata . nOutputID ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Sets our reference value
//-----------------------------------------------------------------------------
void CLogicCompareInteger : : InputSetIntegerValue ( inputdata_t & inputdata )
{
m_iValue = Variant_ParseInput ( inputdata ) ;
}
# endif
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
// Purpose: Forces a recompare
//-----------------------------------------------------------------------------
void CLogicCompareInteger : : InputCompareValues ( inputdata_t & inputdata )
{
m_AllIntCompares . m_bUpdatedThisFrame = FALSE ;
// loop through all the values comparing them
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
variant_t value = m_iValue ;
CMultiInputVar : : inputitem_t * input = m_AllIntCompares . m_InputList ;
if ( ! m_iShouldCompareToValue & & input )
{
value = input - > value ;
}
while ( input )
{
if ( ! Variant_Equal ( value , input - > value , m_bStrLenAllowed ) )
{
// false
m_OnNotEqual . Set ( input - > value , inputdata . pActivator , this ) ;
return ;
}
input = input - > next ;
}
// true! all values equal
m_OnEqual . Set ( value , inputdata . pActivator , this ) ;
# else
2013-12-02 19:31:46 -08:00
int value = m_iIntegerValue ;
CMultiInputVar : : inputitem_t * input = m_AllIntCompares . m_InputList ;
if ( ! m_iShouldCompareToValue & & input )
{
value = input - > value . Int ( ) ;
}
while ( input )
{
if ( input - > value . Int ( ) ! = value )
{
// false
m_OnNotEqual . FireOutput ( inputdata . pActivator , this ) ;
return ;
}
input = input - > next ;
}
// true! all values equal
m_OnEqual . FireOutput ( inputdata . pActivator , this ) ;
2019-08-31 19:28:20 +00:00
# endif
}
# ifdef MAPBASE
//-----------------------------------------------------------------------------
// Purpose: Draw any debug text overlays
// Output : Current text offset from the top
//-----------------------------------------------------------------------------
int CLogicCompareInteger : : DrawDebugTextOverlays ( void )
{
int text_offset = BaseClass : : DrawDebugTextOverlays ( ) ;
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
{
char tempstr [ 512 ] ;
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Reference Value: %s " , m_iValue . GetDebug ( ) ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
int count = 1 ;
CMultiInputVar : : inputitem_t * input = m_AllIntCompares . m_InputList ;
while ( input )
{
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Value %i: %s " , count , input - > value . GetDebug ( ) ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
count + + ;
input = input - > next ;
}
}
return text_offset ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
// Purpose: Timer entity. Fires an output at regular or random intervals.
//-----------------------------------------------------------------------------
//
// Spawnflags and others constants.
//
const int SF_TIMER_UPDOWN = 1 ;
const float LOGIC_TIMER_MIN_INTERVAL = 0.01 ;
class CTimerEntity : public CLogicalEntity
{
public :
DECLARE_CLASS ( CTimerEntity , CLogicalEntity ) ;
void Spawn ( void ) ;
void Think ( void ) ;
void Toggle ( void ) ;
void Enable ( void ) ;
void Disable ( void ) ;
void FireTimer ( void ) ;
int DrawDebugTextOverlays ( void ) ;
// outputs
COutputEvent m_OnTimer ;
COutputEvent m_OnTimerHigh ;
COutputEvent m_OnTimerLow ;
// inputs
void InputToggle ( inputdata_t & inputdata ) ;
void InputEnable ( inputdata_t & inputdata ) ;
void InputDisable ( inputdata_t & inputdata ) ;
void InputFireTimer ( inputdata_t & inputdata ) ;
void InputRefireTime ( inputdata_t & inputdata ) ;
void InputResetTimer ( inputdata_t & inputdata ) ;
void InputAddToTimer ( inputdata_t & inputdata ) ;
void InputSubtractFromTimer ( inputdata_t & inputdata ) ;
int m_iDisabled ;
float m_flRefireTime ;
bool m_bUpDownState ;
int m_iUseRandomTime ;
float m_flLowerRandomBound ;
float m_flUpperRandomBound ;
2020-07-01 19:32:49 +00:00
# ifdef MAPBASE
bool m_bUseBoundsForTimerInputs ;
# endif
2013-12-02 19:31:46 -08:00
// methods
void ResetTimer ( void ) ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_timer , CTimerEntity ) ;
BEGIN_DATADESC ( CTimerEntity )
// Keys
DEFINE_KEYFIELD ( m_iDisabled , FIELD_INTEGER , " StartDisabled " ) ,
DEFINE_KEYFIELD ( m_flRefireTime , FIELD_FLOAT , " RefireTime " ) ,
DEFINE_FIELD ( m_bUpDownState , FIELD_BOOLEAN ) ,
2020-07-01 19:32:49 +00:00
# ifdef MAPBASE
DEFINE_KEYFIELD ( m_bUseBoundsForTimerInputs , FIELD_BOOLEAN , " UseBoundsForTimerInputs " ) ,
# endif
2013-12-02 19:31:46 -08:00
// Inputs
DEFINE_INPUTFUNC ( FIELD_FLOAT , " RefireTime " , InputRefireTime ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " FireTimer " , InputFireTimer ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Enable " , InputEnable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Disable " , InputDisable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Toggle " , InputToggle ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " AddToTimer " , InputAddToTimer ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " ResetTimer " , InputResetTimer ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SubtractFromTimer " , InputSubtractFromTimer ) ,
DEFINE_INPUT ( m_iUseRandomTime , FIELD_INTEGER , " UseRandomTime " ) ,
DEFINE_INPUT ( m_flLowerRandomBound , FIELD_FLOAT , " LowerRandomBound " ) ,
DEFINE_INPUT ( m_flUpperRandomBound , FIELD_FLOAT , " UpperRandomBound " ) ,
// Outputs
DEFINE_OUTPUT ( m_OnTimer , " OnTimer " ) ,
DEFINE_OUTPUT ( m_OnTimerHigh , " OnTimerHigh " ) ,
DEFINE_OUTPUT ( m_OnTimerLow , " OnTimerLow " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : Spawn ( void )
{
if ( ! m_iUseRandomTime & & ( m_flRefireTime < LOGIC_TIMER_MIN_INTERVAL ) )
{
m_flRefireTime = LOGIC_TIMER_MIN_INTERVAL ;
}
if ( ! m_iDisabled & & ( m_flRefireTime > 0 | | m_iUseRandomTime ) )
{
Enable ( ) ;
}
else
{
Disable ( ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : Think ( void )
{
FireTimer ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Sets the time the timerentity will next fire
//-----------------------------------------------------------------------------
void CTimerEntity : : ResetTimer ( void )
{
if ( m_iDisabled )
return ;
if ( m_iUseRandomTime )
{
m_flRefireTime = random - > RandomFloat ( m_flLowerRandomBound , m_flUpperRandomBound ) ;
}
SetNextThink ( gpGlobals - > curtime + m_flRefireTime ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : Enable ( void )
{
m_iDisabled = FALSE ;
ResetTimer ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : Disable ( void )
{
m_iDisabled = TRUE ;
SetNextThink ( TICK_NEVER_THINK ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : Toggle ( void )
{
if ( m_iDisabled )
{
Enable ( ) ;
}
else
{
Disable ( ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : FireTimer ( void )
{
if ( ! m_iDisabled )
{
//
// Up/down timers alternate between two outputs.
//
if ( m_spawnflags & SF_TIMER_UPDOWN )
{
if ( m_bUpDownState )
{
m_OnTimerHigh . FireOutput ( this , this ) ;
}
else
{
m_OnTimerLow . FireOutput ( this , this ) ;
}
m_bUpDownState = ! m_bUpDownState ;
}
//
// Regular timers only fire a single output.
//
else
{
m_OnTimer . FireOutput ( this , this ) ;
}
ResetTimer ( ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : InputEnable ( inputdata_t & inputdata )
{
Enable ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : InputDisable ( inputdata_t & inputdata )
{
Disable ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : InputToggle ( inputdata_t & inputdata )
{
Toggle ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTimerEntity : : InputFireTimer ( inputdata_t & inputdata )
{
FireTimer ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Changes the time interval between timer fires
// Resets the next firing to be time + newRefireTime
// Input : Float refire frequency in seconds.
//-----------------------------------------------------------------------------
void CTimerEntity : : InputRefireTime ( inputdata_t & inputdata )
{
float flRefireInterval = inputdata . value . Float ( ) ;
if ( flRefireInterval < LOGIC_TIMER_MIN_INTERVAL )
{
flRefireInterval = LOGIC_TIMER_MIN_INTERVAL ;
}
if ( m_flRefireTime ! = flRefireInterval )
{
m_flRefireTime = flRefireInterval ;
ResetTimer ( ) ;
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CTimerEntity : : InputResetTimer ( inputdata_t & inputdata )
{
// don't reset the timer if it isn't enabled
if ( m_iDisabled )
return ;
ResetTimer ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Adds to the time interval if the timer is enabled
// Input : Float time to add in seconds
//-----------------------------------------------------------------------------
void CTimerEntity : : InputAddToTimer ( inputdata_t & inputdata )
{
// don't add time if the timer isn't enabled
if ( m_iDisabled )
return ;
// Add time to timer
float flNextThink = GetNextThink ( ) ;
2020-07-01 19:32:49 +00:00
# ifdef MAPBASE
if ( m_bUseBoundsForTimerInputs )
{
// Make sure it's not above our min or max bounds
if ( flNextThink - gpGlobals - > curtime > m_flUpperRandomBound )
return ;
flNextThink + = inputdata . value . Float ( ) ;
flNextThink = clamp ( flNextThink - gpGlobals - > curtime , m_flLowerRandomBound , m_flUpperRandomBound ) ;
SetNextThink ( gpGlobals - > curtime + flNextThink ) ;
}
else
{
SetNextThink ( flNextThink + inputdata . value . Float ( ) ) ;
}
# else
2013-12-02 19:31:46 -08:00
SetNextThink ( flNextThink + = inputdata . value . Float ( ) ) ;
2020-07-01 19:32:49 +00:00
# endif
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
// Purpose: Subtract from the time interval if the timer is enabled
// Input : Float time to subtract in seconds
//-----------------------------------------------------------------------------
void CTimerEntity : : InputSubtractFromTimer ( inputdata_t & inputdata )
{
// don't add time if the timer isn't enabled
if ( m_iDisabled )
return ;
// Subtract time from the timer but don't let the timer go negative
float flNextThink = GetNextThink ( ) ;
2020-07-01 19:32:49 +00:00
# ifdef MAPBASE
if ( m_bUseBoundsForTimerInputs )
{
// Make sure it's not above our min or max bounds
if ( flNextThink - gpGlobals - > curtime < m_flLowerRandomBound )
return ;
flNextThink - = inputdata . value . Float ( ) ;
flNextThink = clamp ( flNextThink - gpGlobals - > curtime , m_flLowerRandomBound , m_flUpperRandomBound ) ;
SetNextThink ( gpGlobals - > curtime + flNextThink ) ;
}
else
{
flNextThink - = inputdata . value . Float ( ) ;
SetNextThink ( ( flNextThink < = gpGlobals - > curtime ) ? gpGlobals - > curtime : flNextThink ) ;
}
# else
2013-12-02 19:31:46 -08:00
if ( ( flNextThink - gpGlobals - > curtime ) < = inputdata . value . Float ( ) )
{
SetNextThink ( gpGlobals - > curtime ) ;
}
else
{
SetNextThink ( flNextThink - = inputdata . value . Float ( ) ) ;
}
2020-07-01 19:32:49 +00:00
# endif
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
// Purpose: Draw any debug text overlays
// Output : Current text offset from the top
//-----------------------------------------------------------------------------
int CTimerEntity : : DrawDebugTextOverlays ( void )
{
int text_offset = BaseClass : : DrawDebugTextOverlays ( ) ;
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
{
char tempstr [ 512 ] ;
// print refire time
Q_snprintf ( tempstr , sizeof ( tempstr ) , " refire interval: %.2f sec " , m_flRefireTime ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
// print seconds to next fire
if ( ! m_iDisabled )
{
float flNextThink = GetNextThink ( ) ;
Q_snprintf ( tempstr , sizeof ( tempstr ) , " firing in: %.2f sec " , flNextThink - gpGlobals - > curtime ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
}
}
return text_offset ;
}
//-----------------------------------------------------------------------------
// Purpose: Computes a line between two entities
//-----------------------------------------------------------------------------
class CLogicLineToEntity : public CLogicalEntity
{
public :
DECLARE_CLASS ( CLogicLineToEntity , CLogicalEntity ) ;
void Activate ( void ) ;
void Spawn ( void ) ;
void Think ( void ) ;
// outputs
COutputVector m_Line ;
DECLARE_DATADESC ( ) ;
private :
string_t m_SourceName ;
EHANDLE m_StartEntity ;
EHANDLE m_EndEntity ;
} ;
LINK_ENTITY_TO_CLASS ( logic_lineto , CLogicLineToEntity ) ;
BEGIN_DATADESC ( CLogicLineToEntity )
// Keys
// target is handled in the base class, stored in field m_target
DEFINE_KEYFIELD ( m_SourceName , FIELD_STRING , " source " ) ,
DEFINE_FIELD ( m_StartEntity , FIELD_EHANDLE ) ,
DEFINE_FIELD ( m_EndEntity , FIELD_EHANDLE ) ,
// Outputs
DEFINE_OUTPUT ( m_Line , " Line " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Find the entities
//-----------------------------------------------------------------------------
void CLogicLineToEntity : : Activate ( void )
{
BaseClass : : Activate ( ) ;
if ( m_target ! = NULL_STRING )
{
m_EndEntity = gEntList . FindEntityByName ( NULL , m_target ) ;
//
// If we were given a bad measure target, just measure sound where we are.
//
if ( ( m_EndEntity = = NULL ) | | ( m_EndEntity - > edict ( ) = = NULL ) )
{
Warning ( " logic_lineto - Target not found or target with no origin! \n " ) ;
m_EndEntity = this ;
}
}
else
{
m_EndEntity = this ;
}
if ( m_SourceName ! = NULL_STRING )
{
m_StartEntity = gEntList . FindEntityByName ( NULL , m_SourceName ) ;
//
// If we were given a bad measure target, just measure sound where we are.
//
if ( ( m_StartEntity = = NULL ) | | ( m_StartEntity - > edict ( ) = = NULL ) )
{
Warning ( " logic_lineto - Source not found or source with no origin! \n " ) ;
m_StartEntity = this ;
}
}
else
{
m_StartEntity = this ;
}
}
//-----------------------------------------------------------------------------
// Find the entities
//-----------------------------------------------------------------------------
void CLogicLineToEntity : : Spawn ( void )
{
SetNextThink ( gpGlobals - > curtime + 0.01f ) ;
}
//-----------------------------------------------------------------------------
// Find the entities
//-----------------------------------------------------------------------------
void CLogicLineToEntity : : Think ( void )
{
CBaseEntity * pDest = m_EndEntity . Get ( ) ;
CBaseEntity * pSrc = m_StartEntity . Get ( ) ;
if ( ! pDest | | ! pSrc | | ! pDest - > edict ( ) | | ! pSrc - > edict ( ) )
{
// Can sleep for a long time, no more lines.
m_Line . Set ( vec3_origin , this , this ) ;
SetNextThink ( gpGlobals - > curtime + 10 ) ;
return ;
}
Vector delta ;
VectorSubtract ( pDest - > GetAbsOrigin ( ) , pSrc - > GetAbsOrigin ( ) , delta ) ;
m_Line . Set ( delta , this , this ) ;
SetNextThink ( gpGlobals - > curtime + 0.01f ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Remaps a given input range to an output range.
//-----------------------------------------------------------------------------
const int SF_MATH_REMAP_IGNORE_OUT_OF_RANGE = 1 ;
const int SF_MATH_REMAP_CLAMP_OUTPUT_TO_RANGE = 2 ;
class CMathRemap : public CLogicalEntity
{
public :
DECLARE_CLASS ( CMathRemap , CLogicalEntity ) ;
void Spawn ( void ) ;
// Keys
float m_flInMin ;
float m_flInMax ;
float m_flOut1 ; // Output value when input is m_fInMin
float m_flOut2 ; // Output value when input is m_fInMax
bool m_bEnabled ;
// Inputs
void InputValue ( inputdata_t & inputdata ) ;
void InputEnable ( inputdata_t & inputdata ) ;
void InputDisable ( inputdata_t & inputdata ) ;
// Outputs
COutputFloat m_OutValue ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( math_remap , CMathRemap ) ;
BEGIN_DATADESC ( CMathRemap )
DEFINE_INPUTFUNC ( FIELD_FLOAT , " InValue " , InputValue ) ,
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_KEYFIELD ( m_flInMin , FIELD_FLOAT , " in1 " ) ,
DEFINE_KEYFIELD ( m_flInMax , FIELD_FLOAT , " in2 " ) ,
DEFINE_KEYFIELD ( m_flOut1 , FIELD_FLOAT , " out1 " ) ,
DEFINE_KEYFIELD ( m_flOut2 , FIELD_FLOAT , " out2 " ) ,
DEFINE_FIELD ( m_bEnabled , FIELD_BOOLEAN ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Enable " , InputEnable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Disable " , InputDisable ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathRemap : : Spawn ( void )
{
//
// Avoid a divide by zero in ValueChanged.
//
if ( m_flInMin = = m_flInMax )
{
m_flInMin = 0 ;
m_flInMax = 1 ;
}
//
// Make sure min and max are set properly relative to one another.
//
if ( m_flInMin > m_flInMax )
{
float flTemp = m_flInMin ;
m_flInMin = m_flInMax ;
m_flInMax = flTemp ;
}
m_bEnabled = true ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathRemap : : InputEnable ( inputdata_t & inputdata )
{
m_bEnabled = true ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathRemap : : InputDisable ( inputdata_t & inputdata )
{
m_bEnabled = false ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler that is called when the input value changes.
//-----------------------------------------------------------------------------
void CMathRemap : : InputValue ( inputdata_t & inputdata )
{
float flValue = inputdata . value . Float ( ) ;
//
// Disallow out-of-range input values to avoid out-of-range output values.
//
float flClampValue = clamp ( flValue , m_flInMin , m_flInMax ) ;
if ( ( flClampValue = = flValue ) | | ! FBitSet ( m_spawnflags , SF_MATH_REMAP_IGNORE_OUT_OF_RANGE ) )
{
//
// Remap the input value to the desired output range and update the output.
//
float flRemappedValue = m_flOut1 + ( ( ( flValue - m_flInMin ) * ( m_flOut2 - m_flOut1 ) ) / ( m_flInMax - m_flInMin ) ) ;
if ( FBitSet ( m_spawnflags , SF_MATH_REMAP_CLAMP_OUTPUT_TO_RANGE ) )
{
flRemappedValue = clamp ( flRemappedValue , m_flOut1 , m_flOut2 ) ;
}
if ( m_bEnabled = = true )
{
m_OutValue . Set ( flRemappedValue , inputdata . pActivator , this ) ;
}
}
}
//-----------------------------------------------------------------------------
// Purpose: Remaps a given input range to an output range.
//-----------------------------------------------------------------------------
const int SF_COLOR_BLEND_IGNORE_OUT_OF_RANGE = 1 ;
class CMathColorBlend : public CLogicalEntity
{
public :
DECLARE_CLASS ( CMathColorBlend , CLogicalEntity ) ;
void Spawn ( void ) ;
// Keys
float m_flInMin ;
float m_flInMax ;
color32 m_OutColor1 ; // Output color when input is m_fInMin
color32 m_OutColor2 ; // Output color when input is m_fInMax
// Inputs
void InputValue ( inputdata_t & inputdata ) ;
// Outputs
COutputColor32 m_OutValue ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( math_colorblend , CMathColorBlend ) ;
BEGIN_DATADESC ( CMathColorBlend )
DEFINE_INPUTFUNC ( FIELD_FLOAT , " InValue " , InputValue ) ,
DEFINE_OUTPUT ( m_OutValue , " OutColor " ) ,
DEFINE_KEYFIELD ( m_flInMin , FIELD_FLOAT , " inmin " ) ,
DEFINE_KEYFIELD ( m_flInMax , FIELD_FLOAT , " inmax " ) ,
DEFINE_KEYFIELD ( m_OutColor1 , FIELD_COLOR32 , " colormin " ) ,
DEFINE_KEYFIELD ( m_OutColor2 , FIELD_COLOR32 , " colormax " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathColorBlend : : Spawn ( void )
{
//
// Avoid a divide by zero in ValueChanged.
//
if ( m_flInMin = = m_flInMax )
{
m_flInMin = 0 ;
m_flInMax = 1 ;
}
//
// Make sure min and max are set properly relative to one another.
//
if ( m_flInMin > m_flInMax )
{
float flTemp = m_flInMin ;
m_flInMin = m_flInMax ;
m_flInMax = flTemp ;
}
}
//-----------------------------------------------------------------------------
// Purpose: Input handler that is called when the input value changes.
//-----------------------------------------------------------------------------
void CMathColorBlend : : InputValue ( inputdata_t & inputdata )
{
float flValue = inputdata . value . Float ( ) ;
//
// Disallow out-of-range input values to avoid out-of-range output values.
//
float flClampValue = clamp ( flValue , m_flInMin , m_flInMax ) ;
if ( ( flClampValue = = flValue ) | | ! FBitSet ( m_spawnflags , SF_COLOR_BLEND_IGNORE_OUT_OF_RANGE ) )
{
//
// Remap the input value to the desired output color and update the output.
//
color32 Color ;
Color . r = m_OutColor1 . r + ( ( ( flClampValue - m_flInMin ) * ( m_OutColor2 . r - m_OutColor1 . r ) ) / ( m_flInMax - m_flInMin ) ) ;
Color . g = m_OutColor1 . g + ( ( ( flClampValue - m_flInMin ) * ( m_OutColor2 . g - m_OutColor1 . g ) ) / ( m_flInMax - m_flInMin ) ) ;
Color . b = m_OutColor1 . b + ( ( ( flClampValue - m_flInMin ) * ( m_OutColor2 . b - m_OutColor1 . b ) ) / ( m_flInMax - m_flInMin ) ) ;
Color . a = m_OutColor1 . a + ( ( ( flClampValue - m_flInMin ) * ( m_OutColor2 . a - m_OutColor1 . a ) ) / ( m_flInMax - m_flInMin ) ) ;
m_OutValue . Set ( Color , inputdata . pActivator , this ) ;
}
}
//-----------------------------------------------------------------------------
// Console command to set the state of a global
//-----------------------------------------------------------------------------
void CC_Global_Set ( const CCommand & args )
{
const char * szGlobal = args [ 1 ] ;
const char * szState = args [ 2 ] ;
if ( szGlobal = = NULL | | szState = = NULL )
{
Msg ( " Usage: global_set <globalname> <state>: Sets the state of the given env_global (0 = OFF, 1 = ON, 2 = DEAD). \n " ) ;
return ;
}
int nState = atoi ( szState ) ;
int nIndex = GlobalEntity_GetIndex ( szGlobal ) ;
if ( nIndex > = 0 )
{
GlobalEntity_SetState ( nIndex , ( GLOBALESTATE ) nState ) ;
}
else
{
GlobalEntity_Add ( szGlobal , STRING ( gpGlobals - > mapname ) , ( GLOBALESTATE ) nState ) ;
}
}
static ConCommand global_set ( " global_set " , CC_Global_Set , " global_set <globalname> <state>: Sets the state of the given env_global (0 = OFF, 1 = ON, 2 = DEAD) . " , FCVAR_CHEAT ) ;
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
//-----------------------------------------------------------------------------
// Console command to set the counter of a global
//-----------------------------------------------------------------------------
void CC_Global_Counter ( const CCommand & args )
{
const char * szGlobal = args [ 1 ] ;
const char * szCounter = args [ 2 ] ;
if ( szGlobal = = NULL | | szCounter = = NULL )
{
Msg ( " Usage: global_counter <globalname> <counter>: Sets the counter of the given env_global. \n " ) ;
return ;
}
int nCounter = atoi ( szCounter ) ;
int nIndex = GlobalEntity_GetIndex ( szGlobal ) ;
if ( nIndex > = 0 )
{
GlobalEntity_SetCounter ( nIndex , nCounter ) ;
}
else
{
nIndex = GlobalEntity_Add ( szGlobal , STRING ( gpGlobals - > mapname ) , GLOBAL_ON ) ;
GlobalEntity_SetCounter ( nIndex , nCounter ) ;
}
}
static ConCommand global_counter ( " global_counter " , CC_Global_Counter , " global_counter <globalname> <counter>: Sets the counter of the given env_global. " , FCVAR_CHEAT ) ;
# endif
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
// Purpose: Holds a global state that can be queried by other entities to change
// their behavior, such as "predistaster".
//-----------------------------------------------------------------------------
const int SF_GLOBAL_SET = 1 ; // Set global state to initial state on spawn
class CEnvGlobal : public CLogicalEntity
{
public :
DECLARE_CLASS ( CEnvGlobal , CLogicalEntity ) ;
void Spawn ( void ) ;
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
bool KeyValue ( const char * szKeyName , const char * szValue ) ;
# endif
2013-12-02 19:31:46 -08:00
// Input handlers
void InputTurnOn ( inputdata_t & inputdata ) ;
void InputTurnOff ( inputdata_t & inputdata ) ;
void InputRemove ( inputdata_t & inputdata ) ;
void InputToggle ( inputdata_t & inputdata ) ;
void InputSetCounter ( inputdata_t & inputdata ) ;
void InputAddToCounter ( inputdata_t & inputdata ) ;
void InputGetCounter ( inputdata_t & inputdata ) ;
int DrawDebugTextOverlays ( void ) ;
DECLARE_DATADESC ( ) ;
COutputInt m_outCounter ;
string_t m_globalstate ;
int m_triggermode ;
int m_initialstate ;
int m_counter ; // A counter value associated with this global.
} ;
BEGIN_DATADESC ( CEnvGlobal )
DEFINE_KEYFIELD ( m_globalstate , FIELD_STRING , " globalstate " ) ,
DEFINE_FIELD ( m_triggermode , FIELD_INTEGER ) ,
DEFINE_KEYFIELD ( m_initialstate , FIELD_INTEGER , " initialstate " ) ,
DEFINE_KEYFIELD ( m_counter , FIELD_INTEGER , " counter " ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_VOID , " TurnOn " , InputTurnOn ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " TurnOff " , InputTurnOff ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Remove " , InputRemove ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Toggle " , InputToggle ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " SetCounter " , InputSetCounter ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " AddToCounter " , InputAddToCounter ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetCounter " , InputGetCounter ) ,
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
DEFINE_OUTPUT ( m_outCounter , " OutCounter " ) ,
# else
2013-12-02 19:31:46 -08:00
DEFINE_OUTPUT ( m_outCounter , " Counter " ) ,
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
END_DATADESC ( )
LINK_ENTITY_TO_CLASS ( env_global , CEnvGlobal ) ;
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvGlobal : : Spawn ( void )
{
if ( ! m_globalstate )
{
UTIL_Remove ( this ) ;
return ;
}
# ifdef HL2_EPISODIC
// if we modify the state of the physics cannon, make sure we precache the ragdoll boogie zap sound
if ( ( m_globalstate ! = NULL_STRING ) & & ( stricmp ( STRING ( m_globalstate ) , " super_phys_gun " ) = = 0 ) )
{
PrecacheScriptSound ( " RagdollBoogie.Zap " ) ;
}
# endif
if ( FBitSet ( m_spawnflags , SF_GLOBAL_SET ) )
{
if ( ! GlobalEntity_IsInTable ( m_globalstate ) )
{
GlobalEntity_Add ( m_globalstate , gpGlobals - > mapname , ( GLOBALESTATE ) m_initialstate ) ;
}
if ( m_counter ! = 0 )
{
GlobalEntity_SetCounter ( m_globalstate , m_counter ) ;
}
}
}
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
//-----------------------------------------------------------------------------
// Purpose: Cache user entity field values until spawn is called.
// Input : szKeyName - Key to handle.
// szValue - Value for key.
// Output : Returns true if the key was handled, false if not.
//-----------------------------------------------------------------------------
bool CEnvGlobal : : KeyValue ( const char * szKeyName , const char * szValue )
{
// Any "Counter" outputs are changed to "OutCounter" before spawning.
if ( FStrEq ( szKeyName , " Counter " ) & & strchr ( szValue , ' , ' ) )
{
return BaseClass : : KeyValue ( " OutCounter " , szValue ) ;
}
return BaseClass : : KeyValue ( szKeyName , szValue ) ;
}
# endif
2013-12-02 19:31:46 -08:00
//------------------------------------------------------------------------------
// Purpose:
//------------------------------------------------------------------------------
void CEnvGlobal : : InputTurnOn ( inputdata_t & inputdata )
{
if ( GlobalEntity_IsInTable ( m_globalstate ) )
{
GlobalEntity_SetState ( m_globalstate , GLOBAL_ON ) ;
}
else
{
GlobalEntity_Add ( m_globalstate , gpGlobals - > mapname , GLOBAL_ON ) ;
}
}
//------------------------------------------------------------------------------
// Purpose:
//------------------------------------------------------------------------------
void CEnvGlobal : : InputTurnOff ( inputdata_t & inputdata )
{
if ( GlobalEntity_IsInTable ( m_globalstate ) )
{
GlobalEntity_SetState ( m_globalstate , GLOBAL_OFF ) ;
}
else
{
GlobalEntity_Add ( m_globalstate , gpGlobals - > mapname , GLOBAL_OFF ) ;
}
}
//------------------------------------------------------------------------------
// Purpose:
//------------------------------------------------------------------------------
void CEnvGlobal : : InputRemove ( inputdata_t & inputdata )
{
if ( GlobalEntity_IsInTable ( m_globalstate ) )
{
GlobalEntity_SetState ( m_globalstate , GLOBAL_DEAD ) ;
}
else
{
GlobalEntity_Add ( m_globalstate , gpGlobals - > mapname , GLOBAL_DEAD ) ;
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void CEnvGlobal : : InputSetCounter ( inputdata_t & inputdata )
{
if ( ! GlobalEntity_IsInTable ( m_globalstate ) )
{
GlobalEntity_Add ( m_globalstate , gpGlobals - > mapname , GLOBAL_ON ) ;
}
GlobalEntity_SetCounter ( m_globalstate , inputdata . value . Int ( ) ) ;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void CEnvGlobal : : InputAddToCounter ( inputdata_t & inputdata )
{
if ( ! GlobalEntity_IsInTable ( m_globalstate ) )
{
GlobalEntity_Add ( m_globalstate , gpGlobals - > mapname , GLOBAL_ON ) ;
}
GlobalEntity_AddToCounter ( m_globalstate , inputdata . value . Int ( ) ) ;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void CEnvGlobal : : InputGetCounter ( inputdata_t & inputdata )
{
if ( ! GlobalEntity_IsInTable ( m_globalstate ) )
{
GlobalEntity_Add ( m_globalstate , gpGlobals - > mapname , GLOBAL_ON ) ;
}
m_outCounter . Set ( GlobalEntity_GetCounter ( m_globalstate ) , inputdata . pActivator , this ) ;
}
//------------------------------------------------------------------------------
// Purpose:
//------------------------------------------------------------------------------
void CEnvGlobal : : InputToggle ( inputdata_t & inputdata )
{
GLOBALESTATE oldState = GlobalEntity_GetState ( m_globalstate ) ;
GLOBALESTATE newState ;
if ( oldState = = GLOBAL_ON )
{
newState = GLOBAL_OFF ;
}
else if ( oldState = = GLOBAL_OFF )
{
newState = GLOBAL_ON ;
}
else
{
return ;
}
if ( GlobalEntity_IsInTable ( m_globalstate ) )
{
GlobalEntity_SetState ( m_globalstate , newState ) ;
}
else
{
GlobalEntity_Add ( m_globalstate , gpGlobals - > mapname , newState ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose: Draw any debug text overlays
// Input :
// Output : Current text offset from the top
//-----------------------------------------------------------------------------
int CEnvGlobal : : DrawDebugTextOverlays ( void )
{
// Skip AIClass debug overlays
int text_offset = CBaseEntity : : DrawDebugTextOverlays ( ) ;
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
{
char tempstr [ 512 ] ;
Q_snprintf ( tempstr , sizeof ( tempstr ) , " State: %s " , STRING ( m_globalstate ) ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
GLOBALESTATE nState = GlobalEntity_GetState ( m_globalstate ) ;
switch ( nState )
{
case GLOBAL_OFF :
Q_strncpy ( tempstr , " Value: OFF " , sizeof ( tempstr ) ) ;
break ;
case GLOBAL_ON :
Q_strncpy ( tempstr , " Value: ON " , sizeof ( tempstr ) ) ;
break ;
case GLOBAL_DEAD :
Q_strncpy ( tempstr , " Value: DEAD " , sizeof ( tempstr ) ) ;
break ;
}
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
}
return text_offset ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
# define MS_MAX_TARGETS 32
const int SF_MULTI_INIT = 1 ;
class CMultiSource : public CLogicalEntity
{
public :
DECLARE_CLASS ( CMultiSource , CLogicalEntity ) ;
void Spawn ( ) ;
bool KeyValue ( const char * szKeyName , const char * szValue ) ;
void Use ( : : CBaseEntity * pActivator , : : CBaseEntity * pCaller , USE_TYPE useType , float value ) ;
int ObjectCaps ( void ) { return ( BaseClass : : ObjectCaps ( ) | FCAP_MASTER ) ; }
bool IsTriggered ( : : CBaseEntity * pActivator ) ;
void Register ( void ) ;
DECLARE_DATADESC ( ) ;
EHANDLE m_rgEntities [ MS_MAX_TARGETS ] ;
int m_rgTriggered [ MS_MAX_TARGETS ] ;
COutputEvent m_OnTrigger ; // Fired when all connections are triggered.
int m_iTotal ;
string_t m_globalstate ;
} ;
BEGIN_DATADESC ( CMultiSource )
//!!!BUGBUG FIX
DEFINE_ARRAY ( m_rgEntities , FIELD_EHANDLE , MS_MAX_TARGETS ) ,
DEFINE_ARRAY ( m_rgTriggered , FIELD_INTEGER , MS_MAX_TARGETS ) ,
DEFINE_FIELD ( m_iTotal , FIELD_INTEGER ) ,
DEFINE_KEYFIELD ( m_globalstate , FIELD_STRING , " globalstate " ) ,
// Function pointers
DEFINE_FUNCTION ( Register ) ,
// Outputs
DEFINE_OUTPUT ( m_OnTrigger , " OnTrigger " ) ,
END_DATADESC ( )
LINK_ENTITY_TO_CLASS ( multisource , CMultiSource ) ;
//-----------------------------------------------------------------------------
// Purpose: Cache user entity field values until spawn is called.
// Input : szKeyName - Key to handle.
// szValue - Value for key.
// Output : Returns true if the key was handled, false if not.
//-----------------------------------------------------------------------------
bool CMultiSource : : KeyValue ( const char * szKeyName , const char * szValue )
{
if ( FStrEq ( szKeyName , " style " ) | |
FStrEq ( szKeyName , " height " ) | |
FStrEq ( szKeyName , " killtarget " ) | |
FStrEq ( szKeyName , " value1 " ) | |
FStrEq ( szKeyName , " value2 " ) | |
FStrEq ( szKeyName , " value3 " ) )
{
}
else
{
return BaseClass : : KeyValue ( szKeyName , szValue ) ;
}
return true ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMultiSource : : Spawn ( )
{
SetNextThink ( gpGlobals - > curtime + 0.1f ) ;
m_spawnflags | = SF_MULTI_INIT ; // Until it's initialized
SetThink ( & CMultiSource : : Register ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
// Input : pActivator -
// pCaller -
// useType -
// value -
//-----------------------------------------------------------------------------
void CMultiSource : : Use ( CBaseEntity * pActivator , CBaseEntity * pCaller , USE_TYPE useType , float value )
{
int i = 0 ;
// Find the entity in our list
while ( i < m_iTotal )
if ( m_rgEntities [ i + + ] = = pCaller )
break ;
// if we didn't find it, report error and leave
if ( i > m_iTotal )
{
Warning ( " MultiSrc: Used by non member %s. \n " , pCaller - > edict ( ) ? pCaller - > GetClassname ( ) : " <logical entity> " ) ;
return ;
}
// CONSIDER: a Use input to the multisource always toggles. Could check useType for ON/OFF/TOGGLE
m_rgTriggered [ i - 1 ] ^ = 1 ;
//
if ( IsTriggered ( pActivator ) )
{
DevMsg ( 2 , " Multisource %s enabled (%d inputs) \n " , GetDebugName ( ) , m_iTotal ) ;
USE_TYPE useType = USE_TOGGLE ;
if ( m_globalstate ! = NULL_STRING )
useType = USE_ON ;
m_OnTrigger . FireOutput ( pActivator , this ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CMultiSource : : IsTriggered ( CBaseEntity * )
{
// Is everything triggered?
int i = 0 ;
// Still initializing?
if ( m_spawnflags & SF_MULTI_INIT )
return 0 ;
while ( i < m_iTotal )
{
if ( m_rgTriggered [ i ] = = 0 )
break ;
i + + ;
}
if ( i = = m_iTotal )
{
if ( ! m_globalstate | | GlobalEntity_GetState ( m_globalstate ) = = GLOBAL_ON )
return 1 ;
}
return 0 ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMultiSource : : Register ( void )
{
CBaseEntity * pTarget = NULL ;
m_iTotal = 0 ;
memset ( m_rgEntities , 0 , MS_MAX_TARGETS * sizeof ( EHANDLE ) ) ;
SetThink ( & CMultiSource : : SUB_DoNothing ) ;
// search for all entities which target this multisource (m_iName)
// dvsents2: port multisource to entity I/O!
pTarget = gEntList . FindEntityByTarget ( NULL , STRING ( GetEntityName ( ) ) ) ;
while ( pTarget & & ( m_iTotal < MS_MAX_TARGETS ) )
{
if ( pTarget )
m_rgEntities [ m_iTotal + + ] = pTarget ;
pTarget = gEntList . FindEntityByTarget ( pTarget , STRING ( GetEntityName ( ) ) ) ;
}
pTarget = gEntList . FindEntityByClassname ( NULL , " multi_manager " ) ;
while ( pTarget & & ( m_iTotal < MS_MAX_TARGETS ) )
{
if ( pTarget & & pTarget - > HasTarget ( GetEntityName ( ) ) )
m_rgEntities [ m_iTotal + + ] = pTarget ;
pTarget = gEntList . FindEntityByClassname ( pTarget , " multi_manager " ) ;
}
m_spawnflags & = ~ SF_MULTI_INIT ;
}
//-----------------------------------------------------------------------------
// Purpose: Holds a value that can be added to and subtracted from.
//-----------------------------------------------------------------------------
class CMathCounter : public CLogicalEntity
{
DECLARE_CLASS ( CMathCounter , CLogicalEntity ) ;
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
protected :
# else
2013-12-02 19:31:46 -08:00
private :
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
float m_flMin ; // Minimum clamp value. If min and max are BOTH zero, no clamping is done.
float m_flMax ; // Maximum clamp value.
bool m_bHitMin ; // Set when we reach or go below our minimum value, cleared if we go above it again.
bool m_bHitMax ; // Set when we reach or exceed our maximum value, cleared if we fall below it again.
bool m_bDisabled ;
bool KeyValue ( const char * szKeyName , const char * szValue ) ;
void Spawn ( void ) ;
int DrawDebugTextOverlays ( void ) ;
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
virtual
# endif
2013-12-02 19:31:46 -08:00
void UpdateOutValue ( CBaseEntity * pActivator , float fNewValue ) ;
// Inputs
void InputAdd ( inputdata_t & inputdata ) ;
void InputDivide ( inputdata_t & inputdata ) ;
void InputMultiply ( inputdata_t & inputdata ) ;
void InputSetValue ( inputdata_t & inputdata ) ;
void InputSetValueNoFire ( inputdata_t & inputdata ) ;
void InputSubtract ( inputdata_t & inputdata ) ;
void InputSetHitMax ( inputdata_t & inputdata ) ;
void InputSetHitMin ( inputdata_t & inputdata ) ;
void InputGetValue ( inputdata_t & inputdata ) ;
void InputEnable ( inputdata_t & inputdata ) ;
void InputDisable ( inputdata_t & inputdata ) ;
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
void InputSetMinValueNoFire ( inputdata_t & inputdata ) ;
void InputSetMaxValueNoFire ( inputdata_t & inputdata ) ;
# endif
2013-12-02 19:31:46 -08:00
// Outputs
COutputFloat m_OutValue ;
COutputFloat m_OnGetValue ; // Used for polling the counter value.
COutputEvent m_OnHitMin ;
COutputEvent m_OnHitMax ;
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
COutputEvent m_OnChangedFromMin ;
COutputEvent m_OnChangedFromMax ;
# endif
2013-12-02 19:31:46 -08:00
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( math_counter , CMathCounter ) ;
BEGIN_DATADESC ( CMathCounter )
DEFINE_FIELD ( m_bHitMax , FIELD_BOOLEAN ) ,
DEFINE_FIELD ( m_bHitMin , FIELD_BOOLEAN ) ,
// Keys
DEFINE_KEYFIELD ( m_flMin , FIELD_FLOAT , " min " ) ,
DEFINE_KEYFIELD ( m_flMax , FIELD_FLOAT , " max " ) ,
DEFINE_KEYFIELD ( m_bDisabled , FIELD_BOOLEAN , " StartDisabled " ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_FLOAT , " Add " , InputAdd ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " Divide " , InputDivide ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " Multiply " , InputMultiply ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetValue " , InputSetValue ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetValueNoFire " , InputSetValueNoFire ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " Subtract " , InputSubtract ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetHitMax " , InputSetHitMax ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetHitMin " , InputSetHitMin ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetValue " , InputGetValue ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Enable " , InputEnable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Disable " , InputDisable ) ,
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetMaxValueNoFire " , InputSetMaxValueNoFire ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetMinValueNoFire " , InputSetMinValueNoFire ) ,
# endif
2013-12-02 19:31:46 -08:00
// Outputs
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_OUTPUT ( m_OnHitMin , " OnHitMin " ) ,
DEFINE_OUTPUT ( m_OnHitMax , " OnHitMax " ) ,
DEFINE_OUTPUT ( m_OnGetValue , " OnGetValue " ) ,
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
DEFINE_OUTPUT ( m_OnChangedFromMin , " OnChangedFromMin " ) ,
DEFINE_OUTPUT ( m_OnChangedFromMax , " OnChangedFromMax " ) ,
# endif
2013-12-02 19:31:46 -08:00
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose: Handles key values from the BSP before spawn is called.
//-----------------------------------------------------------------------------
bool CMathCounter : : KeyValue ( const char * szKeyName , const char * szValue )
{
//
// Set the initial value of the counter.
//
if ( ! stricmp ( szKeyName , " startvalue " ) )
{
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
m_OutValue . Init ( atof ( szValue ) ) ;
# else
2013-12-02 19:31:46 -08:00
m_OutValue . Init ( atoi ( szValue ) ) ;
2019-08-31 19:28:20 +00:00
# endif
2013-12-02 19:31:46 -08:00
return ( true ) ;
}
return ( BaseClass : : KeyValue ( szKeyName , szValue ) ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Called before spawning, after key values have been set.
//-----------------------------------------------------------------------------
void CMathCounter : : Spawn ( void )
{
//
// Make sure max and min are ordered properly or clamp won't work.
//
if ( m_flMin > m_flMax )
{
float flTemp = m_flMax ;
m_flMax = m_flMin ;
m_flMin = flTemp ;
}
//
// Clamp initial value to within the valid range.
//
if ( ( m_flMin ! = 0 ) | | ( m_flMax ! = 0 ) )
{
float flStartValue = clamp ( m_OutValue . Get ( ) , m_flMin , m_flMax ) ;
m_OutValue . Init ( flStartValue ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose: Draw any debug text overlays
// Input :
// Output : Current text offset from the top
//-----------------------------------------------------------------------------
int CMathCounter : : DrawDebugTextOverlays ( void )
{
int text_offset = BaseClass : : DrawDebugTextOverlays ( ) ;
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
{
char tempstr [ 512 ] ;
Q_snprintf ( tempstr , sizeof ( tempstr ) , " min value: %f " , m_flMin ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
Q_snprintf ( tempstr , sizeof ( tempstr ) , " max value: %f " , m_flMax ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
Q_snprintf ( tempstr , sizeof ( tempstr ) , " current value: %f " , m_OutValue . Get ( ) ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
if ( m_bDisabled )
{
Q_snprintf ( tempstr , sizeof ( tempstr ) , " *DISABLED* " ) ;
}
else
{
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Enabled. " ) ;
}
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
}
return text_offset ;
}
//-----------------------------------------------------------------------------
// Change min/max
//-----------------------------------------------------------------------------
void CMathCounter : : InputSetHitMax ( inputdata_t & inputdata )
{
m_flMax = inputdata . value . Float ( ) ;
if ( m_flMax < m_flMin )
{
m_flMin = m_flMax ;
}
UpdateOutValue ( inputdata . pActivator , m_OutValue . Get ( ) ) ;
}
void CMathCounter : : InputSetHitMin ( inputdata_t & inputdata )
{
m_flMin = inputdata . value . Float ( ) ;
if ( m_flMax < m_flMin )
{
m_flMax = m_flMin ;
}
UpdateOutValue ( inputdata . pActivator , m_OutValue . Get ( ) ) ;
}
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
//-----------------------------------------------------------------------------
// Change min/max
//-----------------------------------------------------------------------------
void CMathCounter : : InputSetMaxValueNoFire ( inputdata_t & inputdata )
{
m_flMax = inputdata . value . Float ( ) ;
if ( m_flMax < m_flMin )
{
m_flMin = m_flMax ;
}
}
void CMathCounter : : InputSetMinValueNoFire ( inputdata_t & inputdata )
{
m_flMin = inputdata . value . Float ( ) ;
if ( m_flMax < m_flMin )
{
m_flMax = m_flMin ;
}
}
# endif
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
// Purpose: Input handler for adding to the accumulator value.
// Input : Float value to add.
//-----------------------------------------------------------------------------
void CMathCounter : : InputAdd ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring ADD because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
float fNewValue = m_OutValue . Get ( ) + inputdata . value . Float ( ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for multiplying the current value.
// Input : Float value to multiply the value by.
//-----------------------------------------------------------------------------
void CMathCounter : : InputDivide ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring DIVIDE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
if ( inputdata . value . Float ( ) ! = 0 )
{
float fNewValue = m_OutValue . Get ( ) / inputdata . value . Float ( ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
}
else
{
DevMsg ( 1 , " LEVEL DESIGN ERROR: Divide by zero in math_value \n " ) ;
UpdateOutValue ( inputdata . pActivator , m_OutValue . Get ( ) ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for multiplying the current value.
// Input : Float value to multiply the value by.
//-----------------------------------------------------------------------------
void CMathCounter : : InputMultiply ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring MULTIPLY because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
float fNewValue = m_OutValue . Get ( ) * inputdata . value . Float ( ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for updating the value.
// Input : Float value to set.
//-----------------------------------------------------------------------------
void CMathCounter : : InputSetValue ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring SETVALUE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
UpdateOutValue ( inputdata . pActivator , inputdata . value . Float ( ) ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for updating the value.
// Input : Float value to set.
//-----------------------------------------------------------------------------
void CMathCounter : : InputSetValueNoFire ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring SETVALUENOFIRE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
float flNewValue = inputdata . value . Float ( ) ;
if ( ( m_flMin ! = 0 ) | | ( m_flMax ! = 0 ) )
{
flNewValue = clamp ( flNewValue , m_flMin , m_flMax ) ;
}
m_OutValue . Init ( flNewValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for subtracting from the current value.
// Input : Float value to subtract.
//-----------------------------------------------------------------------------
void CMathCounter : : InputSubtract ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring SUBTRACT because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
float fNewValue = m_OutValue . Get ( ) - inputdata . value . Float ( ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathCounter : : InputGetValue ( inputdata_t & inputdata )
{
float flOutValue = m_OutValue . Get ( ) ;
m_OnGetValue . Set ( flOutValue , inputdata . pActivator , inputdata . pCaller ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathCounter : : InputEnable ( inputdata_t & inputdata )
{
m_bDisabled = false ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathCounter : : InputDisable ( inputdata_t & inputdata )
{
m_bDisabled = true ;
}
//-----------------------------------------------------------------------------
// Purpose: Sets the value to the new value, clamping and firing the output value.
// Input : fNewValue - Value to set.
//-----------------------------------------------------------------------------
void CMathCounter : : UpdateOutValue ( CBaseEntity * pActivator , float fNewValue )
{
if ( ( m_flMin ! = 0 ) | | ( m_flMax ! = 0 ) )
{
//
// Fire an output any time we reach or exceed our maximum value.
//
if ( fNewValue > = m_flMax )
{
if ( ! m_bHitMax )
{
m_bHitMax = true ;
m_OnHitMax . FireOutput ( pActivator , this ) ;
}
}
else
{
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
// Fire an output if we just changed from the maximum value
if ( m_OutValue . Get ( ) = = m_flMax )
{
m_OnChangedFromMax . FireOutput ( pActivator , this ) ;
}
# endif
2013-12-02 19:31:46 -08:00
m_bHitMax = false ;
}
//
// Fire an output any time we reach or go below our minimum value.
//
if ( fNewValue < = m_flMin )
{
if ( ! m_bHitMin )
{
m_bHitMin = true ;
m_OnHitMin . FireOutput ( pActivator , this ) ;
}
}
else
{
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
// Fire an output if we just changed from the maximum value
if ( m_OutValue . Get ( ) = = m_flMin )
{
m_OnChangedFromMin . FireOutput ( pActivator , this ) ;
}
# endif
2013-12-02 19:31:46 -08:00
m_bHitMin = false ;
}
fNewValue = clamp ( fNewValue , m_flMin , m_flMax ) ;
}
m_OutValue . Set ( fNewValue , pActivator , this ) ;
}
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Advanced math_counter with advanced calculation capabilities.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
class CMathCounterAdvanced : public CMathCounter
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DECLARE_CLASS ( CMathCounterAdvanced , CMathCounter ) ;
2013-12-02 19:31:46 -08:00
private :
2019-08-31 19:28:20 +00:00
bool m_bPreserveValue ;
bool m_bAlwaysOutputAsInt ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
float m_flLerpPercent ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
void UpdateOutValue ( CBaseEntity * pActivator , float fNewValue ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
void InputSetValueToPi ( inputdata_t & inputdata ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
void InputPower ( inputdata_t & inputdata ) ;
void InputSquareRoot ( inputdata_t & inputdata ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
void InputRound ( inputdata_t & inputdata ) ;
void InputFloor ( inputdata_t & inputdata ) ;
void InputCeiling ( inputdata_t & inputdata ) ;
void InputTrunc ( inputdata_t & inputdata ) ;
void InputSine ( inputdata_t & inputdata ) ;
void InputCosine ( inputdata_t & inputdata ) ;
void InputTangent ( inputdata_t & inputdata ) ;
void InputRandomInt ( inputdata_t & inputdata ) ;
void InputRandomFloat ( inputdata_t & inputdata ) ;
2013-12-02 19:31:46 -08:00
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
void InputLerpTo ( inputdata_t & inputdata ) ;
2013-12-02 19:31:46 -08:00
DECLARE_DATADESC ( ) ;
} ;
2019-08-31 19:28:20 +00:00
LINK_ENTITY_TO_CLASS ( math_counter_advanced , CMathCounterAdvanced ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
BEGIN_DATADESC ( CMathCounterAdvanced )
2013-12-02 19:31:46 -08:00
// Keys
2019-08-31 19:28:20 +00:00
DEFINE_INPUT ( m_bPreserveValue , FIELD_BOOLEAN , " PreserveValue " ) ,
DEFINE_INPUT ( m_bAlwaysOutputAsInt , FIELD_BOOLEAN , " AlwaysOutputAsInt " ) ,
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
DEFINE_INPUT ( m_flLerpPercent , FIELD_FLOAT , " SetLerpPercent " ) ,
2013-12-02 19:31:46 -08:00
// Inputs
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " SetValueToPi " , InputSetValueToPi ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " SquareRoot " , InputSquareRoot ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " Power " , InputPower ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_INTEGER , " Round " , InputRound ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " Floor " , InputFloor ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " Ceil " , InputCeiling ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " Trunc " , InputTrunc ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " Sin " , InputSine ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Cos " , InputCosine ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Tan " , InputTangent ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_STRING , " RandomInt " , InputRandomInt ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " RandomFloat " , InputRandomFloat ) ,
2013-12-02 19:31:46 -08:00
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
DEFINE_INPUTFUNC ( FIELD_FLOAT , " LerpTo " , InputLerpTo ) ,
2019-08-31 19:28:20 +00:00
END_DATADESC ( )
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for setting the current value to pi.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputSetValueToPi ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring SET TO PI because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
float fNewValue = M_PI ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for calculating the square root of the current value.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputSquareRoot ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DevMsg ( " Math Counter %s ignoring SQUARE ROOT because it is disabled \n " , GetDebugName ( ) ) ;
return ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
float fNewValue = sqrt ( m_OutValue . Get ( ) ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for exponentiation of the current value. Use 2 to square it.
// Input : Integer value to raise the current value's power.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputPower ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DevMsg ( " Math Counter %s ignoring POWER!!! because it is disabled \n " , GetDebugName ( ) ) ;
return ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
float fNewValue = pow ( m_OutValue . Get ( ) , inputdata . value . Int ( ) ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
}
//
// For some reason, I had trouble finding the original math functions at first.
// Then I just randomly stumbled upon them, bright as day.
// Oh well. These might be faster anyway.
//
FORCEINLINE int RoundToNumber ( int input , int number )
{
( input < 0 & & number > 0 ) ? number * = - 1 : 0 ;
int result = ( input + ( number / 2 ) ) ;
result - = ( result % number ) ;
return result ;
}
// Warning: Negative numbers should be ceiled
FORCEINLINE int FloorToNumber ( int input , int number )
{
return ( input - ( input % number ) ) ;
}
FORCEINLINE int CeilToNumber ( int input , int number )
{
( input < 0 & & number > 0 ) ? number * = - 1 : 0 ;
int result = ( input - ( input % number ) ) ;
return result ! = input ? result + number : result ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
FORCEINLINE int TruncToNumber ( int input , int number )
{
//(input < 0 && number > 0) ? number *= -1 : 0;
return ( input - ( input % number ) ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for rounding an integer to the specified number. (e.g. 126 rounding to 10 = 130, 1523 rounding to 5 = 1525)
// Input : Integer value to round the current value to.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputRound ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DevMsg ( " Math Counter %s ignoring ROUND because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
int iMultiple = inputdata . value . Int ( ) ;
int iNewValue ;
if ( iMultiple ! = 0 )
{
// Round to the nearest input number.
iNewValue = RoundToNumber ( m_OutValue . Get ( ) , iMultiple ) ;
2013-12-02 19:31:46 -08:00
}
else
{
2019-08-31 19:28:20 +00:00
// 0 just rounds floats.
iNewValue = static_cast < int > ( m_OutValue . Get ( ) + 0.5f ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for flooring an integer to the specified number. (e.g. 126 flooring to 10 = 120, 1528 flooring to 5 = 1525)
// Input : Integer value to floor the current value to.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputFloor ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DevMsg ( " Math Counter %s ignoring FLOOR because it is disabled \n " , GetDebugName ( ) ) ;
return ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
int iMultiple = inputdata . value . Int ( ) ;
int iNewValue ;
if ( iMultiple ! = 0 )
{
iNewValue = m_OutValue . Get ( ) ;
if ( iNewValue > = 0 )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
// Floor to the nearest input number.
iNewValue = FloorToNumber ( m_OutValue . Get ( ) , iMultiple ) ;
}
else
{
// We have to do it differently for negatives.
iNewValue = CeilToNumber ( m_OutValue . Get ( ) , iMultiple ) ;
2013-12-02 19:31:46 -08:00
}
}
else
{
2019-08-31 19:28:20 +00:00
// 0 just floors floats.
iNewValue = static_cast < int > ( m_OutValue . Get ( ) ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for ceiling an integer to the specified number. (e.g. 126 ceiling to 10 = 130, 1523 ceiling to 50 = 1550)
// Input : Integer value to ceil the current value to.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputCeiling ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring CEIL because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
int iMultiple = inputdata . value . Int ( ) ;
int iNewValue ;
if ( iMultiple ! = 0 )
{
// Ceil to the nearest input number.
iNewValue = CeilToNumber ( m_OutValue . Get ( ) , iMultiple ) ;
}
else
{
// 0 just ceils floats.
iNewValue = static_cast < int > ( m_OutValue . Get ( ) ) + ( m_OutValue . Get ( ) ! = 0 ? 1 : 0 ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for truncating an integer to the specified number. (e.g. 126 rounding to 10 = 120, -1523 rounding to 5 = 1520)
// Input : Integer value to truncate the current value to.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputTrunc ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring TRUNC because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
int iMultiple = inputdata . value . Int ( ) ;
int iNewValue ;
if ( iMultiple ! = 0 )
{
// Floor always truncates negative numbers if we don't tell it not to
iNewValue = FloorToNumber ( m_OutValue . Get ( ) , iMultiple ) ;
}
else
{
// 0 just ceils floats.
iNewValue = static_cast < int > ( m_OutValue . Get ( ) ) ;
if ( iNewValue < 0 )
iNewValue + = 1 ;
}
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for applying sine to the current value.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputSine ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring SINE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
float fNewValue = sin ( m_OutValue . Get ( ) ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for applying cosine to the current value.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputCosine ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring SINE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
float fNewValue = cos ( m_OutValue . Get ( ) ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for applying tangent to the current value.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputTangent ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring SINE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
float fNewValue = tan ( m_OutValue . Get ( ) ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for random int generation.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputRandomInt ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DevMsg ( " Math Counter %s ignoring RANDOMINT because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
int i1 = 0 ;
int i2 = 0 ;
char szInput [ 128 ] ;
Q_strncpy ( szInput , inputdata . value . String ( ) , sizeof ( szInput ) ) ;
char * sSpace = strchr ( szInput , ' ' ) ;
if ( sSpace )
{
i1 = atoi ( szInput ) ;
i2 = atoi ( sSpace + 1 ) ;
2013-12-02 19:31:46 -08:00
}
else
{
2019-08-31 19:28:20 +00:00
// No space, assume anything from 0 to X
i2 = atoi ( szInput ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
float fNewValue = RandomInt ( i1 , i2 ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Input handler for random float generation.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : InputRandomFloat ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bDisabled )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DevMsg ( " Math Counter %s ignoring RANDOMFLOAT because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
float f1 = 0 ;
float f2 = 0 ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
char szInput [ 128 ] ;
Q_strncpy ( szInput , inputdata . value . String ( ) , sizeof ( szInput ) ) ;
char * sSpace = strchr ( szInput , ' ' ) ;
if ( sSpace )
{
f1 = atof ( szInput ) ;
f2 = atof ( sSpace + 1 ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
else
{
// No space, assume anything from 0 to X
f2 = atof ( szInput ) ;
}
float fNewValue = RandomFloat ( f1 , f2 ) ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
2013-12-02 19:31:46 -08:00
}
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
//-----------------------------------------------------------------------------
// Purpose: Input handler for random float generation.
//-----------------------------------------------------------------------------
void CMathCounterAdvanced : : InputLerpTo ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Counter %s ignoring LERPTO because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
float fNewValue = m_OutValue . Get ( ) + ( inputdata . value . Float ( ) - m_OutValue . Get ( ) ) * m_flLerpPercent ;
UpdateOutValue ( inputdata . pActivator , fNewValue ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Sets the value to the new value, clamping and firing the output value.
// Input : fNewValue - Value to set.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathCounterAdvanced : : UpdateOutValue ( CBaseEntity * pActivator , float fNewValue )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_bAlwaysOutputAsInt )
fNewValue = roundf ( fNewValue ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
if ( m_bPreserveValue )
{
//float fOriginal = m_OutValue.Get();
//DevMsg("Preserve Before: %f\n", fOriginal);
//BaseClass::UpdateOutValue(pActivator, fNewValue);
//DevMsg("Preserve After: %f\n", fOriginal);
//m_OutValue.Init(fOriginal);
variant_t var ;
var . SetFloat ( fNewValue ) ;
m_OutValue . FireOutput ( var , pActivator , this ) ;
}
else
{
BaseClass : : UpdateOutValue ( pActivator , fNewValue ) ;
}
}
# endif
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose: Compares a single string input to up to 16 case values, firing an
// output corresponding to the case value that matched, or a default
// output if the input value didn't match any of the case values.
//
// This can also be used to fire a random output from a set of outputs.
//-----------------------------------------------------------------------------
# define MAX_LOGIC_CASES 16
class CLogicCase : public CLogicalEntity
{
DECLARE_CLASS ( CLogicCase , CLogicalEntity ) ;
2013-12-02 19:31:46 -08:00
private :
2019-08-31 19:28:20 +00:00
string_t m_nCase [ MAX_LOGIC_CASES ] ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
bool m_bMultipleCasesAllowed ;
# endif
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
int m_nShuffleCases ;
int m_nLastShuffleCase ;
unsigned char m_uchShuffleCaseMap [ MAX_LOGIC_CASES ] ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
void Spawn ( void ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
int BuildCaseMap ( unsigned char * puchMap ) ;
// Inputs
void InputValue ( inputdata_t & inputdata ) ;
void InputPickRandom ( inputdata_t & inputdata ) ;
void InputPickRandomShuffle ( inputdata_t & inputdata ) ;
2013-12-02 19:31:46 -08:00
// Outputs
2019-08-31 19:28:20 +00:00
COutputEvent m_OnCase [ MAX_LOGIC_CASES ] ; // Fired when the input value matches one of the case values.
COutputVariant m_OnDefault ; // Fired when no match was found.
# ifdef MAPBASE
COutputVariant m_OnUsed ; // Fired when this entity receives any input at all.
# endif
2013-12-02 19:31:46 -08:00
DECLARE_DATADESC ( ) ;
} ;
2019-08-31 19:28:20 +00:00
LINK_ENTITY_TO_CLASS ( logic_case , CLogicCase ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
BEGIN_DATADESC ( CLogicCase )
// Silence, Classcheck!
// DEFINE_ARRAY( m_nCase, FIELD_STRING, MAX_LOGIC_CASES ),
2013-12-02 19:31:46 -08:00
// Keys
2019-08-31 19:28:20 +00:00
DEFINE_KEYFIELD ( m_nCase [ 0 ] , FIELD_STRING , " Case01 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 1 ] , FIELD_STRING , " Case02 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 2 ] , FIELD_STRING , " Case03 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 3 ] , FIELD_STRING , " Case04 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 4 ] , FIELD_STRING , " Case05 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 5 ] , FIELD_STRING , " Case06 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 6 ] , FIELD_STRING , " Case07 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 7 ] , FIELD_STRING , " Case08 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 8 ] , FIELD_STRING , " Case09 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 9 ] , FIELD_STRING , " Case10 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 10 ] , FIELD_STRING , " Case11 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 11 ] , FIELD_STRING , " Case12 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 12 ] , FIELD_STRING , " Case13 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 13 ] , FIELD_STRING , " Case14 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 14 ] , FIELD_STRING , " Case15 " ) ,
DEFINE_KEYFIELD ( m_nCase [ 15 ] , FIELD_STRING , " Case16 " ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
DEFINE_KEYFIELD ( m_bMultipleCasesAllowed , FIELD_BOOLEAN , " MultipleCasesAllowed " ) ,
# endif
DEFINE_FIELD ( m_nShuffleCases , FIELD_INTEGER ) ,
DEFINE_FIELD ( m_nLastShuffleCase , FIELD_INTEGER ) ,
DEFINE_ARRAY ( m_uchShuffleCaseMap , FIELD_CHARACTER , MAX_LOGIC_CASES ) ,
2013-12-02 19:31:46 -08:00
// Inputs
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_INPUT , " InValue " , InputValue ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " PickRandom " , InputPickRandom ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " PickRandomShuffle " , InputPickRandomShuffle ) ,
2013-12-02 19:31:46 -08:00
// Outputs
2019-08-31 19:28:20 +00:00
DEFINE_OUTPUT ( m_OnCase [ 0 ] , " OnCase01 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 1 ] , " OnCase02 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 2 ] , " OnCase03 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 3 ] , " OnCase04 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 4 ] , " OnCase05 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 5 ] , " OnCase06 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 6 ] , " OnCase07 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 7 ] , " OnCase08 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 8 ] , " OnCase09 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 9 ] , " OnCase10 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 10 ] , " OnCase11 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 11 ] , " OnCase12 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 12 ] , " OnCase13 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 13 ] , " OnCase14 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 14 ] , " OnCase15 " ) ,
DEFINE_OUTPUT ( m_OnCase [ 15 ] , " OnCase16 " ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
DEFINE_OUTPUT ( m_OnDefault , " OnDefault " ) ,
# ifdef MAPBASE
DEFINE_OUTPUT ( m_OnUsed , " OnUsed " ) ,
# endif
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
END_DATADESC ( )
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Called before spawning, after key values have been set.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CLogicCase : : Spawn ( void )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_nLastShuffleCase = - 1 ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Evaluates the new input value, firing the appropriate OnCaseX output
// if the input value matches one of the "CaseX" keys.
// Input : Value - Variant value to compare against the values of the case fields.
// We use a variant so that we can convert any input type to a string.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CLogicCase : : InputValue ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
# ifdef MAPBASE
m_OnUsed . Set ( inputdata . value , inputdata . pActivator , this ) ;
bool bFoundCase = false ;
# endif
const char * pszValue = inputdata . value . String ( ) ;
for ( int i = 0 ; i < MAX_LOGIC_CASES ; i + + )
{
# ifdef MAPBASE
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
if ( ( m_nCase [ i ] ! = NULL_STRING ) & & Matcher_Match ( STRING ( m_nCase [ i ] ) , pszValue ) )
2019-08-31 19:28:20 +00:00
{
m_OnCase [ i ] . FireOutput ( inputdata . pActivator , this ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
if ( ! m_bMultipleCasesAllowed )
return ;
else if ( ! bFoundCase )
bFoundCase = true ;
}
# else
if ( ( m_nCase [ i ] ! = NULL_STRING ) & & ! stricmp ( STRING ( m_nCase [ i ] ) , pszValue ) )
{
m_OnCase [ i ] . FireOutput ( inputdata . pActivator , this ) ;
return ;
}
# endif
}
# ifdef MAPBASE
if ( ! bFoundCase )
# endif
m_OnDefault . Set ( inputdata . value , inputdata . pActivator , this ) ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Count the number of valid cases, building a packed array
// that maps 0..NumCases to the actual CaseX values.
//
// This allows our zany mappers to set up cases sparsely if they desire.
// NOTE: assumes pnMap points to an array of MAX_LOGIC_CASES
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
int CLogicCase : : BuildCaseMap ( unsigned char * puchCaseMap )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
memset ( puchCaseMap , 0 , sizeof ( unsigned char ) * MAX_LOGIC_CASES ) ;
int nNumCases = 0 ;
for ( int i = 0 ; i < MAX_LOGIC_CASES ; i + + )
{
if ( m_OnCase [ i ] . NumberOfElements ( ) > 0 )
{
puchCaseMap [ nNumCases ] = ( unsigned char ) i ;
nNumCases + + ;
}
}
return nNumCases ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Makes the case statement choose a case at random.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CLogicCase : : InputPickRandom ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
unsigned char uchCaseMap [ MAX_LOGIC_CASES ] ;
int nNumCases = BuildCaseMap ( uchCaseMap ) ;
//
// Choose a random case from the ones that were set up by the level designer.
//
if ( nNumCases > 0 )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
int nRandom = random - > RandomInt ( 0 , nNumCases - 1 ) ;
int nCase = ( unsigned char ) uchCaseMap [ nRandom ] ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
Assert ( nCase < MAX_LOGIC_CASES ) ;
if ( nCase < MAX_LOGIC_CASES )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_OnCase [ nCase ] . FireOutput ( inputdata . pActivator , this ) ;
2013-12-02 19:31:46 -08:00
}
}
2019-08-31 19:28:20 +00:00
else
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DevMsg ( 1 , " Firing PickRandom input on logic_case %s with no cases set up \n " , GetDebugName ( ) ) ;
2013-12-02 19:31:46 -08:00
}
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Makes the case statement choose a case at random.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CLogicCase : : InputPickRandomShuffle ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
int nAvoidCase = - 1 ;
int nCaseCount = m_nShuffleCases ;
if ( nCaseCount = = 0 )
{
// Starting a new shuffle batch.
nCaseCount = m_nShuffleCases = BuildCaseMap ( m_uchShuffleCaseMap ) ;
if ( ( m_nShuffleCases > 1 ) & & ( m_nLastShuffleCase ! = - 1 ) )
{
// Remove the previously picked case from the case map for this pick only.
// This avoids repeats across shuffle batch boundaries.
nAvoidCase = m_nLastShuffleCase ;
for ( int i = 0 ; i < m_nShuffleCases ; i + + )
{
if ( m_uchShuffleCaseMap [ i ] = = nAvoidCase )
{
unsigned char uchSwap = m_uchShuffleCaseMap [ i ] ;
m_uchShuffleCaseMap [ i ] = m_uchShuffleCaseMap [ nCaseCount - 1 ] ;
m_uchShuffleCaseMap [ nCaseCount - 1 ] = uchSwap ;
nCaseCount - - ;
break ;
}
}
}
}
//
// Choose a random case from the ones that were set up by the level designer.
// Never repeat a case within a shuffle batch, nor consecutively across batches.
//
if ( nCaseCount > 0 )
{
int nRandom = random - > RandomInt ( 0 , nCaseCount - 1 ) ;
int nCase = m_uchShuffleCaseMap [ nRandom ] ;
Assert ( nCase < MAX_LOGIC_CASES ) ;
if ( nCase < MAX_LOGIC_CASES )
{
m_OnCase [ nCase ] . FireOutput ( inputdata . pActivator , this ) ;
}
m_uchShuffleCaseMap [ nRandom ] = m_uchShuffleCaseMap [ m_nShuffleCases - 1 ] ;
m_nShuffleCases - - ;
m_nLastShuffleCase = nCase ;
}
else
{
DevMsg ( 1 , " Firing PickRandom input on logic_case %s with no cases set up \n " , GetDebugName ( ) ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose: Compares a floating point input to a predefined value, firing an
// output to indicate the result of the comparison.
//-----------------------------------------------------------------------------
class CLogicCompare : public CLogicalEntity
{
DECLARE_CLASS ( CLogicCompare , CLogicalEntity ) ;
public :
int DrawDebugTextOverlays ( void ) ;
# ifdef MAPBASE
void Spawn ( ) ;
# endif
private :
// Inputs
void InputSetValue ( inputdata_t & inputdata ) ;
void InputSetValueCompare ( inputdata_t & inputdata ) ;
void InputSetCompareValue ( inputdata_t & inputdata ) ;
# ifdef MAPBASE
void InputSetCompareValueCompare ( inputdata_t & inputdata ) ;
# endif
void InputCompare ( inputdata_t & inputdata ) ;
# ifdef MAPBASE
void DoCompare ( CBaseEntity * pActivator , variant_t value ) ;
# else
void DoCompare ( CBaseEntity * pActivator , float flInValue ) ;
# endif
# ifdef MAPBASE
bool m_bStrLenAllowed = true ;
bool m_bGreaterThanOrEqual ;
variant_t m_InValue ; // Place to hold the last input value for a recomparison.
variant_t m_CompareValue ; // The value to compare the input value against.
# else
float m_flInValue ; // Place to hold the last input value for a recomparison.
float m_flCompareValue ; // The value to compare the input value against.
# endif
// Outputs
# ifdef MAPBASE
COutputVariant m_OnLessThan ; // Fired when the input value is less than the compare value.
COutputVariant m_OnEqualTo ; // Fired when the input value is equal to the compare value.
COutputVariant m_OnNotEqualTo ; // Fired when the input value is not equal to the compare value.
COutputVariant m_OnGreaterThan ; // Fired when the input value is greater than the compare value.
COutputVariant m_OnLessThanOrEqualTo ; // Fired when the input value is less than or equal to the compare value.
COutputVariant m_OnGreaterThanOrEqualTo ; // Fired when the input value is greater than or equal to the compare value.
# else
COutputFloat m_OnLessThan ; // Fired when the input value is less than the compare value.
COutputFloat m_OnEqualTo ; // Fired when the input value is equal to the compare value.
COutputFloat m_OnNotEqualTo ; // Fired when the input value is not equal to the compare value.
COutputFloat m_OnGreaterThan ; // Fired when the input value is greater than the compare value.
# endif
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_compare , CLogicCompare ) ;
BEGIN_DATADESC ( CLogicCompare )
// Keys
# ifdef MAPBASE
DEFINE_KEYFIELD ( m_bStrLenAllowed , FIELD_BOOLEAN , " StrLenAllowed " ) ,
DEFINE_KEYVARIANT ( m_CompareValue , " CompareValue " ) ,
DEFINE_KEYVARIANT ( m_InValue , " InitialValue " ) ,
# else
DEFINE_KEYFIELD ( m_flCompareValue , FIELD_FLOAT , " CompareValue " ) ,
DEFINE_KEYFIELD ( m_flInValue , FIELD_FLOAT , " InitialValue " ) ,
# endif
// Inputs
# ifdef MAPBASE
DEFINE_INPUTFUNC ( FIELD_INPUT , " SetValue " , InputSetValue ) ,
DEFINE_INPUTFUNC ( FIELD_INPUT , " SetValueCompare " , InputSetValueCompare ) ,
DEFINE_INPUTFUNC ( FIELD_INPUT , " SetCompareValue " , InputSetCompareValue ) ,
DEFINE_INPUTFUNC ( FIELD_INPUT , " SetCompareValueCompare " , InputSetCompareValueCompare ) ,
# else
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetValue " , InputSetValue ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetValueCompare " , InputSetValueCompare ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetCompareValue " , InputSetCompareValue ) ,
# endif
DEFINE_INPUTFUNC ( FIELD_VOID , " Compare " , InputCompare ) ,
// Outputs
DEFINE_OUTPUT ( m_OnEqualTo , " OnEqualTo " ) ,
DEFINE_OUTPUT ( m_OnNotEqualTo , " OnNotEqualTo " ) ,
DEFINE_OUTPUT ( m_OnGreaterThan , " OnGreaterThan " ) ,
DEFINE_OUTPUT ( m_OnLessThan , " OnLessThan " ) ,
# ifdef MAPBASE
DEFINE_OUTPUT ( m_OnGreaterThanOrEqualTo , " OnGreaterThanOrEqualTo " ) ,
DEFINE_OUTPUT ( m_OnLessThanOrEqualTo , " OnLessThanOrEqualTo " ) ,
# endif
END_DATADESC ( )
# ifdef MAPBASE
//-----------------------------------------------------------------------------
// Purpose: Input handler for a new input value without performing a comparison.
//-----------------------------------------------------------------------------
void CLogicCompare : : Spawn ( )
{
// Empty initial values are equivalent to 0
if ( m_InValue . FieldType ( ) = = FIELD_STRING & & m_InValue . String ( ) [ 0 ] = = ' \0 ' )
m_InValue . SetInt ( 0 ) ;
BaseClass : : Spawn ( ) ;
}
# endif
//-----------------------------------------------------------------------------
// Purpose: Input handler for a new input value without performing a comparison.
//-----------------------------------------------------------------------------
void CLogicCompare : : InputSetValue ( inputdata_t & inputdata )
{
# ifdef MAPBASE
m_InValue = Variant_ParseInput ( inputdata ) ;
# else
m_flInValue = inputdata . value . Float ( ) ;
# endif
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for a setting a new value and doing the comparison.
//-----------------------------------------------------------------------------
void CLogicCompare : : InputSetValueCompare ( inputdata_t & inputdata )
{
# ifdef MAPBASE
m_InValue = Variant_ParseInput ( inputdata ) ;
DoCompare ( inputdata . pActivator , m_InValue ) ;
# else
m_flInValue = inputdata . value . Float ( ) ;
DoCompare ( inputdata . pActivator , m_flInValue ) ;
# endif
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for a new input value without performing a comparison.
//-----------------------------------------------------------------------------
void CLogicCompare : : InputSetCompareValue ( inputdata_t & inputdata )
{
# ifdef MAPBASE
m_CompareValue = Variant_ParseInput ( inputdata ) ;
# else
m_flCompareValue = inputdata . value . Float ( ) ;
# endif
}
# ifdef MAPBASE
//-----------------------------------------------------------------------------
// Purpose: Input handler for a new input value and doing the comparison.
//-----------------------------------------------------------------------------
void CLogicCompare : : InputSetCompareValueCompare ( inputdata_t & inputdata )
{
m_CompareValue = Variant_ParseInput ( inputdata ) ;
DoCompare ( inputdata . pActivator , m_InValue ) ;
}
# endif
//-----------------------------------------------------------------------------
// Purpose: Input handler for forcing a recompare of the last input value.
//-----------------------------------------------------------------------------
void CLogicCompare : : InputCompare ( inputdata_t & inputdata )
{
# ifdef MAPBASE
DoCompare ( inputdata . pActivator , m_InValue ) ;
# else
DoCompare ( inputdata . pActivator , m_flInValue ) ;
# endif
}
//-----------------------------------------------------------------------------
// Purpose: Compares the input value to the compare value, firing the appropriate
// output(s) based on the comparison result.
// Input : flInValue - Value to compare against the comparison value.
//-----------------------------------------------------------------------------
# ifdef MAPBASE
void CLogicCompare : : DoCompare ( CBaseEntity * pActivator , variant_t value )
{
if ( Variant_Equal ( value , m_CompareValue , m_bStrLenAllowed ) )
{
m_OnEqualTo . Set ( value , pActivator , this ) ;
m_OnLessThanOrEqualTo . Set ( value , pActivator , this ) ;
m_OnGreaterThanOrEqualTo . Set ( value , pActivator , this ) ;
}
else
{
m_OnNotEqualTo . Set ( value , pActivator , this ) ;
if ( Variant_Greater ( m_InValue , m_CompareValue , m_bStrLenAllowed ) )
{
m_OnGreaterThan . Set ( value , pActivator , this ) ;
m_OnGreaterThanOrEqualTo . Set ( value , pActivator , this ) ;
}
else
{
m_OnLessThan . Set ( value , pActivator , this ) ;
m_OnLessThanOrEqualTo . Set ( value , pActivator , this ) ;
}
}
}
# else
void CLogicCompare : : DoCompare ( CBaseEntity * pActivator , float flInValue )
{
if ( flInValue = = m_flCompareValue )
{
m_OnEqualTo . Set ( flInValue , pActivator , this ) ;
}
else
{
m_OnNotEqualTo . Set ( flInValue , pActivator , this ) ;
if ( flInValue > m_flCompareValue )
{
m_OnGreaterThan . Set ( flInValue , pActivator , this ) ;
}
else
{
m_OnLessThan . Set ( flInValue , pActivator , this ) ;
}
}
}
# endif
//-----------------------------------------------------------------------------
// Purpose: Draw any debug text overlays
// Output : Current text offset from the top
//-----------------------------------------------------------------------------
int CLogicCompare : : DrawDebugTextOverlays ( void )
{
int text_offset = BaseClass : : DrawDebugTextOverlays ( ) ;
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
{
char tempstr [ 512 ] ;
// print duration
# ifdef MAPBASE
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Initial Value: %s " , m_InValue . GetDebug ( ) ) ;
# else
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Initial Value: %f " , m_flInValue ) ;
# endif
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
// print hold time
# ifdef MAPBASE
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Compare Value: %s " , m_CompareValue . GetDebug ( ) ) ;
# else
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Compare Value: %f " , m_flCompareValue ) ;
# endif
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
}
return text_offset ;
}
//-----------------------------------------------------------------------------
// Purpose: Tests a boolean value, firing an output to indicate whether the
// value was true or false.
//-----------------------------------------------------------------------------
class CLogicBranch : public CLogicalEntity
{
DECLARE_CLASS ( CLogicBranch , CLogicalEntity ) ;
public :
void UpdateOnRemove ( ) ;
void AddLogicBranchListener ( CBaseEntity * pEntity ) ;
inline bool GetLogicBranchState ( ) ;
virtual int DrawDebugTextOverlays ( void ) ;
private :
enum LogicBranchFire_t
{
LOGIC_BRANCH_FIRE ,
LOGIC_BRANCH_NO_FIRE ,
} ;
// Inputs
void InputSetValue ( inputdata_t & inputdata ) ;
void InputSetValueTest ( inputdata_t & inputdata ) ;
void InputToggle ( inputdata_t & inputdata ) ;
void InputToggleTest ( inputdata_t & inputdata ) ;
void InputTest ( inputdata_t & inputdata ) ;
void UpdateValue ( bool bNewValue , CBaseEntity * pActivator , LogicBranchFire_t eFire ) ;
bool m_bInValue ; // Place to hold the last input value for a future test.
CUtlVector < EHANDLE > m_Listeners ; // A list of logic_branch_listeners that are monitoring us.
// Outputs
COutputEvent m_OnTrue ; // Fired when the value is true.
COutputEvent m_OnFalse ; // Fired when the value is false.
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_branch , CLogicBranch ) ;
BEGIN_DATADESC ( CLogicBranch )
// Keys
DEFINE_KEYFIELD ( m_bInValue , FIELD_BOOLEAN , " InitialValue " ) ,
DEFINE_UTLVECTOR ( m_Listeners , FIELD_EHANDLE ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_BOOLEAN , " SetValue " , InputSetValue ) ,
DEFINE_INPUTFUNC ( FIELD_BOOLEAN , " SetValueTest " , InputSetValueTest ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Toggle " , InputToggle ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " ToggleTest " , InputToggleTest ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Test " , InputTest ) ,
// Outputs
DEFINE_OUTPUT ( m_OnTrue , " OnTrue " ) ,
DEFINE_OUTPUT ( m_OnFalse , " OnFalse " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicBranch : : UpdateOnRemove ( )
{
for ( int i = 0 ; i < m_Listeners . Count ( ) ; i + + )
{
CBaseEntity * pEntity = m_Listeners . Element ( i ) . Get ( ) ;
if ( pEntity )
{
g_EventQueue . AddEvent ( this , " _OnLogicBranchRemoved " , 0 , this , this ) ;
}
}
BaseClass : : UpdateOnRemove ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler to set a new input value without firing outputs.
// Input : Boolean value to set.
//-----------------------------------------------------------------------------
void CLogicBranch : : InputSetValue ( inputdata_t & inputdata )
{
UpdateValue ( inputdata . value . Bool ( ) , inputdata . pActivator , LOGIC_BRANCH_NO_FIRE ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler to set a new input value and fire appropriate outputs.
// Input : Boolean value to set.
//-----------------------------------------------------------------------------
void CLogicBranch : : InputSetValueTest ( inputdata_t & inputdata )
{
UpdateValue ( inputdata . value . Bool ( ) , inputdata . pActivator , LOGIC_BRANCH_FIRE ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for toggling the boolean value without firing outputs.
//-----------------------------------------------------------------------------
void CLogicBranch : : InputToggle ( inputdata_t & inputdata )
{
UpdateValue ( ! m_bInValue , inputdata . pActivator , LOGIC_BRANCH_NO_FIRE ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for toggling the boolean value and then firing the
// appropriate output based on the new value.
//-----------------------------------------------------------------------------
void CLogicBranch : : InputToggleTest ( inputdata_t & inputdata )
{
UpdateValue ( ! m_bInValue , inputdata . pActivator , LOGIC_BRANCH_FIRE ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for forcing a test of the last input value.
//-----------------------------------------------------------------------------
void CLogicBranch : : InputTest ( inputdata_t & inputdata )
{
UpdateValue ( m_bInValue , inputdata . pActivator , LOGIC_BRANCH_FIRE ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Tests the last input value, firing the appropriate output based on
// the test result.
// Input : bInValue -
//-----------------------------------------------------------------------------
void CLogicBranch : : UpdateValue ( bool bNewValue , CBaseEntity * pActivator , LogicBranchFire_t eFire )
{
if ( m_bInValue ! = bNewValue )
{
m_bInValue = bNewValue ;
for ( int i = 0 ; i < m_Listeners . Count ( ) ; i + + )
{
CBaseEntity * pEntity = m_Listeners . Element ( i ) . Get ( ) ;
if ( pEntity )
{
g_EventQueue . AddEvent ( pEntity , " _OnLogicBranchChanged " , 0 , this , this ) ;
}
}
}
if ( eFire = = LOGIC_BRANCH_FIRE )
{
if ( m_bInValue )
{
m_OnTrue . FireOutput ( pActivator , this ) ;
}
else
{
m_OnFalse . FireOutput ( pActivator , this ) ;
}
}
}
//-----------------------------------------------------------------------------
// Purpose: Accessor for logic_branchlist to test the value of the branch on demand.
//-----------------------------------------------------------------------------
bool CLogicBranch : : GetLogicBranchState ( )
{
return m_bInValue ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicBranch : : AddLogicBranchListener ( CBaseEntity * pEntity )
{
if ( m_Listeners . Find ( pEntity ) = = - 1 )
{
m_Listeners . AddToTail ( pEntity ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
int CLogicBranch : : DrawDebugTextOverlays ( void )
{
int text_offset = BaseClass : : DrawDebugTextOverlays ( ) ;
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
{
char tempstr [ 512 ] ;
// print refire time
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Branch value: %s " , ( m_bInValue ) ? " TRUE " : " FALSE " ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
}
return text_offset ;
}
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
# ifdef MAPBASE
extern void MapbaseGameLog_Record ( const char * szContext ) ;
extern ConVar mapbase_game_log_on_autosave ;
# endif
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose: Autosaves when triggered
//-----------------------------------------------------------------------------
class CLogicAutosave : public CLogicalEntity
{
DECLARE_CLASS ( CLogicAutosave , CLogicalEntity ) ;
protected :
// Inputs
void InputSave ( inputdata_t & inputdata ) ;
void InputSaveDangerous ( inputdata_t & inputdata ) ;
void InputSetMinHitpointsThreshold ( inputdata_t & inputdata ) ;
DECLARE_DATADESC ( ) ;
bool m_bForceNewLevelUnit ;
int m_minHitPoints ;
int m_minHitPointsToCommit ;
} ;
LINK_ENTITY_TO_CLASS ( logic_autosave , CLogicAutosave ) ;
BEGIN_DATADESC ( CLogicAutosave )
DEFINE_KEYFIELD ( m_bForceNewLevelUnit , FIELD_BOOLEAN , " NewLevelUnit " ) ,
DEFINE_KEYFIELD ( m_minHitPoints , FIELD_INTEGER , " MinimumHitPoints " ) ,
DEFINE_KEYFIELD ( m_minHitPointsToCommit , FIELD_INTEGER , " MinHitPointsToCommit " ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_VOID , " Save " , InputSave ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SaveDangerous " , InputSaveDangerous ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " SetMinHitpointsThreshold " , InputSetMinHitpointsThreshold ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose: Save!
//-----------------------------------------------------------------------------
void CLogicAutosave : : InputSave ( inputdata_t & inputdata )
{
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
# ifdef MAPBASE
if ( mapbase_game_log_on_autosave . GetBool ( ) )
{
MapbaseGameLog_Record ( " autosave " ) ;
}
# endif
2019-08-31 19:28:20 +00:00
if ( m_bForceNewLevelUnit )
{
engine - > ClearSaveDir ( ) ;
}
engine - > ServerCommand ( " autosave \n " ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Save safely!
//-----------------------------------------------------------------------------
void CLogicAutosave : : InputSaveDangerous ( inputdata_t & inputdata )
{
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
# ifdef MAPBASE
if ( mapbase_game_log_on_autosave . GetBool ( ) )
{
MapbaseGameLog_Record ( " autosave_dangerous " ) ;
}
# endif
2019-08-31 19:28:20 +00:00
CBasePlayer * pPlayer = UTIL_PlayerByIndex ( 1 ) ;
if ( g_ServerGameDLL . m_fAutoSaveDangerousTime ! = 0.0f & & g_ServerGameDLL . m_fAutoSaveDangerousTime > = gpGlobals - > curtime )
{
// A previous dangerous auto save was waiting to become safe
if ( pPlayer - > GetDeathTime ( ) = = 0.0f | | pPlayer - > GetDeathTime ( ) > gpGlobals - > curtime )
{
// The player isn't dead, so make the dangerous auto save safe
engine - > ServerCommand ( " autosavedangerousissafe \n " ) ;
}
}
if ( m_bForceNewLevelUnit )
{
engine - > ClearSaveDir ( ) ;
}
if ( pPlayer - > GetHealth ( ) > = m_minHitPoints )
{
engine - > ServerCommand ( " autosavedangerous \n " ) ;
g_ServerGameDLL . m_fAutoSaveDangerousTime = gpGlobals - > curtime + inputdata . value . Float ( ) ;
// Player must have this much health when we go to commit, or we don't commit.
g_ServerGameDLL . m_fAutoSaveDangerousMinHealthToCommit = m_minHitPointsToCommit ;
}
}
//-----------------------------------------------------------------------------
// Purpose: Autosaves when triggered
//-----------------------------------------------------------------------------
class CLogicActiveAutosave : public CLogicAutosave
{
DECLARE_CLASS ( CLogicActiveAutosave , CLogicAutosave ) ;
void InputEnable ( inputdata_t & inputdata )
{
m_flStartTime = - 1 ;
SetThink ( & CLogicActiveAutosave : : SaveThink ) ;
SetNextThink ( gpGlobals - > curtime ) ;
}
void InputDisable ( inputdata_t & inputdata )
{
SetThink ( NULL ) ;
}
void SaveThink ( )
{
CBasePlayer * pPlayer = UTIL_GetLocalPlayer ( ) ;
if ( pPlayer )
{
if ( m_flStartTime < 0 )
{
if ( pPlayer - > GetHealth ( ) < = m_minHitPoints )
{
m_flStartTime = gpGlobals - > curtime ;
}
}
else
{
if ( pPlayer - > GetHealth ( ) > = m_TriggerHitPoints )
{
inputdata_t inputdata ;
DevMsg ( 2 , " logic_active_autosave (%s, %d) triggered \n " , STRING ( GetEntityName ( ) ) , entindex ( ) ) ;
if ( ! m_flDangerousTime )
{
InputSave ( inputdata ) ;
}
else
{
inputdata . value . SetFloat ( m_flDangerousTime ) ;
InputSaveDangerous ( inputdata ) ;
}
m_flStartTime = - 1 ;
}
else if ( m_flTimeToTrigger > 0 & & gpGlobals - > curtime - m_flStartTime > m_flTimeToTrigger )
{
m_flStartTime = - 1 ;
}
}
}
float thinkInterval = ( m_flStartTime < 0 ) ? 1.0 : 0.5 ;
SetNextThink ( gpGlobals - > curtime + thinkInterval ) ;
}
DECLARE_DATADESC ( ) ;
int m_TriggerHitPoints ;
float m_flTimeToTrigger ;
float m_flStartTime ;
float m_flDangerousTime ;
} ;
LINK_ENTITY_TO_CLASS ( logic_active_autosave , CLogicActiveAutosave ) ;
BEGIN_DATADESC ( CLogicActiveAutosave )
DEFINE_KEYFIELD ( m_TriggerHitPoints , FIELD_INTEGER , " TriggerHitPoints " ) ,
DEFINE_KEYFIELD ( m_flTimeToTrigger , FIELD_FLOAT , " TimeToTrigger " ) ,
DEFINE_KEYFIELD ( m_flDangerousTime , FIELD_FLOAT , " DangerousTime " ) ,
DEFINE_FIELD ( m_flStartTime , FIELD_TIME ) ,
DEFINE_THINKFUNC ( SaveThink ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Enable " , InputEnable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Disable " , InputDisable ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose: Keyfield set func
//-----------------------------------------------------------------------------
void CLogicAutosave : : InputSetMinHitpointsThreshold ( inputdata_t & inputdata )
{
int setTo = inputdata . value . Int ( ) ;
AssertMsg1 ( setTo > = 0 & & setTo < = 100 , " Tried to set autosave MinHitpointsThreshold to %d! \n " , setTo ) ;
m_minHitPoints = setTo ;
}
// Finds the named physics object. If no name, returns the world
// If a name is specified and an object not found - errors are reported
IPhysicsObject * FindPhysicsObjectByNameOrWorld ( string_t name , CBaseEntity * pErrorEntity )
{
if ( ! name )
return g_PhysWorldObject ;
IPhysicsObject * pPhysics = FindPhysicsObjectByName ( name . ToCStr ( ) , pErrorEntity ) ;
if ( ! pPhysics )
{
DevWarning ( " %s: can't find %s \n " , pErrorEntity - > GetClassname ( ) , name . ToCStr ( ) ) ;
}
return pPhysics ;
}
class CLogicCollisionPair : public CLogicalEntity
{
DECLARE_CLASS ( CLogicCollisionPair , CLogicalEntity ) ;
public :
2019-09-28 22:56:52 +00:00
# ifdef MAPBASE
// !activator, !caller, etc. support
void EnableCollisions ( bool bEnable , CBaseEntity * pActivator = NULL , CBaseEntity * pCaller = NULL )
{
IPhysicsObject * pPhysics0 = NULL ;
IPhysicsObject * pPhysics1 = NULL ;
CBaseEntity * pEntity0 = gEntList . FindEntityByName ( NULL , m_nameAttach1 , this , pActivator , pCaller ) ;
if ( pEntity0 )
pPhysics0 = pEntity0 - > VPhysicsGetObject ( ) ;
CBaseEntity * pEntity1 = gEntList . FindEntityByName ( NULL , m_nameAttach2 , this , pActivator , pCaller ) ;
if ( pEntity1 )
pPhysics1 = pEntity1 - > VPhysicsGetObject ( ) ;
# else
2019-08-31 19:28:20 +00:00
void EnableCollisions ( bool bEnable )
{
IPhysicsObject * pPhysics0 = FindPhysicsObjectByNameOrWorld ( m_nameAttach1 , this ) ;
IPhysicsObject * pPhysics1 = FindPhysicsObjectByNameOrWorld ( m_nameAttach2 , this ) ;
2019-09-28 22:56:52 +00:00
# endif
2019-08-31 19:28:20 +00:00
// need two different objects to do anything
if ( pPhysics0 & & pPhysics1 & & pPhysics0 ! = pPhysics1 )
{
m_disabled = ! bEnable ;
m_succeeded = true ;
if ( bEnable )
{
PhysEnableEntityCollisions ( pPhysics0 , pPhysics1 ) ;
}
else
{
PhysDisableEntityCollisions ( pPhysics0 , pPhysics1 ) ;
}
}
else
{
m_succeeded = false ;
}
}
void Activate ( void )
{
if ( m_disabled )
{
EnableCollisions ( false ) ;
}
BaseClass : : Activate ( ) ;
}
void InputDisableCollisions ( inputdata_t & inputdata )
{
if ( m_succeeded & & m_disabled )
return ;
2019-09-28 22:56:52 +00:00
# ifdef MAPBASE
EnableCollisions ( false , inputdata . pActivator , inputdata . pCaller ) ;
# else
2019-08-31 19:28:20 +00:00
EnableCollisions ( false ) ;
2019-09-28 22:56:52 +00:00
# endif
2019-08-31 19:28:20 +00:00
}
void InputEnableCollisions ( inputdata_t & inputdata )
{
if ( m_succeeded & & ! m_disabled )
return ;
2019-09-28 22:56:52 +00:00
# ifdef MAPBASE
EnableCollisions ( true , inputdata . pActivator , inputdata . pCaller ) ;
# else
2019-08-31 19:28:20 +00:00
EnableCollisions ( true ) ;
2019-09-28 22:56:52 +00:00
# endif
2019-08-31 19:28:20 +00:00
}
// If Activate() becomes PostSpawn()
//void OnRestore() { Activate(); }
DECLARE_DATADESC ( ) ;
private :
string_t m_nameAttach1 ;
string_t m_nameAttach2 ;
bool m_disabled ;
bool m_succeeded ;
} ;
BEGIN_DATADESC ( CLogicCollisionPair )
DEFINE_KEYFIELD ( m_nameAttach1 , FIELD_STRING , " attach1 " ) ,
DEFINE_KEYFIELD ( m_nameAttach2 , FIELD_STRING , " attach2 " ) ,
DEFINE_KEYFIELD ( m_disabled , FIELD_BOOLEAN , " startdisabled " ) ,
DEFINE_FIELD ( m_succeeded , FIELD_BOOLEAN ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_VOID , " DisableCollisions " , InputDisableCollisions ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " EnableCollisions " , InputEnableCollisions ) ,
END_DATADESC ( )
LINK_ENTITY_TO_CLASS ( logic_collision_pair , CLogicCollisionPair ) ;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
# define MAX_LOGIC_BRANCH_NAMES 16
class CLogicBranchList : public CLogicalEntity
{
DECLARE_CLASS ( CLogicBranchList , CLogicalEntity ) ;
virtual void Spawn ( ) ;
virtual void Activate ( ) ;
virtual int DrawDebugTextOverlays ( void ) ;
private :
enum LogicBranchListenerLastState_t
{
LOGIC_BRANCH_LISTENER_NOT_INIT = 0 ,
LOGIC_BRANCH_LISTENER_ALL_TRUE ,
LOGIC_BRANCH_LISTENER_ALL_FALSE ,
LOGIC_BRANCH_LISTENER_MIXED ,
} ;
void DoTest ( CBaseEntity * pActivator ) ;
string_t m_nLogicBranchNames [ MAX_LOGIC_BRANCH_NAMES ] ;
CUtlVector < EHANDLE > m_LogicBranchList ;
LogicBranchListenerLastState_t m_eLastState ;
// Inputs
void Input_OnLogicBranchRemoved ( inputdata_t & inputdata ) ;
void Input_OnLogicBranchChanged ( inputdata_t & inputdata ) ;
void InputTest ( inputdata_t & inputdata ) ;
// Outputs
COutputEvent m_OnAllTrue ; // Fired when all the registered logic_branches become true.
COutputEvent m_OnAllFalse ; // Fired when all the registered logic_branches become false.
COutputEvent m_OnMixed ; // Fired when one of the registered logic branches changes, but not all are true or false.
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_branch_listener , CLogicBranchList ) ;
BEGIN_DATADESC ( CLogicBranchList )
// Silence, classcheck!
//DEFINE_ARRAY( m_nLogicBranchNames, FIELD_STRING, MAX_LOGIC_BRANCH_NAMES ),
// Keys
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 0 ] , FIELD_STRING , " Branch01 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 1 ] , FIELD_STRING , " Branch02 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 2 ] , FIELD_STRING , " Branch03 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 3 ] , FIELD_STRING , " Branch04 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 4 ] , FIELD_STRING , " Branch05 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 5 ] , FIELD_STRING , " Branch06 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 6 ] , FIELD_STRING , " Branch07 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 7 ] , FIELD_STRING , " Branch08 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 8 ] , FIELD_STRING , " Branch09 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 9 ] , FIELD_STRING , " Branch10 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 10 ] , FIELD_STRING , " Branch11 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 11 ] , FIELD_STRING , " Branch12 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 12 ] , FIELD_STRING , " Branch13 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 13 ] , FIELD_STRING , " Branch14 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 14 ] , FIELD_STRING , " Branch15 " ) ,
DEFINE_KEYFIELD ( m_nLogicBranchNames [ 15 ] , FIELD_STRING , " Branch16 " ) ,
DEFINE_UTLVECTOR ( m_LogicBranchList , FIELD_EHANDLE ) ,
DEFINE_FIELD ( m_eLastState , FIELD_INTEGER ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_INPUT , " Test " , InputTest ) ,
DEFINE_INPUTFUNC ( FIELD_INPUT , " _OnLogicBranchChanged " , Input_OnLogicBranchChanged ) ,
DEFINE_INPUTFUNC ( FIELD_INPUT , " _OnLogicBranchRemoved " , Input_OnLogicBranchRemoved ) ,
// Outputs
DEFINE_OUTPUT ( m_OnAllTrue , " OnAllTrue " ) ,
DEFINE_OUTPUT ( m_OnAllFalse , " OnAllFalse " ) ,
DEFINE_OUTPUT ( m_OnMixed , " OnMixed " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose: Called before spawning, after key values have been set.
//-----------------------------------------------------------------------------
void CLogicBranchList : : Spawn ( void )
{
}
//-----------------------------------------------------------------------------
// Finds all the logic_branches that we are monitoring and register ourselves with them.
//-----------------------------------------------------------------------------
void CLogicBranchList : : Activate ( void )
{
for ( int i = 0 ; i < MAX_LOGIC_BRANCH_NAMES ; i + + )
{
CBaseEntity * pEntity = NULL ;
while ( ( pEntity = gEntList . FindEntityGeneric ( pEntity , STRING ( m_nLogicBranchNames [ i ] ) , this ) ) ! = NULL )
{
if ( FClassnameIs ( pEntity , " logic_branch " ) )
{
CLogicBranch * pBranch = ( CLogicBranch * ) pEntity ;
pBranch - > AddLogicBranchListener ( this ) ;
m_LogicBranchList . AddToTail ( pBranch ) ;
}
else
{
DevWarning ( " logic_branchlist %s refers to entity %s, which is not a logic_branch \n " , GetDebugName ( ) , pEntity - > GetDebugName ( ) ) ;
}
}
}
BaseClass : : Activate ( ) ;
}
//-----------------------------------------------------------------------------
// Called when a monitored logic branch is deleted from the world, since that
// might affect our final result.
//-----------------------------------------------------------------------------
void CLogicBranchList : : Input_OnLogicBranchRemoved ( inputdata_t & inputdata )
{
int nIndex = m_LogicBranchList . Find ( inputdata . pActivator ) ;
if ( nIndex ! = - 1 )
{
m_LogicBranchList . FastRemove ( nIndex ) ;
}
// See if this logic_branch's deletion affects the final result.
DoTest ( inputdata . pActivator ) ;
}
//-----------------------------------------------------------------------------
// Called when the value of a monitored logic branch changes.
//-----------------------------------------------------------------------------
void CLogicBranchList : : Input_OnLogicBranchChanged ( inputdata_t & inputdata )
{
DoTest ( inputdata . pActivator ) ;
}
//-----------------------------------------------------------------------------
// Input handler to manually test the monitored logic branches and fire the
// appropriate output.
//-----------------------------------------------------------------------------
void CLogicBranchList : : InputTest ( inputdata_t & inputdata )
{
// Force an output.
m_eLastState = LOGIC_BRANCH_LISTENER_NOT_INIT ;
DoTest ( inputdata . pActivator ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicBranchList : : DoTest ( CBaseEntity * pActivator )
{
bool bOneTrue = false ;
bool bOneFalse = false ;
for ( int i = 0 ; i < m_LogicBranchList . Count ( ) ; i + + )
{
CLogicBranch * pBranch = ( CLogicBranch * ) m_LogicBranchList . Element ( i ) . Get ( ) ;
if ( pBranch & & pBranch - > GetLogicBranchState ( ) )
{
bOneTrue = true ;
}
else
{
bOneFalse = true ;
}
}
// Only fire the output if the new result differs from the last result.
if ( bOneTrue & & ! bOneFalse )
{
if ( m_eLastState ! = LOGIC_BRANCH_LISTENER_ALL_TRUE )
{
m_OnAllTrue . FireOutput ( pActivator , this ) ;
m_eLastState = LOGIC_BRANCH_LISTENER_ALL_TRUE ;
}
}
else if ( bOneFalse & & ! bOneTrue )
{
if ( m_eLastState ! = LOGIC_BRANCH_LISTENER_ALL_FALSE )
{
m_OnAllFalse . FireOutput ( pActivator , this ) ;
m_eLastState = LOGIC_BRANCH_LISTENER_ALL_FALSE ;
}
}
else
{
if ( m_eLastState ! = LOGIC_BRANCH_LISTENER_MIXED )
{
m_OnMixed . FireOutput ( pActivator , this ) ;
m_eLastState = LOGIC_BRANCH_LISTENER_MIXED ;
}
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
int CLogicBranchList : : DrawDebugTextOverlays ( void )
{
int text_offset = BaseClass : : DrawDebugTextOverlays ( ) ;
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
{
char tempstr [ 512 ] ;
for ( int i = 0 ; i < m_LogicBranchList . Count ( ) ; i + + )
{
CLogicBranch * pBranch = ( CLogicBranch * ) m_LogicBranchList . Element ( i ) . Get ( ) ;
if ( pBranch )
{
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Branch (%s): %s " , STRING ( pBranch - > GetEntityName ( ) ) , ( pBranch - > GetLogicBranchState ( ) ) ? " TRUE " : " FALSE " ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
}
}
}
return text_offset ;
}
# ifdef MAPBASE
//-----------------------------------------------------------------------------
// Purpose: Prints messages to the console.
//-----------------------------------------------------------------------------
class CLogicConsole : public CLogicalEntity
{
public :
DECLARE_CLASS ( CLogicConsole , CLogicalEntity ) ;
// Keys
int m_iDevLevel = 1 ;
Color m_MsgColor = Color ( 210 , 250 , 255 , 255 ) ;
Color m_WarningColor = Color ( 255 , 210 , 210 , 255 ) ;
bool m_bNewLineNotAuto = false ;
// TODO: Replace "append" with variable arguments?
inline void LCMsg ( const char * msg , const char * append = NULL ) { ConColorMsg ( m_MsgColor , msg , append ) ; }
2020-06-14 10:39:08 +02:00
inline void LCDevMsg ( int lvl , const char * msg , const char * append = NULL ) { developer . GetInt ( ) > = lvl ? ConColorMsg ( m_MsgColor , msg , append ) : ( void ) 0 ; }
2019-08-31 19:28:20 +00:00
inline void LCWarning ( const char * msg , const char * append = NULL ) { ConColorMsg ( m_WarningColor , msg , append ) ; }
2020-06-14 10:39:08 +02:00
inline void LCDevWarning ( int lvl , const char * msg , const char * append = NULL ) { developer . GetInt ( ) > = lvl ? ConColorMsg ( m_WarningColor , msg , append ) : ( void ) 0 ; }
2019-08-31 19:28:20 +00:00
//inline void LCMsg(const char *msg, const char *append = NULL) { ColorSpewMessage(SPEW_MESSAGE, &m_MsgColor, msg, append); }
2020-06-14 10:39:08 +02:00
//inline void LCDevMsg(int lvl, const char *msg, const char *append = NULL) { developer.GetInt() >= lvl ? ColorSpewMessage(SPEW_MESSAGE, &m_MsgColor, msg, append) : (void)0; }
2019-08-31 19:28:20 +00:00
//inline void LCWarning(const char *msg, const char *append = NULL) { ColorSpewMessage(SPEW_MESSAGE, &m_WarningColor, msg, append); }
2020-06-14 10:39:08 +02:00
//inline void LCDevWarning(int lvl, const char *msg, const char *append = NULL) { developer.GetInt() >= lvl ? ColorSpewMessage(SPEW_MESSAGE, &m_WarningColor, msg, append) : (void)0; }
2019-08-31 19:28:20 +00:00
// Inputs
void InputSendMsg ( inputdata_t & inputdata ) { ! m_bNewLineNotAuto ? LCMsg ( " %s \n " , inputdata . value . String ( ) ) : LCMsg ( " %s " , inputdata . value . String ( ) ) ; }
void InputSendWarning ( inputdata_t & inputdata ) { ! m_bNewLineNotAuto ? LCWarning ( " %s \n " , inputdata . value . String ( ) ) : LCWarning ( " %s " , inputdata . value . String ( ) ) ; }
void InputSendDevMsg ( inputdata_t & inputdata ) { ! m_bNewLineNotAuto ? LCDevMsg ( m_iDevLevel , " %s \n " , inputdata . value . String ( ) ) : LCDevMsg ( m_iDevLevel , " %s " , inputdata . value . String ( ) ) ; }
void InputSendDevWarning ( inputdata_t & inputdata ) { ! m_bNewLineNotAuto ? LCDevWarning ( m_iDevLevel , " %s \n " , inputdata . value . String ( ) ) : LCDevWarning ( m_iDevLevel , " %s " , inputdata . value . String ( ) ) ; }
void InputNewLine ( inputdata_t & inputdata ) { LCMsg ( " \n " ) ; }
void InputDevNewLine ( inputdata_t & inputdata ) { LCDevMsg ( m_iDevLevel , " \n " ) ; }
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
// MAPBASE MP TODO: "ClearConsoleOnTarget"
// (and make this input broadcast to all players)
2020-06-14 10:39:08 +02:00
void InputClearConsole ( inputdata_t & inputdata ) { UTIL_GetLocalPlayer ( ) ? engine - > ClientCommand ( UTIL_GetLocalPlayer ( ) - > edict ( ) , " clear " ) : ( void ) 0 ; }
2019-08-31 19:28:20 +00:00
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_console , CLogicConsole ) ;
BEGIN_DATADESC ( CLogicConsole )
DEFINE_INPUT ( m_iDevLevel , FIELD_INTEGER , " SetDevLvl " ) ,
DEFINE_INPUT ( m_MsgColor , FIELD_COLOR32 , " SetMsgColor " ) ,
DEFINE_INPUT ( m_WarningColor , FIELD_COLOR32 , " SetWarningColor " ) ,
DEFINE_INPUT ( m_bNewLineNotAuto , FIELD_BOOLEAN , " SetNewLineNotAuto " ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SendMsg " , InputSendMsg ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SendWarning " , InputSendWarning ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SendDevMsg " , InputSendDevMsg ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SendDevWarning " , InputSendDevWarning ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " NewLine " , InputNewLine ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " DevNewLine " , InputDevNewLine ) ,
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " ClearConsole " , InputClearConsole ) ,
2019-08-31 19:28:20 +00:00
END_DATADESC ( )
2020-05-27 10:51:11 -05:00
ConVar sv_allow_logic_convar ( " sv_allow_logic_convar " , " 1 " , FCVAR_NOT_CONNECTED ) ;
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose: Gets console variables for the evil mapper.
//-----------------------------------------------------------------------------
class CLogicConvar : public CLogicalEntity
{
public :
DECLARE_CLASS ( CLogicConvar , CLogicalEntity ) ;
// Keys
string_t m_iszConVar ;
string_t m_iszCompareValue ;
const char * GetConVarString ( inputdata_t & inputdata ) ;
// Inputs
void InputGetValue ( inputdata_t & inputdata ) ;
void InputTest ( inputdata_t & inputdata ) ;
// Outputs
COutputEvent m_OnTrue ;
COutputEvent m_OnFalse ;
COutputString m_OutValue ;
COutputEvent m_OnDenied ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_convar , CLogicConvar ) ;
BEGIN_DATADESC ( CLogicConvar )
DEFINE_INPUT ( m_iszConVar , FIELD_STRING , " SetConVar " ) ,
DEFINE_INPUT ( m_iszCompareValue , FIELD_STRING , " SetTestValue " ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetValue " , InputGetValue ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Test " , InputTest ) ,
DEFINE_OUTPUT ( m_OnTrue , " OnTrue " ) ,
DEFINE_OUTPUT ( m_OnFalse , " OnFalse " ) ,
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_OUTPUT ( m_OnDenied , " OnDenied " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
const char * CLogicConvar : : GetConVarString ( inputdata_t & inputdata )
{
if ( ! sv_allow_logic_convar . GetBool ( ) )
{
m_OnDenied . FireOutput ( this , this ) ;
//return ConVarRef("<null>", true);
return NULL ;
}
ConVarRef pCVar = ConVarRef ( STRING ( m_iszConVar ) , true ) ;
if ( ! pCVar . IsValid ( ) )
{
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
const char * pszCVar = STRING ( m_iszConVar ) ;
2019-08-31 19:28:20 +00:00
CBasePlayer * pPlayer = ToBasePlayer ( inputdata . pActivator ) ;
if ( ! pPlayer & & AI_IsSinglePlayer ( ) )
pPlayer = UTIL_PlayerByIndex ( 1 ) ;
if ( pPlayer )
{
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
// Check if it's a common cheat command a player might be using
2019-08-31 19:28:20 +00:00
if ( FStrEq ( pszCVar , " god " ) )
return ( pPlayer - > GetFlags ( ) & FL_GODMODE ) ? " 1 " : " 0 " ;
if ( FStrEq ( pszCVar , " notarget " ) )
return ( pPlayer - > GetFlags ( ) & FL_NOTARGET ) ? " 1 " : " 0 " ;
if ( FStrEq ( pszCVar , " noclip " ) )
return ( pPlayer - > IsEFlagSet ( EFL_NOCLIP_ACTIVE ) ) ? " 1 " : " 0 " ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
// It might be a client convar
// This function returns a blank string if the convar doesn't exist, so we have to put this at the end
const char * pszClientValue = engine - > GetClientConVarValue ( pPlayer - > GetClientIndex ( ) , pszCVar ) ;
if ( pszClientValue )
{
return pszClientValue ;
}
2019-08-31 19:28:20 +00:00
}
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
//Warning("Warning: %s has invalid convar \"%s\"\n", GetDebugName(), STRING(m_iszConVar));
2019-08-31 19:28:20 +00:00
}
return pCVar . GetString ( ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicConvar : : InputGetValue ( inputdata_t & inputdata )
{
const char * pCVarString = GetConVarString ( inputdata ) ;
if ( pCVarString ! = NULL )
m_OutValue . Set ( AllocPooledString ( pCVarString ) , inputdata . pActivator , this ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicConvar : : InputTest ( inputdata_t & inputdata )
{
const char * pCVarString = GetConVarString ( inputdata ) ;
if ( pCVarString )
{
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
if ( Matcher_Match ( STRING ( m_iszCompareValue ) , pCVarString ) )
2019-08-31 19:28:20 +00:00
{
m_OnTrue . FireOutput ( inputdata . pActivator , this ) ;
}
else
{
m_OnFalse . FireOutput ( inputdata . pActivator , this ) ;
}
}
}
# define MAX_LOGIC_FORMAT_PARAMETERS 8
//-----------------------------------------------------------------------------
// Purpose: Takes a string and a bunch of parameters and spits out a formatted string.
//-----------------------------------------------------------------------------
class CLogicFormat : public CLogicalEntity
{
public :
DECLARE_CLASS ( CLogicFormat , CLogicalEntity ) ;
// Keys
string_t m_iszInput ;
string_t m_iszParameter [ MAX_LOGIC_FORMAT_PARAMETERS ] ;
string_t m_iszBackupParameter ;
void FormatString ( const char * szStringToFormat , char * szOutput , int outputlen ) ;
// Inputs
void InputGetFormattedString ( inputdata_t & inputdata ) ;
// Outputs
COutputString m_OutFormattedString ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_format , CLogicFormat ) ;
BEGIN_DATADESC ( CLogicFormat )
DEFINE_INPUT ( m_iszInput , FIELD_STRING , " SetInputValue " ) ,
DEFINE_INPUT ( m_iszParameter [ 0 ] , FIELD_STRING , " SetParameter0 " ) ,
DEFINE_INPUT ( m_iszParameter [ 1 ] , FIELD_STRING , " SetParameter1 " ) ,
DEFINE_INPUT ( m_iszParameter [ 2 ] , FIELD_STRING , " SetParameter2 " ) ,
DEFINE_INPUT ( m_iszParameter [ 3 ] , FIELD_STRING , " SetParameter3 " ) ,
DEFINE_INPUT ( m_iszParameter [ 4 ] , FIELD_STRING , " SetParameter4 " ) ,
DEFINE_INPUT ( m_iszParameter [ 5 ] , FIELD_STRING , " SetParameter5 " ) ,
DEFINE_INPUT ( m_iszParameter [ 6 ] , FIELD_STRING , " SetParameter6 " ) ,
DEFINE_INPUT ( m_iszParameter [ 7 ] , FIELD_STRING , " SetParameter7 " ) ,
DEFINE_INPUT ( m_iszBackupParameter , FIELD_STRING , " SetBackupParameter " ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetFormattedValue " , InputGetFormattedString ) ,
DEFINE_OUTPUT ( m_OutFormattedString , " OutFormattedValue " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicFormat : : InputGetFormattedString ( inputdata_t & inputdata )
{
char szFormatted [ 256 ] ;
if ( m_iszInput ! = NULL_STRING )
{
FormatString ( STRING ( m_iszInput ) , szFormatted , sizeof ( szFormatted ) ) ;
m_OutFormattedString . Set ( AllocPooledString ( szFormatted ) , inputdata . pActivator , this ) ;
}
}
//-----------------------------------------------------------------------------
// I'm bad at coding.
//-----------------------------------------------------------------------------
void CLogicFormat : : FormatString ( const char * szStringToFormat , char * szOutput , int outputlen )
{
const char * szParameters [ MAX_LOGIC_FORMAT_PARAMETERS ] ;
for ( int i = 0 ; i < MAX_LOGIC_FORMAT_PARAMETERS ; i + + )
{
if ( m_iszParameter [ i ] ! = NULL_STRING )
{
szParameters [ i ] = STRING ( m_iszParameter [ i ] ) ;
}
else if ( m_iszBackupParameter ! = NULL_STRING )
{
szParameters [ i ] = STRING ( m_iszBackupParameter ) ;
}
else
{
szParameters [ i ] = " <null> " ;
}
}
char szFormatted [ 256 ] = { 0 } ; // Needed so garbage isn't spewed at the beginning
//Q_snprintf(szFormatted, sizeof(szFormatted), szInput, szParameters);
char szInput [ 256 ] ;
Q_strncpy ( szInput , szStringToFormat , sizeof ( szInput ) ) ;
bool inparam = ( szInput [ 0 ] = = ' { ' ) ;
int curparam = 0 ;
char * szToken = strtok ( szInput , " { " ) ;
while ( szToken ! = NULL )
{
if ( inparam )
{
curparam = atoi ( szToken ) ;
if ( curparam < MAX_LOGIC_FORMAT_PARAMETERS /*&& szParameters[curparam] != NULL*/ ) //if (curparam < MAX_FORMAT_PARAMETERS)
{
Q_snprintf ( szFormatted , sizeof ( szFormatted ) , " %s%s " , szFormatted , szParameters [ curparam ] ) ;
}
else
{
Warning ( " Warning: Parameter %i out of bounds in \" %s \" \n " , curparam , szStringToFormat ) ;
// This might not be the best way to do this, but
// reaching it is supposed to be the result of a mistake anyway.
m_iszBackupParameter ! = NULL_STRING ?
Q_snprintf ( szFormatted , sizeof ( szFormatted ) , " %s%s " , szFormatted , STRING ( m_iszBackupParameter ) ) :
Q_snprintf ( szFormatted , sizeof ( szFormatted ) , " %s<null> " , szFormatted ) ;
}
inparam = false ;
szToken = strtok ( NULL , " { " ) ;
}
else
{
Q_snprintf ( szFormatted , sizeof ( szFormatted ) , " %s%s " , szFormatted , szToken ) ;
inparam = true ;
szToken = strtok ( NULL , " } " ) ;
}
}
Q_strncpy ( szOutput , szFormatted , outputlen ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Accesses a keyvalue from a specific entity
// Mostly ported from Half-Laugh.
//-----------------------------------------------------------------------------
class CLogicKeyfieldAccessor : public CLogicalEntity
{
DECLARE_CLASS ( CLogicKeyfieldAccessor , CLogicalEntity ) ;
protected :
CBaseEntity * GetTarget ( CBaseEntity * pCaller , CBaseEntity * pActivator ) ;
virtual bool TestKey ( CBaseEntity * pTarget , const char * szKeyName ) ;
virtual bool SetKeyValue ( CBaseEntity * pTarget , const char * szKeyName , const char * szValue ) ;
virtual bool SetKeyValueBits ( CBaseEntity * pTarget , const char * szKeyName , int iValue , bool bRemove = false ) ;
// Inputs
void InputTest ( inputdata_t & inputdata ) ;
void InputTestKey ( inputdata_t & inputdata ) ;
void InputTestTarget ( inputdata_t & inputdata ) ;
void InputSetKey ( inputdata_t & inputdata ) ;
void InputSetValue ( inputdata_t & inputdata ) ;
void InputAddBits ( inputdata_t & inputdata ) ;
void InputRemoveBits ( inputdata_t & inputdata ) ;
//bool ReadUnregisteredKeyfields(CBaseEntity *pTarget, const char *szKeyName, variant_t *variant);
COutputVariant m_OutValue ;
COutputEvent m_OnFailed ;
string_t m_iszKey ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_keyfield , CLogicKeyfieldAccessor ) ;
BEGIN_DATADESC ( CLogicKeyfieldAccessor )
DEFINE_KEYFIELD ( m_iszKey , FIELD_STRING , " keyname " ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_VOID , " Test " , InputTest ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " TestKey " , InputTestKey ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " TestTarget " , InputTestTarget ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SetKey " , InputSetKey ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SetValue " , InputSetValue ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " AddBits " , InputAddBits ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " RemoveBits " , InputRemoveBits ) ,
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_OUTPUT ( m_OnFailed , " OnFailed " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
inline CBaseEntity * CLogicKeyfieldAccessor : : GetTarget ( CBaseEntity * pCaller , CBaseEntity * pActivator )
{
return gEntList . FindEntityByName ( NULL , m_target , this , pActivator , pCaller ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CLogicKeyfieldAccessor : : TestKey ( CBaseEntity * pTarget , const char * szKeyName )
{
variant_t variant ;
if ( pTarget - > ReadKeyField ( szKeyName , & variant ) | | ReadUnregisteredKeyfields ( pTarget , szKeyName , & variant ) )
{
m_OutValue . Set ( variant , pTarget , this ) ;
return true ;
}
else
{
m_OnFailed . FireOutput ( pTarget , this ) ;
return false ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CLogicKeyfieldAccessor : : SetKeyValue ( CBaseEntity * pTarget , const char * szKeyName , const char * szValue )
{
if ( pTarget - > KeyValue ( szKeyName , szValue ) )
{
// We'll still fire OutValue
variant_t variant ;
if ( ! pTarget - > ReadKeyField ( szKeyName , & variant ) )
ReadUnregisteredKeyfields ( pTarget , szKeyName , & variant ) ;
m_OutValue . Set ( variant , pTarget , this ) ;
return true ;
}
else
{
m_OnFailed . FireOutput ( pTarget , this ) ;
return false ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CLogicKeyfieldAccessor : : SetKeyValueBits ( CBaseEntity * pTarget , const char * szKeyName , int iValue , bool bRemove )
{
variant_t variant ;
if ( ( pTarget - > ReadKeyField ( szKeyName , & variant ) | | ReadUnregisteredKeyfields ( pTarget , szKeyName , & variant ) ) & & variant . FieldType ( ) = = FIELD_INTEGER )
{
if ( bRemove )
variant . SetInt ( variant . Int ( ) & ~ iValue ) ;
else
variant . SetInt ( variant . Int ( ) | iValue ) ;
pTarget - > KeyValue ( szKeyName , UTIL_VarArgs ( " %i " , variant . Int ( ) ) ) ;
m_OutValue . Set ( variant , pTarget , this ) ;
return true ;
}
else
{
m_OnFailed . FireOutput ( pTarget , this ) ;
return false ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicKeyfieldAccessor : : InputTest ( inputdata_t & inputdata )
{
CBaseEntity * pTarget = GetTarget ( inputdata . pCaller , inputdata . pActivator ) ;
if ( pTarget & & m_iszKey ! = NULL_STRING )
{
TestKey ( pTarget , STRING ( m_iszKey ) ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicKeyfieldAccessor : : InputTestKey ( inputdata_t & inputdata )
{
const char * input = inputdata . value . String ( ) ;
CBaseEntity * pTarget = GetTarget ( inputdata . pCaller , inputdata . pActivator ) ;
if ( input & & pTarget )
{
TestKey ( pTarget , input ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicKeyfieldAccessor : : InputTestTarget ( inputdata_t & inputdata )
{
m_target = inputdata . value . StringID ( ) ;
CBaseEntity * pTarget = gEntList . FindEntityByName ( NULL , inputdata . value . StringID ( ) , this , inputdata . pCaller , inputdata . pActivator ) ;
if ( pTarget & & m_iszKey ! = NULL_STRING )
{
TestKey ( pTarget , STRING ( m_iszKey ) ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicKeyfieldAccessor : : InputSetKey ( inputdata_t & inputdata )
{
m_iszKey = inputdata . value . StringID ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicKeyfieldAccessor : : InputSetValue ( inputdata_t & inputdata )
{
const char * input = inputdata . value . String ( ) ;
CBaseEntity * pTarget = GetTarget ( inputdata . pCaller , inputdata . pActivator ) ;
if ( input & & pTarget )
{
SetKeyValue ( pTarget , STRING ( m_iszKey ) , input ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicKeyfieldAccessor : : InputAddBits ( inputdata_t & inputdata )
{
int input = inputdata . value . Int ( ) ;
CBaseEntity * pTarget = GetTarget ( inputdata . pCaller , inputdata . pActivator ) ;
if ( input & & pTarget )
{
SetKeyValueBits ( pTarget , STRING ( m_iszKey ) , input , false ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicKeyfieldAccessor : : InputRemoveBits ( inputdata_t & inputdata )
{
int input = inputdata . value . Int ( ) ;
CBaseEntity * pTarget = GetTarget ( inputdata . pCaller , inputdata . pActivator ) ;
if ( input & & pTarget )
{
SetKeyValueBits ( pTarget , STRING ( m_iszKey ) , input , true ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose: Clamps the input value between two values
//-----------------------------------------------------------------------------
class CMathClamp : public CLogicalEntity
{
public :
DECLARE_CLASS ( CMathClamp , CLogicalEntity ) ;
// Keys
variant_t m_Max ;
variant_t m_Min ;
// Inputs
void InputClampValue ( inputdata_t & inputdata ) ;
float ClampValue ( float input , float min , float max , int * bounds ) ;
void ClampValue ( variant_t var , inputdata_t * inputdata ) ;
// Outputs
COutputVariant m_OutValue ;
COutputVariant m_OnBeforeMin ;
COutputVariant m_OnBeyondMax ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( math_clamp , CMathClamp ) ;
BEGIN_DATADESC ( CMathClamp )
DEFINE_INPUT ( m_Max , FIELD_INPUT , " SetMax " ) ,
DEFINE_INPUT ( m_Min , FIELD_INPUT , " SetMin " ) ,
DEFINE_INPUTFUNC ( FIELD_INPUT , " ClampValue " , InputClampValue ) ,
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_OUTPUT ( m_OnBeforeMin , " OnBeforeMin " ) ,
DEFINE_OUTPUT ( m_OnBeyondMax , " OnBeyondMax " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathClamp : : InputClampValue ( inputdata_t & inputdata )
{
ClampValue ( inputdata . value , & inputdata ) ;
}
//-----------------------------------------------------------------------------
// "bounds" returns 1 if the number was less than min, 2 if more than max. Must not be NULL
//-----------------------------------------------------------------------------
inline float CMathClamp : : ClampValue ( float input , float min , float max , int * bounds )
{
if ( max < min )
{
2020-06-14 10:39:08 +02:00
Warning ( " WARNING: Max value (%f) less than min value (%f) in %s! \n " , max , min , GetDebugName ( ) ) ;
2019-08-31 19:28:20 +00:00
return max ;
}
else if ( input < min )
{
* bounds = 1 ;
return min ;
}
else if ( input > max )
{
* bounds = 2 ;
return max ;
}
else
return input ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathClamp : : ClampValue ( variant_t var , inputdata_t * inputdata )
{
// Don't convert up here in case of invalid type
int nBounds ;
switch ( var . FieldType ( ) )
{
case FIELD_FLOAT :
{
m_Max . Convert ( var . FieldType ( ) ) ;
m_Min . Convert ( var . FieldType ( ) ) ;
var . SetFloat ( ClampValue ( var . Float ( ) , m_Max . Float ( ) , m_Min . Float ( ) , & nBounds ) ) ;
} break ;
case FIELD_INTEGER :
{
m_Max . Convert ( var . FieldType ( ) ) ;
m_Min . Convert ( var . FieldType ( ) ) ;
var . SetInt ( ClampValue ( var . Int ( ) , m_Max . Int ( ) , m_Min . Int ( ) , & nBounds ) ) ;
} break ;
case FIELD_VECTOR :
{
m_Max . Convert ( var . FieldType ( ) ) ;
m_Min . Convert ( var . FieldType ( ) ) ;
Vector min ;
Vector max ;
m_Min . Vector3D ( min ) ;
m_Max . Vector3D ( max ) ;
Vector vec ;
var . Vector3D ( vec ) ;
vec . x = ClampValue ( vec . x , min . x , max . x , & nBounds ) ;
vec . y = ClampValue ( vec . y , min . y , max . y , & nBounds ) ;
vec . z = ClampValue ( vec . z , min . z , max . z , & nBounds ) ;
var . SetVector3D ( vec ) ;
} break ;
default :
{
Warning ( " Error: Unsupported value %s in math_clamp %s \n " , var . GetDebug ( ) , STRING ( GetEntityName ( ) ) ) ;
return ;
}
}
if ( inputdata )
{
m_OutValue . Set ( var , inputdata - > pActivator , this ) ;
if ( nBounds = = 1 )
m_OnBeforeMin . Set ( var , inputdata - > pActivator , this ) ;
else if ( nBounds = = 2 )
m_OnBeyondMax . Set ( var , inputdata - > pActivator , this ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose: Bits calculations.
//-----------------------------------------------------------------------------
class CMathBits : public CLogicalEntity
{
DECLARE_CLASS ( CMathBits , CLogicalEntity ) ;
private :
bool m_bDisabled ;
bool KeyValue ( const char * szKeyName , const char * szValue ) ;
void UpdateOutValue ( CBaseEntity * pActivator , int iNewValue ) ;
int DrawDebugTextOverlays ( void ) ;
// Inputs
void InputAdd ( inputdata_t & inputdata ) ;
void InputSubtract ( inputdata_t & inputdata ) ;
void InputShiftLeft ( inputdata_t & inputdata ) ;
void InputShiftRight ( inputdata_t & inputdata ) ;
void InputApplyAnd ( inputdata_t & inputdata ) ;
void InputApplyOr ( inputdata_t & inputdata ) ;
void InputSetValue ( inputdata_t & inputdata ) ;
void InputSetValueNoFire ( inputdata_t & inputdata ) ;
void InputGetValue ( inputdata_t & inputdata ) ;
void InputEnable ( inputdata_t & inputdata ) ;
void InputDisable ( inputdata_t & inputdata ) ;
void InputContainsBits ( inputdata_t & inputdata ) ;
void InputContainsAllBits ( inputdata_t & inputdata ) ;
// Outputs
COutputInt m_OutValue ;
COutputInt m_OnGetValue ;
COutputEvent m_OnTrue ;
COutputEvent m_OnFalse ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( math_bits , CMathBits ) ;
BEGIN_DATADESC ( CMathBits )
// Keys
DEFINE_KEYFIELD ( m_bDisabled , FIELD_BOOLEAN , " StartDisabled " ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_INTEGER , " Add " , InputAdd ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " Subtract " , InputSubtract ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " ShiftLeft " , InputShiftLeft ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " ShiftRight " , InputShiftRight ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " ApplyAnd " , InputApplyAnd ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " ApplyOr " , InputApplyOr ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " SetValue " , InputSetValue ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " SetValueNoFire " , InputSetValueNoFire ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetValue " , InputGetValue ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Enable " , InputEnable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Disable " , InputDisable ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " ContainsBits " , InputContainsBits ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " ContainsAllBits " , InputContainsAllBits ) ,
// Outputs
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_OUTPUT ( m_OnGetValue , " OnGetValue " ) ,
DEFINE_OUTPUT ( m_OnTrue , " OnTrue " ) ,
DEFINE_OUTPUT ( m_OnFalse , " OnFalse " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose: Handles key values from the BSP before spawn is called.
//-----------------------------------------------------------------------------
bool CMathBits : : KeyValue ( const char * szKeyName , const char * szValue )
{
//
// Set the initial value of the counter.
//
if ( ! stricmp ( szKeyName , " startvalue " ) )
{
m_OutValue . Init ( atoi ( szValue ) ) ;
return ( true ) ;
}
return ( BaseClass : : KeyValue ( szKeyName , szValue ) ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for adding to the accumulator value.
// Input : Bit value to add.
//-----------------------------------------------------------------------------
void CMathBits : : InputAdd ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring ADD because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
int iNewValue = m_OutValue . Get ( ) | inputdata . value . Int ( ) ;
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for subtracting from the current value.
// Input : Bit value to subtract.
//-----------------------------------------------------------------------------
void CMathBits : : InputSubtract ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring SUBTRACT because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
int iNewValue = m_OutValue . Get ( ) & ~ inputdata . value . Int ( ) ;
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for shifting from the current value.
// Input : Bit value to shift by.
//-----------------------------------------------------------------------------
void CMathBits : : InputShiftLeft ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring SHIFTLEFT because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
int iNewValue = m_OutValue . Get ( ) < < inputdata . value . Int ( ) ;
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for shifting from the current value.
// Input : Bit value to shift by.
//-----------------------------------------------------------------------------
void CMathBits : : InputShiftRight ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring SHIFTRIGHT because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
int iNewValue = m_OutValue . Get ( ) > > inputdata . value . Int ( ) ;
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for applying & to the current value.
// Input : Bit value to shift by.
//-----------------------------------------------------------------------------
void CMathBits : : InputApplyAnd ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring APPLYAND because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
int iNewValue = m_OutValue . Get ( ) & inputdata . value . Int ( ) ;
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for applying | to the current value.
// Input : Bit value to shift by.
//-----------------------------------------------------------------------------
void CMathBits : : InputApplyOr ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring APPLYOR because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
int iNewValue = m_OutValue . Get ( ) | inputdata . value . Int ( ) ;
UpdateOutValue ( inputdata . pActivator , iNewValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for updating the value.
// Input : Bit value to set.
//-----------------------------------------------------------------------------
void CMathBits : : InputSetValue ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring SETVALUE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
UpdateOutValue ( inputdata . pActivator , inputdata . value . Int ( ) ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for updating the value.
// Input : Bit value to set.
//-----------------------------------------------------------------------------
void CMathBits : : InputSetValueNoFire ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring SETVALUENOFIRE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
m_OutValue . Init ( inputdata . value . Int ( ) ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathBits : : InputGetValue ( inputdata_t & inputdata )
{
int iOutValue = m_OutValue . Get ( ) ;
m_OnGetValue . Set ( iOutValue , inputdata . pActivator , inputdata . pCaller ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for checking whether a bit is stored.
// Input : Bit value to check.
//-----------------------------------------------------------------------------
void CMathBits : : InputContainsBits ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring CONTAINS BITS because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
if ( m_OutValue . Get ( ) & inputdata . value . Int ( ) )
m_OnTrue . FireOutput ( inputdata . pActivator , this ) ;
else
m_OnFalse . FireOutput ( inputdata . pActivator , this ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for checking whether all of the specified bits are stored.
// Input : Bit value to check.
//-----------------------------------------------------------------------------
void CMathBits : : InputContainsAllBits ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Bits %s ignoring CONTAINS ALL BITS because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
bool bResult = false ;
int iInput = inputdata . value . Int ( ) ;
int iValue = m_OutValue . Get ( ) ;
for ( int i = 1 , n = 0 ; n < 32 ; ( i < < = 1 ) , n + + )
{
DevMsg ( " %i \n " , i ) ;
if ( iInput & i )
{
if ( ! ( iValue & i ) )
{
DevMsg ( " %i does not go into %i \n " , i , iValue ) ;
bResult = false ;
break ;
}
else if ( ! bResult )
{
bResult = true ;
}
}
}
if ( bResult )
m_OnTrue . FireOutput ( inputdata . pActivator , this ) ;
else
m_OnFalse . FireOutput ( inputdata . pActivator , this ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathBits : : InputEnable ( inputdata_t & inputdata )
{
m_bDisabled = false ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathBits : : InputDisable ( inputdata_t & inputdata )
{
m_bDisabled = true ;
}
//-----------------------------------------------------------------------------
// Purpose: Sets the value to the new value, firing the output value.
// Input : iNewValue - Value to set.
//-----------------------------------------------------------------------------
void CMathBits : : UpdateOutValue ( CBaseEntity * pActivator , int iNewValue )
{
m_OutValue . Set ( iNewValue , pActivator , this ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Draw any debug text overlays
// Input :
// Output : Current text offset from the top
//-----------------------------------------------------------------------------
int CMathBits : : DrawDebugTextOverlays ( void )
{
int text_offset = BaseClass : : DrawDebugTextOverlays ( ) ;
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
{
char tempstr [ 512 ] ;
Q_snprintf ( tempstr , sizeof ( tempstr ) , " current value: %i " , m_OutValue . Get ( ) ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
if ( m_bDisabled )
{
Q_snprintf ( tempstr , sizeof ( tempstr ) , " *DISABLED* " ) ;
}
else
{
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Enabled. " ) ;
}
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
}
return text_offset ;
}
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
// These spawnflags control math_vector dimensions.
# define SF_MATH_VECTOR_DISABLE_X ( 1 << 0 )
# define SF_MATH_VECTOR_DISABLE_Y ( 1 << 1 )
# define SF_MATH_VECTOR_DISABLE_Z ( 1 << 2 )
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose: Vector calculations.
//-----------------------------------------------------------------------------
class CMathVector : public CLogicalEntity
{
DECLARE_CLASS ( CMathVector , CLogicalEntity ) ;
private :
bool m_bDisabled ;
bool KeyValue ( const char * szKeyName , const char * szValue ) ;
bool KeyValue ( const char * szKeyName , const Vector & vecValue ) ;
2020-06-14 10:39:08 +02:00
void UpdateOutValue ( CBaseEntity * pActivator , Vector vecNewValue ) ;
2019-08-31 19:28:20 +00:00
int DrawDebugTextOverlays ( void ) ;
// Inputs
void InputAdd ( inputdata_t & inputdata ) ;
void InputSubtract ( inputdata_t & inputdata ) ;
void InputDivide ( inputdata_t & inputdata ) ;
void InputMultiply ( inputdata_t & inputdata ) ;
void InputSetValue ( inputdata_t & inputdata ) ;
void InputSetValueNoFire ( inputdata_t & inputdata ) ;
void InputGetValue ( inputdata_t & inputdata ) ;
void InputEnable ( inputdata_t & inputdata ) ;
void InputDisable ( inputdata_t & inputdata ) ;
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
void PointAt ( Vector & origin , Vector & target , Vector & out ) ;
void InputPointAtLocation ( inputdata_t & inputdata ) ;
void InputPointAtEntity ( inputdata_t & inputdata ) ;
2019-08-31 19:28:20 +00:00
void InputNormalize ( inputdata_t & inputdata ) ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
void InputNormalizeAngles ( inputdata_t & inputdata ) ;
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
void InputVectorAngles ( inputdata_t & inputdata ) ;
void InputAngleVectorForward ( inputdata_t & inputdata ) ;
void InputAngleVectorRight ( inputdata_t & inputdata ) ;
void InputAngleVectorUp ( inputdata_t & inputdata ) ;
2019-08-31 19:28:20 +00:00
void SetCoordinate ( float value , char coord , CBaseEntity * pActivator ) ;
void GetCoordinate ( char coord , CBaseEntity * pActivator ) ;
void AddCoordinate ( float value , char coord , CBaseEntity * pActivator ) ;
void SubtractCoordinate ( float value , char coord , CBaseEntity * pActivator ) ;
void InputSetX ( inputdata_t & inputdata ) { SetCoordinate ( inputdata . value . Float ( ) , ' X ' , inputdata . pActivator ) ; }
void InputSetY ( inputdata_t & inputdata ) { SetCoordinate ( inputdata . value . Float ( ) , ' Y ' , inputdata . pActivator ) ; }
void InputSetZ ( inputdata_t & inputdata ) { SetCoordinate ( inputdata . value . Float ( ) , ' Z ' , inputdata . pActivator ) ; }
void InputGetX ( inputdata_t & inputdata ) { GetCoordinate ( ' X ' , inputdata . pActivator ) ; }
void InputGetY ( inputdata_t & inputdata ) { GetCoordinate ( ' Y ' , inputdata . pActivator ) ; }
void InputGetZ ( inputdata_t & inputdata ) { GetCoordinate ( ' Z ' , inputdata . pActivator ) ; }
void InputAddX ( inputdata_t & inputdata ) { AddCoordinate ( inputdata . value . Float ( ) , ' X ' , inputdata . pActivator ) ; }
void InputAddY ( inputdata_t & inputdata ) { AddCoordinate ( inputdata . value . Float ( ) , ' Y ' , inputdata . pActivator ) ; }
void InputAddZ ( inputdata_t & inputdata ) { AddCoordinate ( inputdata . value . Float ( ) , ' Z ' , inputdata . pActivator ) ; }
void InputSubtractX ( inputdata_t & inputdata ) { SubtractCoordinate ( inputdata . value . Float ( ) , ' X ' , inputdata . pActivator ) ; }
void InputSubtractY ( inputdata_t & inputdata ) { SubtractCoordinate ( inputdata . value . Float ( ) , ' Y ' , inputdata . pActivator ) ; }
void InputSubtractZ ( inputdata_t & inputdata ) { SubtractCoordinate ( inputdata . value . Float ( ) , ' Z ' , inputdata . pActivator ) ; }
// Outputs
COutputVector m_OutValue ;
COutputFloat m_OutX ;
COutputFloat m_OutY ;
COutputFloat m_OutZ ;
COutputVector m_OnGetValue ;
COutputFloat m_OnGetX ;
COutputFloat m_OnGetY ;
COutputFloat m_OnGetZ ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( math_vector , CMathVector ) ;
BEGIN_DATADESC ( CMathVector )
// Keys
DEFINE_KEYFIELD ( m_bDisabled , FIELD_BOOLEAN , " StartDisabled " ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_VECTOR , " Add " , InputAdd ) ,
DEFINE_INPUTFUNC ( FIELD_VECTOR , " Subtract " , InputSubtract ) ,
DEFINE_INPUTFUNC ( FIELD_VECTOR , " Divide " , InputDivide ) ,
DEFINE_INPUTFUNC ( FIELD_VECTOR , " Multiply " , InputMultiply ) ,
DEFINE_INPUTFUNC ( FIELD_VECTOR , " SetValue " , InputSetValue ) ,
DEFINE_INPUTFUNC ( FIELD_VECTOR , " SetValueNoFire " , InputSetValueNoFire ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetValue " , InputGetValue ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Enable " , InputEnable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Disable " , InputDisable ) ,
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
DEFINE_INPUTFUNC ( FIELD_VECTOR , " PointAtLocation " , InputPointAtLocation ) ,
DEFINE_INPUTFUNC ( FIELD_EHANDLE , " PointAtEntity " , InputPointAtEntity ) ,
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " Normalize " , InputNormalize ) ,
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " NormalizeAngles " , InputNormalizeAngles ) ,
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " VectorAngles " , InputVectorAngles ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " AngleVectorForward " , InputAngleVectorForward ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " AngleVectorRight " , InputAngleVectorRight ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " AngleVectorUp " , InputAngleVectorUp ) ,
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetX " , InputSetX ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetY " , InputSetY ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetZ " , InputSetZ ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetX " , InputGetX ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetY " , InputGetY ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetZ " , InputGetZ ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " AddX " , InputAddX ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " AddY " , InputAddY ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " AddZ " , InputAddZ ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SubtractX " , InputSubtractX ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SubtractY " , InputSubtractY ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SubtractZ " , InputSubtractZ ) ,
// Outputs
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_OUTPUT ( m_OutX , " OutX " ) ,
DEFINE_OUTPUT ( m_OutY , " OutY " ) ,
DEFINE_OUTPUT ( m_OutZ , " OutZ " ) ,
DEFINE_OUTPUT ( m_OnGetValue , " OnGetValue " ) ,
DEFINE_OUTPUT ( m_OnGetX , " OnGetX " ) ,
DEFINE_OUTPUT ( m_OnGetY , " OnGetY " ) ,
DEFINE_OUTPUT ( m_OnGetZ , " OnGetZ " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose: Handles key values from the BSP before spawn is called.
//-----------------------------------------------------------------------------
bool CMathVector : : KeyValue ( const char * szKeyName , const char * szValue )
{
//
// Set the initial value of the counter.
//
if ( ! stricmp ( szKeyName , " startvalue " ) )
{
Vector vec ;
UTIL_StringToVector ( vec . Base ( ) , szValue ) ;
m_OutValue . Init ( vec ) ;
return ( true ) ;
}
return ( BaseClass : : KeyValue ( szKeyName , szValue ) ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Handles key values from the BSP before spawn is called.
//-----------------------------------------------------------------------------
bool CMathVector : : KeyValue ( const char * szKeyName , const Vector & vecValue )
{
//
// Set the initial value of the counter.
//
if ( ! stricmp ( szKeyName , " startvalue " ) )
{
m_OutValue . Init ( vecValue ) ;
return true ;
}
// So, CLogicalEntity descends from CBaseEntity...
// Yup.
// ...and CBaseEntity has a version of KeyValue that takes vectors.
// Yup.
// Since it's virtual, I could easily override it just like I could with a KeyValue that takes strings, right?
// Sounds right to me.
// So let me override it.
// *No suitable function exists*
return CBaseEntity : : KeyValue ( szKeyName , vecValue ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for adding to the accumulator value.
// Input : Bit value to add.
//-----------------------------------------------------------------------------
void CMathVector : : InputAdd ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring ADD because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector vec ;
inputdata . value . Vector3D ( vec ) ;
Vector cur ;
m_OutValue . Get ( cur ) ;
UpdateOutValue ( inputdata . pActivator , cur + vec ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for subtracting from the current value.
// Input : Bit value to subtract.
//-----------------------------------------------------------------------------
void CMathVector : : InputSubtract ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring SUBTRACT because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector vec ;
inputdata . value . Vector3D ( vec ) ;
Vector cur ;
m_OutValue . Get ( cur ) ;
UpdateOutValue ( inputdata . pActivator , cur - vec ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for multiplying the current value.
// Input : Float value to multiply the value by.
//-----------------------------------------------------------------------------
void CMathVector : : InputDivide ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring DIVIDE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector vec ;
inputdata . value . Vector3D ( vec ) ;
Vector cur ;
m_OutValue . Get ( cur ) ;
if ( vec . x ! = 0 )
cur . x / = vec . x ;
if ( vec . y ! = 0 )
cur . y / = vec . y ;
if ( vec . z ! = 0 )
cur . z / = vec . z ;
UpdateOutValue ( inputdata . pActivator , cur ) ;
//if (vec.x != 0 && vec.y != 0 && vec.z != 0)
//{
// UpdateOutValue( inputdata.pActivator, cur / vec );
//}
//else
//{
// DevMsg( 1, "LEVEL DESIGN ERROR: Divide by zero in math_vector\n" );
// UpdateOutValue( inputdata.pActivator, cur );
//}
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for multiplying the current value.
// Input : Float value to multiply the value by.
//-----------------------------------------------------------------------------
void CMathVector : : InputMultiply ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring MULTIPLY because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector vec ;
inputdata . value . Vector3D ( vec ) ;
Vector cur ;
m_OutValue . Get ( cur ) ;
UpdateOutValue ( inputdata . pActivator , cur * vec ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for updating the value.
// Input : Bit value to set.
//-----------------------------------------------------------------------------
void CMathVector : : InputSetValue ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring SETVALUE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector vec ;
inputdata . value . Vector3D ( vec ) ;
UpdateOutValue ( inputdata . pActivator , vec ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Input handler for updating the value.
// Input : Bit value to set.
//-----------------------------------------------------------------------------
void CMathVector : : InputSetValueNoFire ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring SETVALUENOFIRE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector vec ;
inputdata . value . Vector3D ( vec ) ;
m_OutValue . Init ( vec ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputGetValue ( inputdata_t & inputdata )
{
Vector cur ;
m_OutValue . Get ( cur ) ;
m_OnGetValue . Set ( cur , inputdata . pActivator , inputdata . pCaller ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputEnable ( inputdata_t & inputdata )
{
m_bDisabled = false ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputDisable ( inputdata_t & inputdata )
{
m_bDisabled = true ;
}
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : PointAt ( Vector & origin , Vector & target , Vector & out )
{
out = origin - target ;
VectorNormalize ( out ) ;
QAngle ang ;
VectorAngles ( out , ang ) ;
out [ 0 ] = ang [ 0 ] ;
out [ 1 ] = ang [ 1 ] ;
out [ 2 ] = ang [ 2 ] ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputPointAtLocation ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring POINTATLOCATION because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector cur ;
m_OutValue . Get ( cur ) ;
Vector location ;
inputdata . value . Vector3D ( location ) ;
PointAt ( cur , location , cur ) ;
UpdateOutValue ( inputdata . pActivator , cur ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputPointAtEntity ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring POINTATENTITY because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
if ( ! inputdata . value . Entity ( ) )
{
Warning ( " %s received no entity to point at \n " , GetDebugName ( ) ) ;
return ;
}
Vector cur ;
m_OutValue . Get ( cur ) ;
Vector location = inputdata . value . Entity ( ) - > GetAbsOrigin ( ) ;
PointAt ( cur , location , cur ) ;
UpdateOutValue ( inputdata . pActivator , cur ) ;
}
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputNormalize ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring NORMALIZE because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector cur ;
m_OutValue . Get ( cur ) ;
VectorNormalize ( cur ) ;
UpdateOutValue ( inputdata . pActivator , cur ) ;
}
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputNormalizeAngles ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring NORMALIZEANGLES because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector cur ;
m_OutValue . Get ( cur ) ;
cur . x = AngleNormalize ( cur . x ) ;
cur . y = AngleNormalize ( cur . y ) ;
cur . z = AngleNormalize ( cur . z ) ;
UpdateOutValue ( inputdata . pActivator , cur ) ;
}
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputVectorAngles ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring VECTORANGLES because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector cur ;
QAngle ang ;
m_OutValue . Get ( cur ) ;
VectorAngles ( cur , ang ) ;
UpdateOutValue ( inputdata . pActivator , Vector ( ang . x , ang . y , ang . z ) ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputAngleVectorForward ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring ANGLEVECTORFORWARD because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector cur ;
m_OutValue . Get ( cur ) ;
AngleVectors ( QAngle ( cur . x , cur . y , cur . z ) , & cur ) ;
UpdateOutValue ( inputdata . pActivator , cur ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputAngleVectorRight ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring ANGLEVECTORRIGHT because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector cur ;
m_OutValue . Get ( cur ) ;
AngleVectors ( QAngle ( cur . x , cur . y , cur . z ) , NULL , & cur , NULL ) ;
UpdateOutValue ( inputdata . pActivator , cur ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : InputAngleVectorUp ( inputdata_t & inputdata )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring ANGLEVECTORUP because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
Vector cur ;
m_OutValue . Get ( cur ) ;
AngleVectors ( QAngle ( cur . x , cur . y , cur . z ) , NULL , NULL , & cur ) ;
UpdateOutValue ( inputdata . pActivator , cur ) ;
}
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : SetCoordinate ( float value , char coord , CBaseEntity * pActivator )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring SET%c because it is disabled \n " , GetDebugName ( ) , coord ) ;
return ;
}
Vector vec ;
m_OutValue . Get ( vec ) ;
switch ( coord )
{
case ' X ' : vec . x = value ; break ;
case ' Y ' : vec . y = value ; break ;
case ' Z ' : vec . z = value ; break ;
}
UpdateOutValue ( pActivator , vec ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : GetCoordinate ( char coord , CBaseEntity * pActivator )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring SET%c because it is disabled \n " , GetDebugName ( ) , coord ) ;
return ;
}
Vector vec ;
m_OutValue . Get ( vec ) ;
switch ( coord )
{
case ' X ' : m_OnGetX . Set ( vec . x , pActivator , this ) ; break ;
case ' Y ' : m_OnGetY . Set ( vec . y , pActivator , this ) ; break ;
case ' Z ' : m_OnGetZ . Set ( vec . z , pActivator , this ) ; break ;
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : AddCoordinate ( float value , char coord , CBaseEntity * pActivator )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring ADD%c because it is disabled \n " , GetDebugName ( ) , coord ) ;
return ;
}
Vector vec ;
m_OutValue . Get ( vec ) ;
switch ( coord )
{
case ' X ' : vec . x + = value ; break ;
case ' Y ' : vec . y + = value ; break ;
case ' Z ' : vec . z + = value ; break ;
}
UpdateOutValue ( pActivator , vec ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathVector : : SubtractCoordinate ( float value , char coord , CBaseEntity * pActivator )
{
if ( m_bDisabled )
{
DevMsg ( " Math Vector %s ignoring SUBTRACT%c because it is disabled \n " , GetDebugName ( ) , coord ) ;
return ;
}
Vector vec ;
m_OutValue . Get ( vec ) ;
switch ( coord )
{
case ' X ' : vec . x + = value ; break ;
case ' Y ' : vec . y + = value ; break ;
case ' Z ' : vec . z + = value ; break ;
}
UpdateOutValue ( pActivator , vec ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Sets the value to the new value, firing the output value.
// Input : vecNewValue - Value to set.
//-----------------------------------------------------------------------------
2020-06-14 10:39:08 +02:00
void CMathVector : : UpdateOutValue ( CBaseEntity * pActivator , Vector vecNewValue )
2019-08-31 19:28:20 +00:00
{
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
if ( HasSpawnFlags ( SF_MATH_VECTOR_DISABLE_X ) )
vecNewValue . x = 0 ;
if ( HasSpawnFlags ( SF_MATH_VECTOR_DISABLE_Y ) )
vecNewValue . y = 0 ;
if ( HasSpawnFlags ( SF_MATH_VECTOR_DISABLE_Z ) )
vecNewValue . z = 0 ;
2019-08-31 19:28:20 +00:00
m_OutValue . Set ( vecNewValue , pActivator , this ) ;
m_OutX . Set ( vecNewValue . x , pActivator , this ) ;
m_OutY . Set ( vecNewValue . y , pActivator , this ) ;
m_OutZ . Set ( vecNewValue . z , pActivator , this ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Draw any debug text overlays
// Input :
// Output : Current text offset from the top
//-----------------------------------------------------------------------------
int CMathVector : : DrawDebugTextOverlays ( void )
{
int text_offset = BaseClass : : DrawDebugTextOverlays ( ) ;
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
{
char tempstr [ 512 ] ;
Vector cur ;
m_OutValue . Get ( cur ) ;
Q_snprintf ( tempstr , sizeof ( tempstr ) , " current value: [%g %g %g] " , ( double ) cur [ 0 ] , ( double ) cur [ 1 ] , ( double ) cur [ 2 ] ) ;
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
if ( m_bDisabled )
{
Q_snprintf ( tempstr , sizeof ( tempstr ) , " *DISABLED* " ) ;
}
else
{
Q_snprintf ( tempstr , sizeof ( tempstr ) , " Enabled. " ) ;
}
EntityText ( text_offset , tempstr , 0 ) ;
text_offset + + ;
}
return text_offset ;
}
//-----------------------------------------------------------------------------
// Purpose: Accesses/modifies any field in a datadesc based on its internal name.
// Oh boy.
//-----------------------------------------------------------------------------
class CLogicFieldAccessor : public CLogicKeyfieldAccessor
{
DECLARE_CLASS ( CLogicFieldAccessor , CLogicKeyfieldAccessor ) ;
private :
bool TestKey ( CBaseEntity * pTarget , const char * szKeyName ) ;
bool SetKeyValue ( CBaseEntity * pTarget , const char * szKeyName , const char * szValue ) ;
bool SetKeyValueBits ( CBaseEntity * pTarget , const char * szKeyName , int iValue , bool bRemove = false ) ;
//DECLARE_DATADESC();
} ;
LINK_ENTITY_TO_CLASS ( logic_datadesc_accessor , CLogicFieldAccessor ) ;
//BEGIN_DATADESC(CLogicFieldAccessor)
//END_DATADESC()
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CLogicFieldAccessor : : TestKey ( CBaseEntity * pTarget , const char * szKeyName )
{
variant_t var ;
for ( datamap_t * dmap = pTarget - > GetDataDescMap ( ) ; dmap ! = NULL ; dmap = dmap - > baseMap )
{
// search through all the readable fields in the data description, looking for a match
for ( int i = 0 ; i < dmap - > dataNumFields ; i + + )
{
if ( dmap - > dataDesc [ i ] . flags & ( FTYPEDESC_SAVE | FTYPEDESC_KEY ) )
{
DevMsg ( " Field Name: %s, \n " , dmap - > dataDesc [ i ] . fieldName ) ;
if ( Matcher_NamesMatch ( szKeyName , dmap - > dataDesc [ i ] . fieldName ) )
{
fieldtype_t fieldtype = dmap - > dataDesc [ i ] . fieldType ;
switch ( fieldtype )
{
case FIELD_TIME : fieldtype = FIELD_FLOAT ; break ;
case FIELD_MODELNAME : fieldtype = FIELD_STRING ; break ;
case FIELD_SOUNDNAME : fieldtype = FIELD_STRING ; break ;
// There's definitely more of them. Add when demand becomes prevalent
}
var . Set ( fieldtype , ( ( char * ) pTarget ) + dmap - > dataDesc [ i ] . fieldOffset [ TD_OFFSET_NORMAL ] ) ;
DevMsg ( " FIELD TYPE: %i \n " , fieldtype ) ;
m_OutValue . Set ( var , pTarget , this ) ;
return true ;
}
}
}
}
m_OnFailed . FireOutput ( pTarget , this ) ;
return false ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CLogicFieldAccessor : : SetKeyValue ( CBaseEntity * pTarget , const char * szKeyName , const char * szValue )
{
for ( datamap_t * dmap = pTarget - > GetDataDescMap ( ) ; dmap ! = NULL ; dmap = dmap - > baseMap )
{
// search through all the readable fields in the data description, looking for a match
for ( int i = 0 ; i < dmap - > dataNumFields ; i + + )
{
if ( dmap - > dataDesc [ i ] . flags & ( FTYPEDESC_SAVE | FTYPEDESC_KEY ) )
{
DevMsg ( " Field Name: %s, \n " , dmap - > dataDesc [ i ] . fieldName ) ;
if ( Matcher_NamesMatch ( szKeyName , dmap - > dataDesc [ i ] . fieldName ) )
{
// Copied from ::ParseKeyvalue...
fieldtype_t fieldtype = FIELD_VOID ;
typedescription_t * pField = & dmap - > dataDesc [ i ] ;
char * data = Datadesc_SetFieldString ( szValue , pTarget , pField , & fieldtype ) ;
if ( ! data )
{
Warning ( " %s cannot set field of type %i. \n " , GetDebugName ( ) , dmap - > dataDesc [ i ] . fieldType ) ;
}
else if ( fieldtype ! = FIELD_VOID )
{
variant_t var ;
var . Set ( fieldtype , data ) ;
m_OutValue . Set ( var , pTarget , this ) ;
return true ;
}
}
}
}
}
m_OnFailed . FireOutput ( pTarget , this ) ;
return false ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CLogicFieldAccessor : : SetKeyValueBits ( CBaseEntity * pTarget , const char * szKeyName , int iValue , bool bRemove )
{
variant_t var ;
for ( datamap_t * dmap = pTarget - > GetDataDescMap ( ) ; dmap ! = NULL ; dmap = dmap - > baseMap )
{
// search through all the readable fields in the data description, looking for a match
for ( int i = 0 ; i < dmap - > dataNumFields ; i + + )
{
if ( dmap - > dataDesc [ i ] . flags & ( FTYPEDESC_SAVE | FTYPEDESC_KEY ) )
{
DevMsg ( " Field Name: %s, \n " , dmap - > dataDesc [ i ] . fieldName ) ;
if ( Matcher_NamesMatch ( szKeyName , dmap - > dataDesc [ i ] . fieldName ) )
{
fieldtype_t fieldtype = dmap - > dataDesc [ i ] . fieldType ;
if ( fieldtype ! = FIELD_INTEGER )
break ;
var . Set ( fieldtype , ( ( char * ) pTarget ) + dmap - > dataDesc [ i ] . fieldOffset [ TD_OFFSET_NORMAL ] ) ;
if ( bRemove )
var . SetInt ( var . Int ( ) & ~ iValue ) ;
else
var . SetInt ( var . Int ( ) | iValue ) ;
DevMsg ( " FIELD TYPE: %i \n " , fieldtype ) ;
m_OutValue . Set ( var , pTarget , this ) ;
return true ;
}
}
}
}
m_OnFailed . FireOutput ( pTarget , this ) ;
return false ;
}
//-----------------------------------------------------------------------------
// Purpose: Passes global variables, like curtime.
//-----------------------------------------------------------------------------
class CGameGlobalVars : public CLogicalEntity
{
DECLARE_CLASS ( CGameGlobalVars , CLogicalEntity ) ;
private :
// Inputs
void InputGetCurtime ( inputdata_t & inputdata ) { m_OutCurtime . Set ( gpGlobals - > curtime , inputdata . pActivator , this ) ; }
void InputGetFrameCount ( inputdata_t & inputdata ) { m_OutFrameCount . Set ( gpGlobals - > framecount , inputdata . pActivator , this ) ; }
void InputGetFrametime ( inputdata_t & inputdata ) { m_OutFrametime . Set ( gpGlobals - > frametime , inputdata . pActivator , this ) ; }
void InputGetTickCount ( inputdata_t & inputdata ) { m_OutTickCount . Set ( gpGlobals - > tickcount , inputdata . pActivator , this ) ; }
void InputGetIntervalPerTick ( inputdata_t & inputdata ) { m_OutIntervalPerTick . Set ( gpGlobals - > interval_per_tick , inputdata . pActivator , this ) ; }
// Outputs
COutputFloat m_OutCurtime ;
COutputInt m_OutFrameCount ;
COutputFloat m_OutFrametime ;
COutputInt m_OutTickCount ;
COutputInt m_OutIntervalPerTick ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( game_globalvars , CGameGlobalVars ) ;
BEGIN_DATADESC ( CGameGlobalVars )
// Inputs
DEFINE_INPUTFUNC ( FIELD_VOID , " GetCurtime " , InputGetCurtime ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetFrameCount " , InputGetFrameCount ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetFrametime " , InputGetFrametime ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetTickCount " , InputGetTickCount ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetIntervalPerTick " , InputGetIntervalPerTick ) ,
// Outputs
DEFINE_OUTPUT ( m_OutCurtime , " OutCurtime " ) ,
DEFINE_OUTPUT ( m_OutFrameCount , " OutFrameCount " ) ,
DEFINE_OUTPUT ( m_OutFrametime , " OutFrametime " ) ,
DEFINE_OUTPUT ( m_OutTickCount , " OutTickCount " ) ,
DEFINE_OUTPUT ( m_OutIntervalPerTick , " OutIntervalPerTick " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//void CGameGlobalVars::InputGetCurtime( inputdata_t &inputdata )
//{
// m_OutCurtime.Set(gpGlobals->curtime, inputdata.pActivator, this);
//}
# define MathModCalc(val1, val2, op) \
switch ( op ) \
{ \
case ' + ' : val1 + = val2 ; break ; \
case ' - ' : val1 - = val2 ; break ; \
case ' * ' : val1 * = val2 ; break ; \
case ' / ' : val1 / = val2 ; break ; \
} \
//-----------------------------------------------------------------------------
// Purpose: Modifies values on the fly.
//-----------------------------------------------------------------------------
class CMathMod : public CLogicalEntity
{
DECLARE_CLASS ( CMathMod , CLogicalEntity ) ;
private :
bool KeyValue ( const char * szKeyName , const char * szValue ) ;
// Inputs
void InputSetMod ( inputdata_t & inputdata ) ;
void InputSetOperator ( inputdata_t & inputdata ) ;
void InputModInt ( inputdata_t & inputdata ) ;
void InputModFloat ( inputdata_t & inputdata ) ;
void InputModVector ( inputdata_t & inputdata ) ;
// Outputs
COutputInt m_OutInt ;
COutputFloat m_OutFloat ;
COutputVector m_OutVector ;
int m_Operator ;
variant_t m_Mod ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( math_mod , CMathMod ) ;
BEGIN_DATADESC ( CMathMod )
DEFINE_KEYFIELD ( m_Operator , FIELD_INTEGER , " SetOperator " ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_INPUT , " SetMod " , InputSetMod ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SetOperator " , InputSetOperator ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " ModInt " , InputModInt ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " ModFloat " , InputModFloat ) ,
DEFINE_INPUTFUNC ( FIELD_VECTOR , " ModVector " , InputModVector ) ,
// Outputs
DEFINE_OUTPUT ( m_OutInt , " OutInt " ) ,
DEFINE_OUTPUT ( m_OutFloat , " OutFloat " ) ,
DEFINE_OUTPUT ( m_OutVector , " OutVector " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose: Handles key values from the BSP before spawn is called.
//-----------------------------------------------------------------------------
bool CMathMod : : KeyValue ( const char * szKeyName , const char * szValue )
{
if ( ! stricmp ( szKeyName , " startvalue " ) )
{
// It converts later anyway
m_Mod . SetString ( AllocPooledString ( szValue ) ) ;
return true ;
}
return BaseClass : : KeyValue ( szKeyName , szValue ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathMod : : InputSetMod ( inputdata_t & inputdata )
{
m_Mod = inputdata . value ;
//if (inputdata.value.FieldType() == FIELD_STRING)
// m_Mod = Variant_Parse(inputdata.value.String());
//else
// m_Mod = inputdata.value;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathMod : : InputSetOperator ( inputdata_t & inputdata )
{
m_Operator = inputdata . value . String ( ) [ 0 ] ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathMod : : InputModInt ( inputdata_t & inputdata )
{
m_Mod . Convert ( FIELD_INTEGER ) ;
DevMsg ( " Operator is %c you see \n " , m_Operator ) ;
int out = inputdata . value . Int ( ) ;
MathModCalc ( out , m_Mod . Int ( ) , m_Operator ) ;
m_OutInt . Set ( out , inputdata . pActivator , this ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathMod : : InputModFloat ( inputdata_t & inputdata )
{
m_Mod . Convert ( FIELD_FLOAT ) ;
float out = inputdata . value . Float ( ) ;
MathModCalc ( out , m_Mod . Float ( ) , m_Operator ) ;
m_OutFloat . Set ( out , inputdata . pActivator , this ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathMod : : InputModVector ( inputdata_t & inputdata )
{
m_Mod . Convert ( FIELD_VECTOR ) ;
Vector out ;
inputdata . value . Vector3D ( out ) ;
Vector mod ;
m_Mod . Vector3D ( mod ) ;
MathModCalc ( out , mod , m_Operator ) ;
m_OutVector . Set ( out , inputdata . pActivator , this ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Gets an entity's model information.
//-----------------------------------------------------------------------------
class CLogicModelInfo : public CLogicalEntity
{
DECLARE_CLASS ( CLogicModelInfo , CLogicalEntity ) ;
private :
CBaseAnimating * GetTarget ( inputdata_t & inputdata ) ;
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
int GetPoseParameterIndex ( CBaseAnimating * pTarget ) ;
2019-08-31 19:28:20 +00:00
// Inputs
//void InputSetTarget( inputdata_t &inputdata ) { BaseClass::InputSetTarget(inputdata); m_hTarget = NULL; }
void InputGetNumSkins ( inputdata_t & inputdata ) ;
void InputLookupSequence ( inputdata_t & inputdata ) ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
void InputLookupActivity ( inputdata_t & inputdata ) ;
2019-08-31 19:28:20 +00:00
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
void InputSetPoseParameterName ( inputdata_t & inputdata ) ;
void InputSetPoseParameterValue ( inputdata_t & inputdata ) ;
void InputGetPoseParameter ( inputdata_t & inputdata ) ;
2019-08-31 19:28:20 +00:00
// Outputs
COutputInt m_OutNumSkins ;
COutputInt m_OnHasSequence ;
COutputEvent m_OnLacksSequence ;
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
COutputFloat m_OutPoseParameterValue ;
// KeyValues
string_t m_iszPoseParameterName ;
int m_iPoseParameterIndex = - 1 ;
2019-08-31 19:28:20 +00:00
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_modelinfo , CLogicModelInfo ) ;
BEGIN_DATADESC ( CLogicModelInfo )
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
DEFINE_KEYFIELD ( m_iszPoseParameterName , FIELD_STRING , " PoseParameterName " ) ,
DEFINE_FIELD ( m_iPoseParameterIndex , FIELD_INTEGER ) ,
2019-08-31 19:28:20 +00:00
// Inputs
DEFINE_INPUTFUNC ( FIELD_VOID , " GetNumSkins " , InputGetNumSkins ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " LookupSequence " , InputLookupSequence ) ,
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
DEFINE_INPUTFUNC ( FIELD_STRING , " LookupActivity " , InputLookupActivity ) ,
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
DEFINE_INPUTFUNC ( FIELD_STRING , " SetPoseParameterName " , InputSetPoseParameterName ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetPoseParameterValue " , InputSetPoseParameterValue ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " GetPoseParameter " , InputGetPoseParameter ) ,
2019-08-31 19:28:20 +00:00
// Outputs
DEFINE_OUTPUT ( m_OutNumSkins , " OutNumSkins " ) ,
DEFINE_OUTPUT ( m_OnHasSequence , " OnHasSequence " ) ,
DEFINE_OUTPUT ( m_OnLacksSequence , " OnLacksSequence " ) ,
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
DEFINE_OUTPUT ( m_OutPoseParameterValue , " OutPoseParameterValue " ) ,
2019-08-31 19:28:20 +00:00
END_DATADESC ( )
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
inline CBaseAnimating * CLogicModelInfo : : GetTarget ( inputdata_t & inputdata )
{
CBaseEntity * pEntity = gEntList . FindEntityByName ( NULL , STRING ( m_target ) , this , inputdata . pActivator , inputdata . pCaller ) ;
if ( ! pEntity | | ! pEntity - > GetBaseAnimating ( ) )
return NULL ;
return pEntity - > GetBaseAnimating ( ) ;
}
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
inline int CLogicModelInfo : : GetPoseParameterIndex ( CBaseAnimating * pTarget )
{
if ( m_iPoseParameterIndex = = - 1 )
m_iPoseParameterIndex = pTarget - > LookupPoseParameter ( STRING ( m_iszPoseParameterName ) ) ;
return m_iPoseParameterIndex ;
}
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicModelInfo : : InputGetNumSkins ( inputdata_t & inputdata )
{
CBaseAnimating * pAnimating = GetTarget ( inputdata ) ;
if ( pAnimating & & pAnimating - > GetModelPtr ( ) )
{
m_OutNumSkins . Set ( pAnimating - > GetModelPtr ( ) - > numskinfamilies ( ) , pAnimating , this ) ;
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicModelInfo : : InputLookupSequence ( inputdata_t & inputdata )
{
CBaseAnimating * pAnimating = GetTarget ( inputdata ) ;
if ( pAnimating & & pAnimating - > GetModelPtr ( ) )
{
int index = pAnimating - > LookupSequence ( inputdata . value . String ( ) ) ;
if ( index ! = ACT_INVALID )
m_OnHasSequence . Set ( index , pAnimating , this ) ;
else
m_OnLacksSequence . FireOutput ( pAnimating , this ) ;
}
}
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicModelInfo : : InputLookupActivity ( inputdata_t & inputdata )
{
CBaseAnimating * pAnimating = GetTarget ( inputdata ) ;
if ( pAnimating & & pAnimating - > GetModelPtr ( ) )
{
int iActivity = ActivityList_IndexForName ( inputdata . value . String ( ) ) ;
if ( iActivity = = - 1 )
{
// Check if it's a raw activity ID
iActivity = atoi ( inputdata . value . String ( ) ) ;
if ( ! ActivityList_NameForIndex ( iActivity ) )
{
2020-06-14 10:39:08 +02:00
Msg ( " %s received invalid LookupActivity %s \n " , GetDebugName ( ) , inputdata . value . String ( ) ) ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
return ;
}
}
int index = pAnimating - > SelectWeightedSequence ( ( Activity ) iActivity ) ;
if ( index ! = ACT_INVALID )
m_OnHasSequence . Set ( index , pAnimating , this ) ;
else
m_OnLacksSequence . FireOutput ( pAnimating , this ) ;
}
}
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 19:08:49 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicModelInfo : : InputSetPoseParameterName ( inputdata_t & inputdata )
{
m_iszPoseParameterName = inputdata . value . StringID ( ) ;
m_iPoseParameterIndex = - 1 ;
CBaseAnimating * pAnimating = GetTarget ( inputdata ) ;
if ( pAnimating & & pAnimating - > GetModelPtr ( ) )
{
if ( GetPoseParameterIndex ( pAnimating ) = = - 1 )
Warning ( " %s: Pose parameter \" %s \" does not exist on %s \n " , GetDebugName ( ) , inputdata . value . String ( ) , STRING ( pAnimating - > GetModelName ( ) ) ) ;
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicModelInfo : : InputSetPoseParameterValue ( inputdata_t & inputdata )
{
CBaseAnimating * pAnimating = GetTarget ( inputdata ) ;
if ( pAnimating & & pAnimating - > GetModelPtr ( ) )
{
int index = GetPoseParameterIndex ( pAnimating ) ;
if ( index ! = - 1 )
{
pAnimating - > SetPoseParameter ( index , inputdata . value . Float ( ) ) ;
}
else
Warning ( " %s: Pose parameter \" %s \" does not exist on %s \n " , GetDebugName ( ) , STRING ( m_iszPoseParameterName ) , STRING ( pAnimating - > GetModelName ( ) ) ) ;
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicModelInfo : : InputGetPoseParameter ( inputdata_t & inputdata )
{
CBaseAnimating * pAnimating = GetTarget ( inputdata ) ;
if ( pAnimating & & pAnimating - > GetModelPtr ( ) )
{
int index = GetPoseParameterIndex ( pAnimating ) ;
if ( index ! = - 1 )
{
m_OutPoseParameterValue . Set ( pAnimating - > GetPoseParameter ( index ) , pAnimating , this ) ;
}
else
Warning ( " %s: Pose parameter \" %s \" does not exist on %s \n " , GetDebugName ( ) , inputdata . value . String ( ) , STRING ( pAnimating - > GetModelName ( ) ) ) ;
}
}
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose: Checks and calculates an entity's position.
//-----------------------------------------------------------------------------
class CLogicEntityPosition : public CLogicalEntity
{
DECLARE_CLASS ( CLogicEntityPosition , CLogicalEntity ) ;
private :
EHANDLE m_hTarget ;
int m_iPositionType ;
enum
{
POSITION_ORIGIN = 0 ,
POSITION_LOCAL ,
POSITION_BBOX ,
POSITION_EYES ,
POSITION_EARS ,
POSITION_ATTACHMENT ,
} ;
// Something that accompanies the position type, like an attachment name.
string_t m_iszPositionParameter ;
CBaseEntity * GetTarget ( CBaseEntity * pActivator , CBaseEntity * pCaller ) ;
2020-06-14 10:39:08 +02:00
Vector GetPosition ( CBaseEntity * pEntity ) ;
QAngle GetAngles ( CBaseEntity * pEntity ) ;
2019-08-31 19:28:20 +00:00
// Inputs
void InputGetPosition ( inputdata_t & inputdata ) ;
void InputSetPosition ( inputdata_t & inputdata ) ;
void InputPredictPosition ( inputdata_t & inputdata ) ;
void InputSetTarget ( inputdata_t & inputdata ) { BaseClass : : InputSetTarget ( inputdata ) ; m_hTarget = NULL ; }
// Outputs
COutputVector m_OutPosition ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
COutputVector m_OutAngles ;
2019-08-31 19:28:20 +00:00
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_entity_position , CLogicEntityPosition ) ;
BEGIN_DATADESC ( CLogicEntityPosition )
// Keys
DEFINE_FIELD ( m_hTarget , FIELD_EHANDLE ) ,
DEFINE_KEYFIELD ( m_iPositionType , FIELD_INTEGER , " PositionType " ) ,
DEFINE_KEYFIELD ( m_iszPositionParameter , FIELD_STRING , " PositionParameter " ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_VOID , " GetPosition " , InputGetPosition ) ,
DEFINE_INPUTFUNC ( FIELD_VECTOR , " SetPosition " , InputSetPosition ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " PredictPosition " , InputPredictPosition ) ,
// Outputs
DEFINE_OUTPUT ( m_OutPosition , " OutPosition " ) ,
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
DEFINE_OUTPUT ( m_OutAngles , " OutAngles " ) ,
2019-08-31 19:28:20 +00:00
END_DATADESC ( )
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
inline CBaseEntity * CLogicEntityPosition : : GetTarget ( CBaseEntity * pActivator , CBaseEntity * pCaller )
{
// Always reset with procedurals
if ( ! m_hTarget | | STRING ( m_target ) [ 0 ] = = ' ! ' )
m_hTarget = gEntList . FindEntityByName ( NULL , STRING ( m_target ) , this , pActivator , pCaller ) ;
return m_hTarget . Get ( ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
2020-06-14 10:39:08 +02:00
Vector CLogicEntityPosition : : GetPosition ( CBaseEntity * pEntity )
2019-08-31 19:28:20 +00:00
{
switch ( m_iPositionType )
{
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
case POSITION_ORIGIN : return pEntity - > GetAbsOrigin ( ) ;
case POSITION_LOCAL : return pEntity - > GetLocalOrigin ( ) ;
case POSITION_BBOX : return pEntity - > WorldSpaceCenter ( ) ;
case POSITION_EYES : return pEntity - > EyePosition ( ) ;
case POSITION_EARS : return pEntity - > EarPosition ( ) ;
2019-08-31 19:28:20 +00:00
case POSITION_ATTACHMENT :
{
CBaseAnimating * pAnimating = pEntity - > GetBaseAnimating ( ) ;
if ( ! pAnimating )
{
Warning ( " %s wants to measure one of %s's attachments, but %s doesn't support them! \n " , GetDebugName ( ) , pEntity - > GetDebugName ( ) , pEntity - > GetDebugName ( ) ) ;
break ;
}
2020-06-14 10:39:08 +02:00
Vector vecPosition ;
2019-08-31 19:28:20 +00:00
pAnimating - > GetAttachment ( STRING ( m_iszPositionParameter ) , vecPosition ) ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
return vecPosition ;
}
}
return vec3_origin ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
2020-06-14 10:39:08 +02:00
QAngle CLogicEntityPosition : : GetAngles ( CBaseEntity * pEntity )
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
{
switch ( m_iPositionType )
{
case POSITION_BBOX :
case POSITION_EARS :
2020-06-14 10:39:08 +02:00
case POSITION_ORIGIN : return pEntity - > GetAbsAngles ( ) ; break ;
case POSITION_LOCAL : return pEntity - > GetLocalAngles ( ) ; break ;
case POSITION_EYES : return pEntity - > EyeAngles ( ) ; break ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
case POSITION_ATTACHMENT :
{
CBaseAnimating * pAnimating = pEntity - > GetBaseAnimating ( ) ;
if ( ! pAnimating )
{
Warning ( " %s wants to measure one of %s's attachments, but %s doesn't support them! \n " , GetDebugName ( ) , pEntity - > GetDebugName ( ) , pEntity - > GetDebugName ( ) ) ;
break ;
}
2020-06-14 10:39:08 +02:00
QAngle AttachmentAngles ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
matrix3x4_t attachmentToWorld ;
pAnimating - > GetAttachment ( pAnimating - > LookupAttachment ( STRING ( m_iszPositionParameter ) ) , attachmentToWorld ) ;
MatrixAngles ( attachmentToWorld , AttachmentAngles ) ;
2020-06-14 10:39:08 +02:00
return AttachmentAngles ;
2019-08-31 19:28:20 +00:00
} break ;
}
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
2020-06-14 10:39:08 +02:00
return vec3_angle ;
2019-08-31 19:28:20 +00:00
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicEntityPosition : : InputGetPosition ( inputdata_t & inputdata )
{
CBaseEntity * pEntity = GetTarget ( inputdata . pActivator , inputdata . pCaller ) ;
if ( ! pEntity )
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
{
m_OutPosition . Set ( vec3_origin , NULL , this ) ;
m_OutAngles . Set ( vec3_angle , NULL , this ) ;
return ;
}
2019-08-31 19:28:20 +00:00
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
m_OutPosition . Set ( GetPosition ( pEntity ) , pEntity , this ) ;
m_OutAngles . Set ( GetAngles ( pEntity ) , pEntity , this ) ;
2019-08-31 19:28:20 +00:00
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicEntityPosition : : InputSetPosition ( inputdata_t & inputdata )
{
CBaseEntity * pEntity = GetTarget ( inputdata . pActivator , inputdata . pCaller ) ;
if ( ! pEntity )
{
Warning ( " %s can't find entity %s for SetPosition! \n " , GetDebugName ( ) , STRING ( m_target ) ) ;
return ;
}
Vector vec ;
inputdata . value . Vector3D ( vec ) ;
// If the position is local, they might want to move local origin instead
if ( m_iPositionType = = POSITION_LOCAL )
pEntity - > SetLocalOrigin ( vec ) ;
else
pEntity - > SetAbsOrigin ( vec ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CLogicEntityPosition : : InputPredictPosition ( inputdata_t & inputdata )
{
CBaseEntity * pEntity = GetTarget ( inputdata . pActivator , inputdata . pCaller ) ;
if ( ! pEntity )
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
{
m_OutPosition . Set ( vec3_origin , NULL , this ) ;
m_OutAngles . Set ( vec3_angle , NULL , this ) ;
return ;
}
2019-08-31 19:28:20 +00:00
Vector vecPosition ;
UTIL_PredictedPosition ( pEntity , GetPosition ( pEntity ) , inputdata . value . Float ( ) , & vecPosition ) ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
QAngle angAngles ;
UTIL_PredictedAngles ( pEntity , GetAngles ( pEntity ) , inputdata . value . Float ( ) , & angAngles ) ;
m_OutPosition . Set ( vecPosition , pEntity , this ) ;
m_OutAngles . Set ( angAngles , pEntity , this ) ;
2019-08-31 19:28:20 +00:00
}
//-----------------------------------------------------------------------------
// Purpose: Accesses context values
//-----------------------------------------------------------------------------
class CLogicContextAccessor : public CLogicalEntity
{
DECLARE_CLASS ( CLogicContextAccessor , CLogicalEntity ) ;
public :
CBaseEntity * GetTarget ( CBaseEntity * pCaller , CBaseEntity * pActivator ) ;
bool TestContext ( CBaseEntity * pTarget , const char * szKeyName ) ;
void SetContext ( CBaseEntity * pTarget , const char * szKeyName , string_t szValue ) ;
// Inputs
void InputTest ( inputdata_t & inputdata ) ;
void InputTestContext ( inputdata_t & inputdata ) ;
void InputTestTarget ( inputdata_t & inputdata ) ;
void InputSetContext ( inputdata_t & inputdata ) ;
void InputSetValue ( inputdata_t & inputdata ) ;
//bool ReadUnregisteredKeyfields(CBaseEntity *pTarget, const char *szKeyName, variant_t *variant);
COutputString m_OutValue ;
COutputEvent m_OnFailed ;
string_t m_iszContext ;
DECLARE_DATADESC ( ) ;
} ;
LINK_ENTITY_TO_CLASS ( logic_context_accessor , CLogicContextAccessor ) ;
BEGIN_DATADESC ( CLogicContextAccessor )
DEFINE_KEYFIELD ( m_iszContext , FIELD_STRING , " context " ) ,
// Inputs
DEFINE_INPUTFUNC ( FIELD_VOID , " Test " , InputTest ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " TestContext " , InputTestContext ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " TestTarget " , InputTestTarget ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SetContext " , InputSetContext ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SetValue " , InputSetValue ) ,
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_OUTPUT ( m_OnFailed , " OnFailed " ) ,
END_DATADESC ( )
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
inline CBaseEntity * CLogicContextAccessor : : GetTarget ( CBaseEntity * pCaller , CBaseEntity * pActivator )
{
return gEntList . FindEntityByName ( NULL , m_target , this , pActivator , pCaller ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CLogicContextAccessor : : TestContext ( CBaseEntity * pTarget , const char * szKeyName )
{
int idx = pTarget - > FindContextByName ( szKeyName ) ;
if ( idx ! = - 1 )
{
m_OutValue . Set ( FindPooledString ( pTarget - > GetContextValue ( idx ) ) , pTarget , this ) ;
return true ;
}
else
{
m_OnFailed . FireOutput ( pTarget , this ) ;
return false ;
2013-12-02 19:31:46 -08:00
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CLogicContextAccessor : : SetContext ( CBaseEntity * pTarget , const char * szKeyName , string_t szValue )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
pTarget - > AddContext ( szKeyName , STRING ( szValue ) ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
m_OutValue . Set ( szValue , pTarget , this ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicContextAccessor : : InputTest ( inputdata_t & inputdata )
{
CBaseEntity * pTarget = GetTarget ( inputdata . pCaller , inputdata . pActivator ) ;
if ( pTarget & & m_iszContext ! = NULL_STRING )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
TestContext ( pTarget , STRING ( m_iszContext ) ) ;
}
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicContextAccessor : : InputTestContext ( inputdata_t & inputdata )
{
const char * input = inputdata . value . String ( ) ;
CBaseEntity * pTarget = GetTarget ( inputdata . pCaller , inputdata . pActivator ) ;
if ( input & & pTarget )
{
TestContext ( pTarget , input ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicContextAccessor : : InputTestTarget ( inputdata_t & inputdata )
{
m_target = inputdata . value . StringID ( ) ;
CBaseEntity * pTarget = gEntList . FindEntityByName ( NULL , inputdata . value . StringID ( ) , this , inputdata . pCaller , inputdata . pActivator ) ;
if ( pTarget & & m_iszContext ! = NULL_STRING )
{
TestContext ( pTarget , STRING ( m_iszContext ) ) ;
}
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose:
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CLogicContextAccessor : : InputSetContext ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_iszContext = inputdata . value . StringID ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicContextAccessor : : InputSetValue ( inputdata_t & inputdata )
{
CBaseEntity * pTarget = GetTarget ( inputdata . pCaller , inputdata . pActivator ) ;
if ( pTarget )
{
SetContext ( pTarget , STRING ( m_iszContext ) , inputdata . value . StringID ( ) ) ;
}
}
//-----------------------------------------------------------------------------
// Purpose: Replicates light pattern functionality.
//-----------------------------------------------------------------------------
class CMathLightPattern : public CLogicalEntity
{
DECLARE_CLASS ( CMathLightPattern , CLogicalEntity ) ;
private :
string_t m_iszPattern ;
bool m_bDisabled ;
void Spawn ( ) ;
bool KeyValue ( const char * szKeyName , const char * szValue ) ;
void OutputCurPattern ( ) ;
void StartPatternThink ( ) ;
void PatternThink ( ) ;
unsigned char m_NextLetter = 0 ;
// How fast the pattern should be
float m_flPatternSpeed = 0.1f ;
inline bool VerifyPatternValid ( ) { return ( m_iszPattern ! = NULL_STRING & & STRING ( m_iszPattern ) [ 0 ] ! = ' \0 ' ) ; }
2013-12-02 19:31:46 -08:00
// Inputs
2019-08-31 19:28:20 +00:00
void InputSetStyle ( inputdata_t & inputdata ) ;
void InputSetPattern ( inputdata_t & inputdata ) ;
void InputEnable ( inputdata_t & inputdata ) ;
void InputDisable ( inputdata_t & inputdata ) ;
void InputToggle ( inputdata_t & inputdata ) ;
// Outputs
COutputFloat m_OutValue ;
COutputString m_OutLetter ;
COutputEvent m_OnLightOn ;
COutputEvent m_OnLightOff ;
2013-12-02 19:31:46 -08:00
DECLARE_DATADESC ( ) ;
} ;
2019-08-31 19:28:20 +00:00
LINK_ENTITY_TO_CLASS ( math_lightpattern , CMathLightPattern ) ;
BEGIN_DATADESC ( CMathLightPattern )
// Keys
DEFINE_KEYFIELD ( m_iszPattern , FIELD_STRING , " pattern " ) ,
DEFINE_KEYFIELD ( m_bDisabled , FIELD_BOOLEAN , " StartDisabled " ) ,
DEFINE_KEYFIELD ( m_flPatternSpeed , FIELD_FLOAT , " PatternSpeed " ) ,
2013-12-02 19:31:46 -08:00
// Inputs
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_INTEGER , " SetStyle " , InputSetStyle ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " SetPattern " , InputSetPattern ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Enable " , InputEnable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Disable " , InputDisable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Toggle " , InputToggle ) ,
// Outputs
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_OUTPUT ( m_OutLetter , " OutLetter " ) ,
DEFINE_OUTPUT ( m_OnLightOn , " OnLightOn " ) ,
DEFINE_OUTPUT ( m_OnLightOff , " OnLightOff " ) ,
DEFINE_THINKFUNC ( PatternThink ) ,
DEFINE_FIELD ( m_NextLetter , FIELD_CHARACTER ) ,
2013-12-02 19:31:46 -08:00
END_DATADESC ( )
2019-08-31 19:28:20 +00:00
extern const char * GetDefaultLightstyleString ( int styleIndex ) ;
static const char * s_pLightPatternContext = " PatternContext " ;
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose:
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathLightPattern : : Spawn ( )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
BaseClass : : Spawn ( ) ;
if ( ! m_bDisabled & & VerifyPatternValid ( ) )
StartPatternThink ( ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathLightPattern : : OutputCurPattern ( )
{
// This code looks messy, but it does what it's supposed to and is safe enough.
// First, we get the next letter in the pattern sequence.
// Next, we calculate its integral proximity to the character 'a' (fully dark)
// and calculate its approximate brightness by dividing it by the number of letters in the alphabet other than a.
// We output that brightness value for things like projected textures and other custom intensity values
// so they could replicate the patterns of their corresponding vrad lights.
char cLetter = STRING ( m_iszPattern ) [ m_NextLetter ] ;
int iValue = ( cLetter - ' a ' ) ;
float flResult = iValue ! = 0 ? ( ( float ) iValue / 25.0f ) : 0.0f ;
m_OutValue . Set ( flResult , this , this ) ;
// User-friendly "Light on, light off" outputs
if ( flResult > 0 )
m_OnLightOn . FireOutput ( this , this ) ;
else
m_OnLightOff . FireOutput ( this , this ) ;
// Create a string with cLetter and a null terminator.
char szLetter [ 2 ] = { cLetter , ' \0 ' } ;
m_OutLetter . Set ( AllocPooledString ( szLetter ) , this , this ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathLightPattern : : StartPatternThink ( )
{
// Output our current/next one immediately.
OutputCurPattern ( ) ;
// Start thinking now.
SetContextThink ( & CMathLightPattern : : PatternThink , gpGlobals - > curtime , s_pLightPatternContext ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathLightPattern : : PatternThink ( )
{
// Output our current/next one
OutputCurPattern ( ) ;
// Increment
m_NextLetter + + ;
if ( STRING ( m_iszPattern ) [ m_NextLetter ] = = ' \0 ' )
m_NextLetter = 0 ;
//m_OutLetter.Set(AllocPooledString(UTIL_VarArgs("%c", m_NextLetter)), this, this);
SetNextThink ( gpGlobals - > curtime + m_flPatternSpeed , s_pLightPatternContext ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CMathLightPattern : : KeyValue ( const char * szKeyName , const char * szValue )
{
if ( FStrEq ( szKeyName , " style " ) )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_iszPattern = AllocPooledString ( GetDefaultLightstyleString ( atoi ( szValue ) ) ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
else
return BaseClass : : KeyValue ( szKeyName , szValue ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
return true ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathLightPattern : : InputSetStyle ( inputdata_t & inputdata )
{
m_iszPattern = AllocPooledString ( GetDefaultLightstyleString ( inputdata . value . Int ( ) ) ) ;
Mapbase v5.0
- Added keyvalue to hl2_gamerules which allows respawning in singleplayer
- Added the game instructor system (including env_instructor_hint) from later Valve games using a VDC tutorial which adjusts the version from the Alien Swarm SDK to FPS rules and a Source 2013 environment; Also added new KV and icons for further control from mappers (tutorial mentioned by Maestra Fenix)
- Added L4D/TF2 glows + point_glow entity as an all-purpose SDK-based off-shoot of tf_glow
- Fixed weapon pickup sound not playing (reported by Sl0th and later Cvoxulary)
- Fixed env_projectedtextures not updating on save/load
- Added func_fake_worldportal, a spatial point_camera inspired by linked_portal_door based on SDK code alone (WIP, may be changed a lot in future updates)
- Added option for point_camera and func_reflective_glass to use different render targets, therefore allowing multiple cameras and mirrors to be active at the same time
- Added additional RT camera textures to choose from with a default of 3, but also controllable through a -numcameratextures command line param
- Added adjustable convars for main view NearZ and skybox NearZ (suggested by someone recently, also suggested by Klems over a year ago)
- Fixed map-specific localization files, cleaned up map-specific file code
- Added a new block to gameinfo.txt which allows mods to automatically append their own command line parameters
- Fixed math_lightpattern corruption when setting pattern/style while active
- Fixed the "Touch" input crashing when given no entity
- Added a way to add EFlags via keyvalue (suggested by Niker107)
- Fixed ai_script_conditions not working without a NPC actor (reported by MetroHam)
- Fixed point_radiation_source causing huge problems when intensity is 0, even though it was already advised against (reported by beefbacon)
- Added "Mapbase" header to Mapbase-specific code files
- Fixed an issue with updating sky_camera not obtaining area correctly, causing some entities to not draw in the skybox
- Added "CopyFogController" and "CopyFogControllerWithScale" inputs to sky_camera, which copy fog parameters directly from a fog controller
- Added "SetScale" input to sky_camera for live scale changing
- Added convar to control player crouch speed multiplier (suggested by ArtyIF)
- Added a ton of fixes for people running the Debug configuration of the codebase (partial credit to stepa2)
- Added support for pre-defined enums and constants in VScript, starting with various values from the SDK code (damage types, trace masks, etc.)
- Added limited support for Valve's Quaternion class in VScript
- Added new instance helper capabilities, destructible game instances, and other misc. changes to VScript library
- Replaced most of the VScript "accessor" classes with direct references to the original classes, as they were getting complicated fast and adding new VScript-only functions to the original classes might not be as bad as previously thought
- Added base NPC hooks for AI sensing in VScript (allows control over sight and hearing), also exposed CSound for it
- Added various functions and hooks for VPhysics integration in VScript
- Added VScript-based custom suit devices
- Expanded trace info exposed to VScript to allow plane and surface access (suggested by krassell)
- Added ability to insert localization strings through VScript
- Added various misc. VScript functions with various purposes, including reading/writing EFlags, movetypes, collision groups, etc.
- Fixed VBSP not being able to correctly parse parallax corrected cubemaps in maps with instances
2020-08-14 21:21:25 +00:00
m_NextLetter = 0 ;
2019-08-31 19:28:20 +00:00
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathLightPattern : : InputSetPattern ( inputdata_t & inputdata )
{
m_iszPattern = inputdata . value . StringID ( ) ;
Mapbase v5.0
- Added keyvalue to hl2_gamerules which allows respawning in singleplayer
- Added the game instructor system (including env_instructor_hint) from later Valve games using a VDC tutorial which adjusts the version from the Alien Swarm SDK to FPS rules and a Source 2013 environment; Also added new KV and icons for further control from mappers (tutorial mentioned by Maestra Fenix)
- Added L4D/TF2 glows + point_glow entity as an all-purpose SDK-based off-shoot of tf_glow
- Fixed weapon pickup sound not playing (reported by Sl0th and later Cvoxulary)
- Fixed env_projectedtextures not updating on save/load
- Added func_fake_worldportal, a spatial point_camera inspired by linked_portal_door based on SDK code alone (WIP, may be changed a lot in future updates)
- Added option for point_camera and func_reflective_glass to use different render targets, therefore allowing multiple cameras and mirrors to be active at the same time
- Added additional RT camera textures to choose from with a default of 3, but also controllable through a -numcameratextures command line param
- Added adjustable convars for main view NearZ and skybox NearZ (suggested by someone recently, also suggested by Klems over a year ago)
- Fixed map-specific localization files, cleaned up map-specific file code
- Added a new block to gameinfo.txt which allows mods to automatically append their own command line parameters
- Fixed math_lightpattern corruption when setting pattern/style while active
- Fixed the "Touch" input crashing when given no entity
- Added a way to add EFlags via keyvalue (suggested by Niker107)
- Fixed ai_script_conditions not working without a NPC actor (reported by MetroHam)
- Fixed point_radiation_source causing huge problems when intensity is 0, even though it was already advised against (reported by beefbacon)
- Added "Mapbase" header to Mapbase-specific code files
- Fixed an issue with updating sky_camera not obtaining area correctly, causing some entities to not draw in the skybox
- Added "CopyFogController" and "CopyFogControllerWithScale" inputs to sky_camera, which copy fog parameters directly from a fog controller
- Added "SetScale" input to sky_camera for live scale changing
- Added convar to control player crouch speed multiplier (suggested by ArtyIF)
- Added a ton of fixes for people running the Debug configuration of the codebase (partial credit to stepa2)
- Added support for pre-defined enums and constants in VScript, starting with various values from the SDK code (damage types, trace masks, etc.)
- Added limited support for Valve's Quaternion class in VScript
- Added new instance helper capabilities, destructible game instances, and other misc. changes to VScript library
- Replaced most of the VScript "accessor" classes with direct references to the original classes, as they were getting complicated fast and adding new VScript-only functions to the original classes might not be as bad as previously thought
- Added base NPC hooks for AI sensing in VScript (allows control over sight and hearing), also exposed CSound for it
- Added various functions and hooks for VPhysics integration in VScript
- Added VScript-based custom suit devices
- Expanded trace info exposed to VScript to allow plane and surface access (suggested by krassell)
- Added ability to insert localization strings through VScript
- Added various misc. VScript functions with various purposes, including reading/writing EFlags, movetypes, collision groups, etc.
- Fixed VBSP not being able to correctly parse parallax corrected cubemaps in maps with instances
2020-08-14 21:21:25 +00:00
m_NextLetter = 0 ;
2019-08-31 19:28:20 +00:00
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathLightPattern : : InputEnable ( inputdata_t & inputdata )
{
if ( VerifyPatternValid ( ) )
StartPatternThink ( ) ;
else
Warning ( " %s tried to enable without valid pattern \n " , GetDebugName ( ) ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathLightPattern : : InputDisable ( inputdata_t & inputdata )
{
SetContextThink ( NULL , TICK_NEVER_THINK , s_pLightPatternContext ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CMathLightPattern : : InputToggle ( inputdata_t & inputdata )
{
if ( GetNextThink ( s_pLightPatternContext ) ! = TICK_NEVER_THINK )
InputDisable ( inputdata ) ;
else
InputEnable ( inputdata ) ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose: Sequences for keypads, etc.
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
# define MAX_SEQUENCE_CASES 16
class CLogicSequence : public CLogicalEntity
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DECLARE_CLASS ( CLogicSequence , CLogicalEntity ) ;
public :
CLogicSequence ( ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
void Activate ( ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
bool KeyValue ( const char * szKeyName , const char * szValue ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
void TestCase ( int iCase , string_t iszValue , CBaseEntity * pActivator ) ;
void SequenceComplete ( string_t iszValue , CBaseEntity * pActivator ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
private :
string_t m_iszCase [ MAX_SEQUENCE_CASES ] ;
int m_iNumCases ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
bool m_bDisabled ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
bool m_bDontIncrementOnPass ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
// Inputs
void InputEnable ( inputdata_t & inputdata ) ;
void InputDisable ( inputdata_t & inputdata ) ;
void InputToggle ( inputdata_t & inputdata ) ;
void InputInValue ( inputdata_t & inputdata ) ;
void InputSetCurrentCase ( inputdata_t & inputdata ) ;
void InputSetCurrentCaseNoFire ( inputdata_t & inputdata ) ;
void InputIncrementSequence ( inputdata_t & inputdata ) ;
void InputResetSequence ( inputdata_t & inputdata ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
// Outputs
COutputInt m_CurCase ;
COutputString m_OnCasePass ;
COutputString m_OnCaseFail ;
COutputString m_OnSequenceComplete ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
DECLARE_DATADESC ( ) ;
} ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
LINK_ENTITY_TO_CLASS ( logic_sequence , CLogicSequence ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
BEGIN_DATADESC ( CLogicSequence )
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
// Keys
DEFINE_KEYFIELD ( m_iszCase [ 0 ] , FIELD_STRING , " Case01 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 1 ] , FIELD_STRING , " Case02 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 2 ] , FIELD_STRING , " Case03 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 3 ] , FIELD_STRING , " Case04 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 4 ] , FIELD_STRING , " Case05 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 5 ] , FIELD_STRING , " Case06 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 6 ] , FIELD_STRING , " Case07 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 7 ] , FIELD_STRING , " Case08 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 8 ] , FIELD_STRING , " Case09 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 9 ] , FIELD_STRING , " Case10 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 10 ] , FIELD_STRING , " Case11 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 11 ] , FIELD_STRING , " Case12 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 12 ] , FIELD_STRING , " Case13 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 13 ] , FIELD_STRING , " Case14 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 14 ] , FIELD_STRING , " Case15 " ) ,
DEFINE_KEYFIELD ( m_iszCase [ 15 ] , FIELD_STRING , " Case16 " ) ,
// This doesn't need to be saved, it can be assigned every Activate()
//DEFINE_FIELD( m_iNumCases, FIELD_INTEGER ),
DEFINE_KEYFIELD ( m_bDisabled , FIELD_BOOLEAN , " StartDisabled " ) ,
DEFINE_KEYFIELD ( m_bDontIncrementOnPass , FIELD_BOOLEAN , " DontIncrementOnPass " ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
// Inputs
2013-12-02 19:31:46 -08:00
DEFINE_INPUTFUNC ( FIELD_VOID , " Enable " , InputEnable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Disable " , InputDisable ) ,
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " Toggle " , InputToggle ) ,
DEFINE_INPUTFUNC ( FIELD_STRING , " InValue " , InputInValue ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " SetCurrentCase " , InputSetCurrentCase ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " SetCurrentCaseNoFire " , InputSetCurrentCaseNoFire ) ,
DEFINE_INPUTFUNC ( FIELD_INTEGER , " IncrementSequence " , InputIncrementSequence ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " ResetSequence " , InputResetSequence ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
// Outputs
DEFINE_OUTPUT ( m_CurCase , " OutCurCase " ) ,
DEFINE_OUTPUT ( m_OnCasePass , " OnCasePass " ) ,
DEFINE_OUTPUT ( m_OnCaseFail , " OnCaseFail " ) ,
DEFINE_OUTPUT ( m_OnSequenceComplete , " OnSequenceComplete " ) ,
END_DATADESC ( )
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose:
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
CLogicSequence : : CLogicSequence ( )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_CurCase . Init ( 1 ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : Activate ( void )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
BaseClass : : Activate ( ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
// Count number of cases
for ( m_iNumCases = 0 ; m_iNumCases < MAX_SEQUENCE_CASES ; m_iNumCases + + )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( m_iszCase [ m_iNumCases ] = = NULL_STRING )
break ;
2013-12-02 19:31:46 -08:00
}
}
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose: Cache user entity field values until spawn is called.
// Input : szKeyName - Key to handle.
// szValue - Value for key.
// Output : Returns true if the key was handled, false if not.
//-----------------------------------------------------------------------------
bool CLogicSequence : : KeyValue ( const char * szKeyName , const char * szValue )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( FStrEq ( szKeyName , " StartCase " ) )
{
m_CurCase . Init ( atoi ( szValue ) ) ;
}
else
return BaseClass : : KeyValue ( szKeyName , szValue ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
return true ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : TestCase ( int iCase , string_t iszValue , CBaseEntity * pActivator )
{
if ( m_bDisabled )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
DevMsg ( " %s ignoring case test because it is disabled \n " , GetDebugName ( ) ) ;
return ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
// Arrays are 0-based, so the index is (iCase - 1)
int iIndex = iCase - 1 ;
if ( iIndex > = m_iNumCases )
{
DevMsg ( " %s ignoring case test because the current case %i is greater than or equal to the number of cases %i \n " , GetDebugName ( ) , iCase , m_iNumCases ) ;
return ;
}
if ( Matcher_Match ( STRING ( m_iszCase [ iIndex ] ) , STRING ( iszValue ) ) )
{
m_OnCasePass . Set ( iszValue , pActivator , this ) ;
if ( ! m_bDontIncrementOnPass )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_CurCase . Set ( iCase + 1 , pActivator , this ) ;
if ( m_CurCase . Get ( ) > m_iNumCases )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
// Sequence complete!
SequenceComplete ( iszValue , pActivator ) ;
2013-12-02 19:31:46 -08:00
}
}
else
{
2019-08-31 19:28:20 +00:00
m_CurCase . Set ( iCase , pActivator , this ) ;
2013-12-02 19:31:46 -08:00
}
}
2019-08-31 19:28:20 +00:00
else
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_OnCaseFail . Set ( iszValue , pActivator , this ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : SequenceComplete ( string_t iszValue , CBaseEntity * pActivator )
{
m_OnSequenceComplete . Set ( iszValue , pActivator , this ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : InputEnable ( inputdata_t & inputdata )
{
m_bDisabled = false ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : InputDisable ( inputdata_t & inputdata )
{
m_bDisabled = true ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : InputToggle ( inputdata_t & inputdata )
{
m_bDisabled = ( m_bDisabled = = false ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : InputInValue ( inputdata_t & inputdata )
{
TestCase ( m_CurCase . Get ( ) , inputdata . value . StringID ( ) , inputdata . pActivator ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : InputSetCurrentCase ( inputdata_t & inputdata )
{
m_CurCase . Set ( inputdata . value . Int ( ) , inputdata . pActivator , this ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : InputSetCurrentCaseNoFire ( inputdata_t & inputdata )
{
m_CurCase . Init ( inputdata . value . Int ( ) ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLogicSequence : : InputIncrementSequence ( inputdata_t & inputdata )
{
int iInc = inputdata . value . Int ( ) ;
m_CurCase . Set ( m_CurCase . Get ( ) + ( iInc ! = 0 ? iInc : 1 ) , inputdata . pActivator , this ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose:
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CLogicSequence : : InputResetSequence ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_CurCase . Set ( 1 , inputdata . pActivator , this ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
// Purpose: Generates various types of numbers based on existing material proxies
//-----------------------------------------------------------------------------
class CMathGenerate : public CLogicalEntity
{
public :
DECLARE_CLASS ( CMathGenerate , CLogicalEntity ) ;
CMathGenerate ( ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
enum GenerateType_t
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
GENERATE_SINE_WAVE ,
GENERATE_LINEAR_RAMP ,
GENERATE_UNIFORM_NOISE ,
GENERATE_GAUSSIAN_NOISE ,
GENERATE_EXPONENTIAL ,
2013-12-02 19:31:46 -08:00
} ;
2019-08-31 19:28:20 +00:00
// Keys
float m_flMax ;
float m_flMin ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
float m_flParam1 ;
float m_flParam2 ;
bool m_bDisabled ;
GenerateType_t m_iGenerateType ;
2013-12-02 19:31:46 -08:00
// Inputs
2019-08-31 19:28:20 +00:00
void InputSetValue ( inputdata_t & inputdata ) ;
void InputSetValueNoFire ( inputdata_t & inputdata ) ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
void InputGetValue ( inputdata_t & inputdata ) ;
2019-08-31 19:28:20 +00:00
void InputSetGenerateType ( inputdata_t & inputdata ) ;
void InputEnable ( inputdata_t & inputdata ) ;
void InputDisable ( inputdata_t & inputdata ) ;
void InputToggle ( inputdata_t & inputdata ) ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
void UpdateOutValue ( float fNewValue , CBaseEntity * pActivator = NULL ) ;
void UpdateOutValueSine ( float fNewValue , CBaseEntity * pActivator = NULL ) ;
2019-08-31 19:28:20 +00:00
// Basic functions
void Spawn ( ) ;
bool KeyValue ( const char * szKeyName , const char * szValue ) ;
void StartGenerating ( ) ;
void StopGenerating ( ) ;
// Number generation functions
void GenerateSineWave ( ) ;
void GenerateLinearRamp ( ) ;
void GenerateUniformNoise ( ) ;
void GenerateGaussianNoise ( ) ;
void GenerateExponential ( ) ;
// The gaussian stream normally only exists on the client, so we use our own.
static CGaussianRandomStream m_GaussianStream ;
2013-12-02 19:31:46 -08:00
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
bool m_bHitMin ; // Set when we reach or go below our minimum value, cleared if we go above it again.
bool m_bHitMax ; // Set when we reach or exceed our maximum value, cleared if we fall below it again.
2013-12-02 19:31:46 -08:00
// Outputs
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
COutputFloat m_OutValue ;
COutputFloat m_OnGetValue ; // Used for polling the counter value.
COutputEvent m_OnHitMin ;
COutputEvent m_OnHitMax ;
COutputEvent m_OnChangedFromMin ;
COutputEvent m_OnChangedFromMax ;
2013-12-02 19:31:46 -08:00
DECLARE_DATADESC ( ) ;
} ;
2019-08-31 19:28:20 +00:00
LINK_ENTITY_TO_CLASS ( math_generate , CMathGenerate ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
BEGIN_DATADESC ( CMathGenerate )
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
DEFINE_INPUT ( m_flMax , FIELD_FLOAT , " SetHitMax " ) ,
DEFINE_INPUT ( m_flMin , FIELD_FLOAT , " SetHitMin " ) ,
DEFINE_INPUT ( m_flParam1 , FIELD_FLOAT , " SetParam1 " ) ,
DEFINE_INPUT ( m_flParam2 , FIELD_FLOAT , " SetParam2 " ) ,
DEFINE_KEYFIELD ( m_bDisabled , FIELD_BOOLEAN , " StartDisabled " ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
DEFINE_KEYFIELD ( m_iGenerateType , FIELD_INTEGER , " GenerateType " ) ,
2013-12-02 19:31:46 -08:00
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
DEFINE_FIELD ( m_bHitMax , FIELD_BOOLEAN ) ,
DEFINE_FIELD ( m_bHitMin , FIELD_BOOLEAN ) ,
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetValue " , InputSetValue ) ,
DEFINE_INPUTFUNC ( FIELD_FLOAT , " SetValueNoFire " , InputSetValueNoFire ) ,
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " GetValue " , InputGetValue ) ,
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_INTEGER , " SetGenerateType " , InputSetGenerateType ) ,
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
DEFINE_INPUTFUNC ( FIELD_VOID , " Enable " , InputEnable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Disable " , InputDisable ) ,
DEFINE_INPUTFUNC ( FIELD_VOID , " Toggle " , InputToggle ) ,
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
DEFINE_OUTPUT ( m_OutValue , " OutValue " ) ,
DEFINE_OUTPUT ( m_OnHitMin , " OnHitMin " ) ,
DEFINE_OUTPUT ( m_OnHitMax , " OnHitMax " ) ,
DEFINE_OUTPUT ( m_OnGetValue , " OnGetValue " ) ,
DEFINE_OUTPUT ( m_OnChangedFromMin , " OnChangedFromMin " ) ,
DEFINE_OUTPUT ( m_OnChangedFromMax , " OnChangedFromMax " ) ,
2019-08-31 19:28:20 +00:00
DEFINE_THINKFUNC ( GenerateSineWave ) ,
DEFINE_THINKFUNC ( GenerateLinearRamp ) ,
DEFINE_THINKFUNC ( GenerateUniformNoise ) ,
DEFINE_THINKFUNC ( GenerateGaussianNoise ) ,
DEFINE_THINKFUNC ( GenerateExponential ) ,
2013-12-02 19:31:46 -08:00
END_DATADESC ( )
2019-08-31 19:28:20 +00:00
CGaussianRandomStream CMathGenerate : : m_GaussianStream ;
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose:
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
CMathGenerate : : CMathGenerate ( )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_GaussianStream . AttachToStream ( random ) ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose:
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathGenerate : : Spawn ( )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
BaseClass : : Spawn ( ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
if ( ! m_bDisabled )
StartGenerating ( ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
// Purpose:
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
bool CMathGenerate : : KeyValue ( const char * szKeyName , const char * szValue )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
if ( FStrEq ( szKeyName , " InitialValue " ) )
2013-12-02 19:31:46 -08:00
{
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
m_OutValue . Init ( atof ( szValue ) ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
else
return BaseClass : : KeyValue ( szKeyName , szValue ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
return true ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : InputSetValue ( inputdata_t & inputdata )
{
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
UpdateOutValue ( inputdata . value . Float ( ) , inputdata . pActivator ) ;
2019-08-31 19:28:20 +00:00
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathGenerate : : InputSetValueNoFire ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
m_OutValue . Init ( inputdata . value . Float ( ) ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : InputGetValue ( inputdata_t & inputdata )
{
float flOutValue = m_OutValue . Get ( ) ;
m_OnGetValue . Set ( flOutValue , inputdata . pActivator , inputdata . pCaller ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : InputSetGenerateType ( inputdata_t & inputdata )
{
m_iGenerateType = ( GenerateType_t ) inputdata . value . Int ( ) ;
if ( GetNextThink ( ) ! = TICK_NEVER_THINK )
{
// Change our generation function if we're already generating.
// StartGenerating() should set to the new function.
StartGenerating ( ) ;
}
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathGenerate : : InputEnable ( inputdata_t & inputdata )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
m_bDisabled = false ;
StartGenerating ( ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : InputDisable ( inputdata_t & inputdata )
{
m_bDisabled = true ;
StopGenerating ( ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : InputToggle ( inputdata_t & inputdata )
{
m_bDisabled ? InputEnable ( inputdata ) : InputDisable ( inputdata ) ;
}
2013-12-02 19:31:46 -08:00
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
//-----------------------------------------------------------------------------
// Purpose: Sets the value to the new value, clamping and firing the output value.
// Input : fNewValue - Value to set.
//-----------------------------------------------------------------------------
void CMathGenerate : : UpdateOutValue ( float fNewValue , CBaseEntity * pActivator )
{
if ( ( m_flMin ! = 0 ) | | ( m_flMax ! = 0 ) )
{
//
// Fire an output any time we reach or exceed our maximum value.
//
if ( fNewValue > = m_flMax | | ( m_iGenerateType = = GENERATE_SINE_WAVE & & fNewValue > = ( m_flMax * 0.995f ) ) )
{
if ( ! m_bHitMax )
{
m_bHitMax = true ;
m_OnHitMax . FireOutput ( pActivator , this ) ;
}
}
else
{
// Fire an output if we just changed from the maximum value
if ( m_OutValue . Get ( ) = = m_flMax )
{
m_OnChangedFromMax . FireOutput ( pActivator , this ) ;
}
m_bHitMax = false ;
}
//
// Fire an output any time we reach or go below our minimum value.
//
if ( fNewValue < = m_flMin )
{
if ( ! m_bHitMin )
{
m_bHitMin = true ;
m_OnHitMin . FireOutput ( pActivator , this ) ;
}
}
else
{
// Fire an output if we just changed from the maximum value
if ( m_OutValue . Get ( ) = = m_flMin )
{
m_OnChangedFromMin . FireOutput ( pActivator , this ) ;
}
m_bHitMin = false ;
}
fNewValue = clamp ( fNewValue , m_flMin , m_flMax ) ;
}
m_OutValue . Set ( fNewValue , pActivator , this ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Sets the value to the new value, clamping and firing the output value.
// Sine generation needs to use a different function to account for skips and imprecision.
// Input : fNewValue - Value to set.
//-----------------------------------------------------------------------------
void CMathGenerate : : UpdateOutValueSine ( float fNewValue , CBaseEntity * pActivator )
{
if ( ( m_flMin ! = 0 ) | | ( m_flMax ! = 0 ) )
{
//
// Fire an output any time we reach or exceed our maximum value.
//
if ( fNewValue > = ( m_flMax * 0.995f ) )
{
if ( ! m_bHitMax )
{
m_bHitMax = true ;
m_OnHitMax . FireOutput ( pActivator , this ) ;
}
}
else
{
// Fire an output if we just changed from the maximum value
if ( m_bHitMax )
{
m_OnChangedFromMax . FireOutput ( pActivator , this ) ;
}
m_bHitMax = false ;
}
//
// Fire an output any time we reach or go below our minimum value.
//
if ( fNewValue < = ( m_flMin * 1.005f ) )
{
if ( ! m_bHitMin )
{
m_bHitMin = true ;
m_OnHitMin . FireOutput ( pActivator , this ) ;
}
}
else
{
// Fire an output if we just changed from the maximum value
if ( m_bHitMin )
{
m_OnChangedFromMin . FireOutput ( pActivator , this ) ;
}
m_bHitMin = false ;
}
//fNewValue = clamp(fNewValue, m_flMin, m_flMax);
}
m_OutValue . Set ( fNewValue , pActivator , this ) ;
}
2013-12-02 19:31:46 -08:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathGenerate : : StartGenerating ( )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
// Correct any min/max quirks here
if ( m_flMin > m_flMax )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
float flTemp = m_flMin ;
m_flMin = m_flMax ;
m_flMax = flTemp ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
switch ( m_iGenerateType )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
case GENERATE_SINE_WAVE :
SetThink ( & CMathGenerate : : GenerateSineWave ) ;
break ;
case GENERATE_LINEAR_RAMP :
SetThink ( & CMathGenerate : : GenerateLinearRamp ) ;
break ;
case GENERATE_UNIFORM_NOISE :
SetThink ( & CMathGenerate : : GenerateUniformNoise ) ;
break ;
case GENERATE_GAUSSIAN_NOISE :
SetThink ( & CMathGenerate : : GenerateGaussianNoise ) ;
break ;
case GENERATE_EXPONENTIAL :
SetThink ( & CMathGenerate : : GenerateExponential ) ;
break ;
default :
Warning ( " %s is set to invalid generation type %i! It won't do anything now. \n " , GetDebugName ( ) , m_iGenerateType ) ;
StopGenerating ( ) ;
return ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
// All valid types should fall through to this
SetNextThink ( gpGlobals - > curtime + TICK_INTERVAL ) ;
2013-12-02 19:31:46 -08:00
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
2019-08-31 19:28:20 +00:00
void CMathGenerate : : StopGenerating ( )
2013-12-02 19:31:46 -08:00
{
2019-08-31 19:28:20 +00:00
SetThink ( NULL ) ;
SetNextThink ( TICK_NEVER_THINK ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : GenerateSineWave ( )
{
// CSineProxy in mathproxy.cpp
float flSineTimeOffset = m_flParam2 ;
float flSinePeriod = m_flParam1 ;
float flValue ;
if ( flSinePeriod = = 0 )
flSinePeriod = 1 ;
// get a value in [0,1]
flValue = ( sin ( 2.0f * M_PI * ( gpGlobals - > curtime - flSineTimeOffset ) / flSinePeriod ) * 0.5f ) + 0.5f ;
// get a value in [min,max]
flValue = ( m_flMax - m_flMin ) * flValue + m_flMin ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
UpdateOutValueSine ( flValue ) ;
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
SetNextThink ( gpGlobals - > curtime + TICK_INTERVAL ) ;
}
2013-12-02 19:31:46 -08:00
2019-08-31 19:28:20 +00:00
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : GenerateLinearRamp ( )
{
// CLinearRampProxy in mathproxy.cpp
// Param1 = rate
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
float flVal = m_flParam1 * gpGlobals - > curtime + m_OutValue . Get ( ) ;
2019-09-28 22:56:52 +00:00
// clamp
if ( flVal < m_flMin )
flVal = m_flMin ;
else if ( flVal > m_flMax )
flVal = m_flMax ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
UpdateOutValue ( flVal ) ;
2019-08-31 19:28:20 +00:00
SetNextThink ( gpGlobals - > curtime + TICK_INTERVAL ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : GenerateUniformNoise ( )
{
// CUniformNoiseProxy in mathproxy.cpp
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
UpdateOutValue ( random - > RandomFloat ( m_flMin , m_flMax ) ) ;
2019-08-31 19:28:20 +00:00
SetNextThink ( gpGlobals - > curtime + TICK_INTERVAL ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : GenerateGaussianNoise ( )
{
// CGaussianNoiseProxy in mathproxy.cpp
float flMean = m_flParam1 ;
float flStdDev = m_flParam2 ;
float flVal = m_GaussianStream . RandomFloat ( flMean , flStdDev ) ;
// clamp
if ( flVal < m_flMin )
flVal = m_flMin ;
else if ( flVal > m_flMax )
flVal = m_flMax ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
UpdateOutValue ( flVal ) ;
2019-08-31 19:28:20 +00:00
SetNextThink ( gpGlobals - > curtime + TICK_INTERVAL ) ;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMathGenerate : : GenerateExponential ( )
{
// CExponentialProxy in mathproxy.cpp
// Param1 = scale
// Param2 = offset
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
float flVal = m_flParam1 * exp ( m_OutValue . Get ( ) + m_flParam2 ) ;
2019-08-31 19:28:20 +00:00
// clamp
if ( flVal < m_flMin )
flVal = m_flMin ;
else if ( flVal > m_flMax )
flVal = m_flMax ;
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 04:20:02 +00:00
UpdateOutValue ( flVal ) ;
2019-08-31 19:28:20 +00:00
SetNextThink ( gpGlobals - > curtime + TICK_INTERVAL ) ;
2013-12-02 19:31:46 -08:00
}
2019-08-31 19:28:20 +00:00
# endif