diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/portal/prop_glados_core.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/portal/prop_glados_core.cpp')
| -rw-r--r-- | game/server/portal/prop_glados_core.cpp | 480 |
1 files changed, 480 insertions, 0 deletions
diff --git a/game/server/portal/prop_glados_core.cpp b/game/server/portal/prop_glados_core.cpp new file mode 100644 index 0000000..2ba320f --- /dev/null +++ b/game/server/portal/prop_glados_core.cpp @@ -0,0 +1,480 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Core of the GlaDOS computer. +// +//=====================================================================================// + +#include "cbase.h" +#include "baseentity.h" +#include "te_effect_dispatch.h" // Sprite effect +#include "props.h" // CPhysicsProp base class +#include "saverestore_utlvector.h" + +#define GLADOS_CORE_MODEL_NAME "models/props_bts/glados_ball_reference.mdl" + +static const char *s_pAnimateThinkContext = "Animate"; + +#define DEFAULT_LOOK_ANINAME "look_01" +#define CURIOUS_LOOK_ANINAME "look_02" +#define AGGRESSIVE_LOOK_ANINAME "look_03" +#define CRAZY_LOOK_ANINAME "look_04" + +#define DEFAULT_SKIN 0 +#define CURIOUS_SKIN 1 +#define AGGRESSIVE_SKIN 2 +#define CRAZY_SKIN 3 + +class CPropGladosCore : public CPhysicsProp +{ +public: + DECLARE_CLASS( CPropGladosCore, CPhysicsProp ); + DECLARE_DATADESC(); + + CPropGladosCore(); + ~CPropGladosCore(); + + typedef enum + { + CORETYPE_CURIOUS, + CORETYPE_AGGRESSIVE, + CORETYPE_CRAZY, + CORETYPE_NONE, + CORETYPE_TOTAL, + + } CORETYPE; + + virtual void Spawn( void ); + virtual void Precache( void ); + + virtual QAngle PreferredCarryAngles( void ) { return QAngle( 180, -90, 180 ); } + virtual bool HasPreferredCarryAnglesForPlayer( CBasePlayer *pPlayer ) { return true; } + + void InputPanic( inputdata_t &inputdata ); + void InputStartTalking( inputdata_t &inputdata ); + + void StartPanic ( void ); + void StartTalking ( float flDelay ); + + void TalkingThink ( void ); + void PanicThink ( void ); + void AnimateThink ( void ); + + void SetupVOList ( void ); + + void OnPhysGunPickup( CBasePlayer* pPhysGunUser, PhysGunPickup_t reason ); + +private: + int m_iTotalLines; + int m_iEyeballAttachment; + float m_flBetweenVOPadding; // Spacing (in seconds) between VOs + bool m_bFirstPickup; + + // Names of sound scripts for this core's personality + CUtlVector<string_t> m_speechEvents; + int m_iSpeechIter; + + string_t m_iszPanicSoundScriptName; + string_t m_iszDeathSoundScriptName; + string_t m_iszLookAnimationName; // Different animations for each personality + + CORETYPE m_iCoreType; +}; + +LINK_ENTITY_TO_CLASS( prop_glados_core, CPropGladosCore ); + +//----------------------------------------------------------------------------- +// Save/load +//----------------------------------------------------------------------------- +BEGIN_DATADESC( CPropGladosCore ) + + DEFINE_FIELD( m_iEyeballAttachment, FIELD_INTEGER ), + DEFINE_FIELD( m_iTotalLines, FIELD_INTEGER ), + DEFINE_FIELD( m_iSpeechIter, FIELD_INTEGER ), + DEFINE_FIELD( m_iszDeathSoundScriptName, FIELD_STRING ), + DEFINE_FIELD( m_iszPanicSoundScriptName, FIELD_STRING ), + DEFINE_FIELD( m_iszLookAnimationName, FIELD_STRING ), + DEFINE_UTLVECTOR( m_speechEvents, FIELD_STRING ), + DEFINE_FIELD( m_bFirstPickup, FIELD_BOOLEAN ), + + DEFINE_KEYFIELD( m_iCoreType, FIELD_INTEGER, "CoreType" ), + DEFINE_KEYFIELD( m_flBetweenVOPadding, FIELD_FLOAT, "DelayBetweenLines" ), + + DEFINE_INPUTFUNC( FIELD_VOID, "Panic", InputPanic ), + DEFINE_INPUTFUNC( FIELD_VOID, "StartTalking", InputStartTalking ), + + DEFINE_THINKFUNC( TalkingThink ), + DEFINE_THINKFUNC( PanicThink ), + DEFINE_THINKFUNC( AnimateThink ), + +END_DATADESC() + +CPropGladosCore::CPropGladosCore() +{ + m_iTotalLines = m_iSpeechIter = 0; + m_iszLookAnimationName = m_iszPanicSoundScriptName = m_iszDeathSoundScriptName = NULL_STRING; + m_flBetweenVOPadding = 2.5f; + m_bFirstPickup = true; +} + +CPropGladosCore::~CPropGladosCore() +{ + m_speechEvents.Purge(); +} + +void CPropGladosCore::Spawn( void ) +{ + SetupVOList(); + + Precache(); + KeyValue( "model", GLADOS_CORE_MODEL_NAME ); + BaseClass::Spawn(); + + //Default to 'dropped' animation + ResetSequence(LookupSequence("drop")); + SetCycle( 1.0f ); + + DisableAutoFade(); + m_iEyeballAttachment = LookupAttachment( "eyeball" ); + + SetContextThink( &CPropGladosCore::AnimateThink, gpGlobals->curtime + 0.1f, s_pAnimateThinkContext ); +} + +void CPropGladosCore::Precache( void ) +{ + BaseClass::Precache(); + + // Personality VOs -- Curiosity + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_1" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_2" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_3" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_4" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_5" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_6" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_7" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_8" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_9" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_10" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_11" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_12" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_13" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_15" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_16" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_17" ); + PrecacheScriptSound ( "Portal.Glados_core.Curiosity_18" ); + + // Aggressive + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_00" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_01" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_02" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_03" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_04" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_05" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_06" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_07" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_08" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_09" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_10" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_11" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_12" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_13" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_14" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_15" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_16" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_17" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_18" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_19" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_20" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_21" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_panic_01" ); + PrecacheScriptSound ( "Portal.Glados_core.Aggressive_panic_02" ); + + // Crazy + PrecacheScriptSound ( "Portal.Glados_core.Crazy_01" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_02" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_03" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_04" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_05" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_06" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_07" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_08" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_09" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_10" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_11" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_12" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_13" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_14" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_15" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_16" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_17" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_18" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_19" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_20" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_21" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_22" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_23" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_24" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_25" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_26" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_27" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_28" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_29" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_30" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_31" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_32" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_33" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_34" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_35" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_36" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_37" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_38" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_39" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_40" ); + PrecacheScriptSound ( "Portal.Glados_core.Crazy_41" ); + + PrecacheModel( GLADOS_CORE_MODEL_NAME ); +} + +//----------------------------------------------------------------------------- +// Purpose: Switch to panic think, play panic vo and animations +// Input : &inputdata - +//----------------------------------------------------------------------------- +void CPropGladosCore::InputPanic( inputdata_t &inputdata ) +{ + StartPanic(); +} + +void CPropGladosCore::StartPanic( void ) +{ + ResetSequence( LookupSequence( STRING(m_iszLookAnimationName) ) ); + SetThink( &CPropGladosCore::PanicThink ); + SetNextThink( gpGlobals->curtime + 0.1f ); +} + +//----------------------------------------------------------------------------- +// Purpose: Play panic vo and animations, then return to talking +// Output : +//----------------------------------------------------------------------------- +void CPropGladosCore::PanicThink ( void ) +{ + if ( m_speechEvents.Count() <= 0 || !m_speechEvents.IsValidIndex( m_iSpeechIter ) || m_iszPanicSoundScriptName == NULL_STRING ) + { + SetThink ( NULL ); + SetNextThink( gpGlobals->curtime ); + return; + } + + StopSound( m_speechEvents[m_iSpeechIter].ToCStr() ); + EmitSound( m_iszPanicSoundScriptName.ToCStr() ); + float flCurDuration = GetSoundDuration( m_iszPanicSoundScriptName.ToCStr(), GLADOS_CORE_MODEL_NAME ); + + SetThink( &CPropGladosCore::TalkingThink ); + SetNextThink( gpGlobals->curtime + m_flBetweenVOPadding + flCurDuration ); +} + +//----------------------------------------------------------------------------- +// Purpose: Start playing personality VO list +// Input : &inputdata - +//----------------------------------------------------------------------------- +void CPropGladosCore::InputStartTalking ( inputdata_t &inputdata ) +{ + StartTalking( 0.0f ); +} + +void CPropGladosCore::StartTalking( float flDelay ) +{ + if ( m_speechEvents.IsValidIndex( m_iSpeechIter ) && m_speechEvents.Count() > 0 ) + { + StopSound( m_speechEvents[m_iSpeechIter].ToCStr() ); + } + + m_iSpeechIter = 0; + SetThink( &CPropGladosCore::TalkingThink ); + SetNextThink( gpGlobals->curtime + m_flBetweenVOPadding + flDelay ); +} + +//----------------------------------------------------------------------------- +// Purpose: Start playing personality VO list +//----------------------------------------------------------------------------- +void CPropGladosCore::TalkingThink( void ) +{ + if ( m_speechEvents.Count() <= 0 || !m_speechEvents.IsValidIndex( m_iSpeechIter ) ) + { + SetThink ( NULL ); + SetNextThink( gpGlobals->curtime ); + return; + } + + // Loop the 'look around' animation after the first line. + int iCurSequence = GetSequence(); + int iLookSequence = LookupSequence( STRING(m_iszLookAnimationName) ); + if ( iCurSequence != iLookSequence && m_iSpeechIter > 0 ) + { + ResetSequence( iLookSequence ); + } + + int iPrevIter = m_iSpeechIter-1; + if ( iPrevIter < 0 ) + iPrevIter = 0; + + StopSound( m_speechEvents[iPrevIter].ToCStr() ); + + float flCurDuration = GetSoundDuration( m_speechEvents[m_iSpeechIter].ToCStr(), GLADOS_CORE_MODEL_NAME ); + + EmitSound( m_speechEvents[m_iSpeechIter].ToCStr() ); + SetNextThink( gpGlobals->curtime + m_flBetweenVOPadding + flCurDuration ); + + // wrap if we hit the end of the list + m_iSpeechIter = (m_iSpeechIter+1)%m_speechEvents.Count(); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : - +//----------------------------------------------------------------------------- +void CPropGladosCore::AnimateThink() +{ + StudioFrameAdvance(); + SetContextThink( &CPropGladosCore::AnimateThink, gpGlobals->curtime + 0.1f, s_pAnimateThinkContext ); +} + +//----------------------------------------------------------------------------- +// Purpose: Setup list of lines based on core personality +//----------------------------------------------------------------------------- +void CPropGladosCore::SetupVOList( void ) +{ + m_speechEvents.RemoveAll(); + + switch ( m_iCoreType ) + { + case CORETYPE_CURIOUS: + { + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_1" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_2" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_3" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_4" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_5" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_6" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_7" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_8" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_9" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_10" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_11" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_12" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_13" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_16" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Curiosity_17" ) ); + m_iszPanicSoundScriptName = AllocPooledString( "Portal.Glados_core.Curiosity_15" ); + m_iszLookAnimationName = AllocPooledString( CURIOUS_LOOK_ANINAME ); + m_nSkin = CURIOUS_SKIN; + + } + break; + case CORETYPE_AGGRESSIVE: + { + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_01" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_02" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_03" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_04" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_05" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_06" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_07" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_08" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_09" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_10" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_11" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_12" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_13" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_14" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_15" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_16" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_17" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_18" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_19" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_20" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Aggressive_21" ) ); + m_iszPanicSoundScriptName = AllocPooledString( "Portal.Glados_core.Aggressive_panic_01" ); + m_iszLookAnimationName = AllocPooledString( AGGRESSIVE_LOOK_ANINAME ); + m_nSkin = AGGRESSIVE_SKIN; + } + break; + case CORETYPE_CRAZY: + { + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_01" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_02" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_03" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_04" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_05" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_06" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_07" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_08" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_09" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_10" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_11" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_12" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_13" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_14" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_15" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_16" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_17" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_18" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_19" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_20" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_21" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_22" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_23" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_24" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_25" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_26" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_27" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_28" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_29" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_30" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_31" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_32" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_33" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_34" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_35" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_36" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_37" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_38" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_39" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_40" ) ); + m_speechEvents.AddToTail( AllocPooledString( "Portal.Glados_core.Crazy_41" ) ); + m_iszLookAnimationName = AllocPooledString( CRAZY_LOOK_ANINAME ); + m_nSkin = CRAZY_SKIN; + } + break; + default: + { + m_iszLookAnimationName = AllocPooledString( DEFAULT_LOOK_ANINAME ); + m_nSkin = DEFAULT_SKIN; + } + break; + }; + + m_iszDeathSoundScriptName = AllocPooledString( "Portal.Glados_core.Death" ); + m_iTotalLines = m_speechEvents.Count(); + m_iSpeechIter = 0; +} + +//----------------------------------------------------------------------------- +// Purpose: Cores play a special animation when picked up and dropped +// Input : pPhysGunUser - player picking up object +// reason - type of pickup +//----------------------------------------------------------------------------- +void CPropGladosCore::OnPhysGunPickup( CBasePlayer* pPhysGunUser, PhysGunPickup_t reason ) +{ + if ( m_bFirstPickup ) + { + float flTalkingDelay = (CORETYPE_CURIOUS == m_iCoreType) ? (2.0f) : (0.0f); + StartTalking ( flTalkingDelay ); + } + + m_bFirstPickup = false; + ResetSequence(LookupSequence("turn")); + + // +use always enables motion on these props + EnableMotion(); + + BaseClass::OnPhysGunPickup ( pPhysGunUser, reason ); +}
\ No newline at end of file |