You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
480 lines
20 KiB
480 lines
20 KiB
//========= 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 ); |
|
} |