summaryrefslogtreecommitdiff
path: root/game/server/portal/prop_glados_core.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/portal/prop_glados_core.cpp
downloadarchived-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.cpp480
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