/*** * * Copyright (c) 1996-2002, Valve LLC. All rights reserved. * * This product contains software technology licensed from Id * Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. * All Rights Reserved. * * This source code contains proprietary and confidential information of * Valve LLC and its suppliers. Access to this code is restricted to * persons who have executed a written SDK license with Valve. Any access, * use or distribution of this code by or to any unlicensed person is illegal. * ****/ #pragma once #ifndef SCRIPTED_H #define SCRIPTED_H #ifndef SCRIPTEVENT_H #include "scriptevent.h" #endif #define SF_SCRIPT_WAITTILLSEEN 1 #define SF_SCRIPT_EXITAGITATED 2 #define SF_SCRIPT_REPEATABLE 4 #define SF_SCRIPT_LEAVECORPSE 8 //#define SF_SCRIPT_INTERPOLATE 16 // don't use, old bug #define SF_SCRIPT_NOINTERRUPT 32 #define SF_SCRIPT_OVERRIDESTATE 64 #define SF_SCRIPT_NOSCRIPTMOVEMENT 128 #define SF_SCRIPT_STAYDEAD 256 // LRC- signifies that the animation kills the monster // (needed because the monster animations don't use AnimEvent 1000 properly) #define SCRIPT_BREAK_CONDITIONS (bits_COND_LIGHT_DAMAGE|bits_COND_HEAVY_DAMAGE) //LRC - rearranged into flags #define SS_INTERRUPT_IDLE 0x0 #define SS_INTERRUPT_ALERT 0x1 #define SS_INTERRUPT_ANYSTATE 0x2 #define SS_INTERRUPT_SCRIPTS 0x4 // when a monster finishes an AI scripted sequence, we can choose // a schedule to place them in. These defines are the aliases to // resolve worldcraft input to real schedules (sjb) #define SCRIPT_FINISHSCHED_DEFAULT 0 #define SCRIPT_FINISHSCHED_AMBUSH 1 class CCineMonster : public CBaseMonster { public: void Spawn( void ); virtual void KeyValue( KeyValueData *pkvd ); virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); virtual void Blocked( CBaseEntity *pOther ); virtual void Touch( CBaseEntity *pOther ); virtual int ObjectCaps( void ) { return (CBaseMonster :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION); } virtual void Activate( void ); virtual int Save( CSave &save ); virtual int Restore( CRestore &restore ); static TYPEDESCRIPTION m_SaveData[]; //LRC: states for script entities virtual STATE GetState( void ) { return m_iState; }; STATE m_iState; // void EXPORT CineSpawnThink( void ); void EXPORT CineThink( void ); void EXPORT InitIdleThink( void ); //LRC void Pain( void ); void Die( void ); void DelayStart( int state ); CBaseMonster* FindEntity( const char* sName, CBaseEntity *pActivator ); virtual void PossessEntity( void ); inline BOOL IsAction( void ) { return FClassnameIs(pev,"scripted_action"); }; //LRC //LRC: Should the monster do a precise attack for this scripted_action? // (Do a precise attack if we'll be turning to face the target, but we haven't just walked to the target.) BOOL PreciseAttack( void ) { // if (m_fTurnType != 1) { ALERT(at_console,"preciseattack fails check 1\n"); return FALSE; } // if (m_fMoveTo == 0) { ALERT(at_console,"preciseattack fails check 2\n"); return FALSE; } // if (m_fMoveTo != 5 && m_iszAttack == 0) { ALERT(at_console,"preciseattack fails check 3\n"); return FALSE; } // ALERT(at_console,"preciseattack passes!\n"); // return TRUE; return m_fTurnType == 1 && ( m_fMoveTo == 5 || (m_fMoveTo != 0 && !FStrEq(STRING(m_iszAttack), STRING(m_iszMoveTarget)) )); }; void ReleaseEntity( CBaseMonster *pEntity ); void CancelScript( void ); virtual BOOL StartSequence( CBaseMonster *pTarget, int iszSeq, BOOL completeOnEmpty ); void SequenceDone ( CBaseMonster *pMonster ); virtual void FixScriptMonsterSchedule( CBaseMonster *pMonster ); BOOL CanInterrupt( void ); void AllowInterrupt( BOOL fAllow ); int IgnoreConditions( void ); string_t m_iszIdle; // string index for idle animation string_t m_iszPlay; // string index for scripted animation string_t m_iszEntity; // entity that is wanted for this script int m_iszAttack; // entity to attack int m_iszMoveTarget; // entity to move to int m_iszFireOnBegin; // entity to fire when the sequence _starts_. int m_fMoveTo; int m_fTurnType; int m_fAction; int m_iFinishSchedule; float m_flRadius; // range to search //LRC- this does nothing!! float m_flRepeat; // repeat rate int m_iRepeats; //LRC - number of times to repeat the animation int m_iRepeatsLeft; //LRC float m_fRepeatFrame; //LRC int m_iPriority; //LRC int m_iDelay; float m_startTime; int m_saved_movetype; int m_saved_solid; int m_saved_effects; //Vector m_vecOrigOrigin; BOOL m_interruptable; }; //LRC - removed CCineAI, obsolete #endif //SCRIPTED_H