Counter Strike : Global Offensive Source Code
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.

718 lines
20 KiB

  1. //========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================//
  7. #ifndef CHOREOEVENT_H
  8. #define CHOREOEVENT_H
  9. #ifdef _WIN32
  10. #pragma once
  11. #endif
  12. class CChoreoActor;
  13. class CChoreoChannel;
  14. class CChoreoEvent;
  15. class CChoreoScene;
  16. class IChoreoEventCallback;
  17. class CAudioMixer;
  18. class CUtlBuffer;
  19. class IChoreoStringPool;
  20. #include "tier1/utlstring.h"
  21. #include "tier1/utlvector.h"
  22. #include "expressionsample.h"
  23. #include "networkvar.h"
  24. #include "localflexcontroller.h"
  25. typedef CUtlString ChoreoStr_t;
  26. //-----------------------------------------------------------------------------
  27. // Purpose: SPEAK events can have "relative tags" that other objects can reference
  28. // to specify their start times off of
  29. //-----------------------------------------------------------------------------
  30. class CEventRelativeTag
  31. {
  32. public:
  33. DECLARE_CLASS_NOBASE( CEventRelativeTag );
  34. enum
  35. {
  36. MAX_EVENTTAG_LENGTH = 128,
  37. };
  38. CEventRelativeTag( CChoreoEvent *owner, const char *name, float percentage );
  39. CEventRelativeTag( const CEventRelativeTag& src );
  40. const char *GetName( void );
  41. float GetPercentage( void );
  42. void SetPercentage( float percentage );
  43. // Returns the corrected time based on the owner's length and start time
  44. float GetStartTime( void );
  45. CChoreoEvent *GetOwner( void );
  46. void SetOwner( CChoreoEvent *event );
  47. protected:
  48. ChoreoStr_t m_Name;
  49. float m_flPercentage;
  50. CChoreoEvent *m_pOwner;
  51. };
  52. //-----------------------------------------------------------------------------
  53. // Purpose: GESTURE events can have "absolute tags" (where the value is not a
  54. // percentage, but an actual timestamp from the start of the event)
  55. //-----------------------------------------------------------------------------
  56. class CEventAbsoluteTag
  57. {
  58. public:
  59. enum
  60. {
  61. MAX_EVENTTAG_LENGTH = 128,
  62. };
  63. CEventAbsoluteTag( CChoreoEvent *owner, const char *name, float percentage );
  64. CEventAbsoluteTag( const CEventAbsoluteTag& src );
  65. const char *GetName( void );
  66. float GetPercentage( void );
  67. void SetPercentage( float percentage );
  68. float GetEventTime( void );
  69. void SetEventTime( float t );
  70. float GetAbsoluteTime( void );
  71. void SetAbsoluteTime( float t );
  72. CChoreoEvent *GetOwner( void );
  73. void SetOwner( CChoreoEvent *event );
  74. void SetLocked( bool bLocked );
  75. bool GetLocked( void );
  76. void SetLinear( bool bLinear );
  77. bool GetLinear( void );
  78. void SetEntry( bool bEntry );
  79. bool GetEntry( void );
  80. void SetExit( bool bExit );
  81. bool GetExit( void );
  82. protected:
  83. ChoreoStr_t m_Name;
  84. float m_flPercentage;
  85. bool m_bLocked:1;
  86. bool m_bLinear:1;
  87. bool m_bEntry:1;
  88. bool m_bExit:1;
  89. CChoreoEvent *m_pOwner;
  90. };
  91. //-----------------------------------------------------------------------------
  92. // Purpose: FLEXANIMATION events can have "timing tags" that are used to align and
  93. // manipulate flex animation curves
  94. //-----------------------------------------------------------------------------
  95. class CFlexTimingTag : public CEventRelativeTag
  96. {
  97. DECLARE_CLASS( CFlexTimingTag, CEventRelativeTag );
  98. public:
  99. CFlexTimingTag( CChoreoEvent *owner, const char *name, float percentage, bool locked );
  100. CFlexTimingTag( const CFlexTimingTag& src );
  101. bool GetLocked( void );
  102. void SetLocked( bool locked );
  103. protected:
  104. bool m_bLocked;
  105. };
  106. //-----------------------------------------------------------------------------
  107. // Purpose: A flex controller position can be animated over a period of time
  108. //-----------------------------------------------------------------------------
  109. class CFlexAnimationTrack
  110. {
  111. public:
  112. enum
  113. {
  114. MAX_CONTROLLER_NAME = 128,
  115. };
  116. CFlexAnimationTrack( CChoreoEvent *event );
  117. CFlexAnimationTrack( const CFlexAnimationTrack* src );
  118. virtual ~CFlexAnimationTrack( void );
  119. void SetEvent( CChoreoEvent *event );
  120. CChoreoEvent *GetEvent( void );
  121. void SetFlexControllerName( const char *name );
  122. char const *GetFlexControllerName( void );
  123. void SetComboType( bool combo );
  124. bool IsComboType( void );
  125. void SetMin( float value );
  126. void SetMax( float value );
  127. float GetMin( int type = 0 );
  128. float GetMax( int type = 0 );
  129. bool IsInverted( void );
  130. void SetInverted( bool isInverted );
  131. int GetNumSamples( int type = 0 );
  132. CExpressionSample *GetSample( int index, int type = 0 );
  133. bool IsTrackActive( void );
  134. void SetTrackActive( bool active );
  135. // returns scaled value for absolute time per left/right side
  136. float GetIntensity( float time, int side = 0 );
  137. CExpressionSample *AddSample( float time, float value, int type = 0 );
  138. void RemoveSample( int index, int type = 0 );
  139. void Clear( void );
  140. void Resort( int type = 0 );
  141. // Puts in dummy start/end samples to spline to zero ( or 0.5 for
  142. // left/right data) at the origins
  143. CExpressionSample *GetBoundedSample( int number, bool& bClamped, int type = 0 );
  144. int GetFlexControllerIndex( int side = 0 );
  145. LocalFlexController_t GetRawFlexControllerIndex( int side = 0 );
  146. void SetFlexControllerIndex( LocalFlexController_t raw, int index, int side = 0 );
  147. // returns 0..1 value for 0..1 time fraction per mag/balance
  148. float GetFracIntensity( float time, int type );
  149. // retrieves raw intensity values (for mag vs. left/right slider setting)
  150. float GetSampleIntensity( float time );
  151. float GetBalanceIntensity( float time );
  152. void SetEdgeInfo( bool leftEdge, int curveType, float zero );
  153. void GetEdgeInfo( bool leftEdge, int& curveType, float& zero ) const;
  154. void SetEdgeActive( bool leftEdge, bool state );
  155. bool IsEdgeActive( bool leftEdge ) const;
  156. int GetEdgeCurveType( bool leftEdge ) const;
  157. float GetEdgeZeroValue( bool leftEdge ) const;
  158. float GetDefaultEdgeZeroPos() const;
  159. void SetServerSide( bool state );
  160. bool IsServerSide() const;
  161. private:
  162. // remove any samples after endtime
  163. void RemoveOutOfRangeSamples( int type );
  164. // returns scaled value for absolute time per mag/balance
  165. float GetIntensityInternal( float time, int type );
  166. public:
  167. // returns the fractional (0..1) value for "zero" based on Min/Max ranges
  168. float GetZeroValue( int type, bool leftSide );
  169. private:
  170. char *m_pControllerName;
  171. // base track has range, combo is always 0..1
  172. float m_flMin;
  173. float m_flMax;
  174. // 0 == magnitude
  175. // 1 == left/right
  176. CUtlVector< CExpressionSample > m_Samples[ 2 ];
  177. int m_nFlexControllerIndex[ 2 ];
  178. LocalFlexController_t m_nFlexControllerIndexRaw[ 2 ];
  179. // For left and right edge of type 0 flex data ( magnitude track )
  180. EdgeInfo_t m_EdgeInfo[ 2 ];
  181. CChoreoEvent *m_pEvent;
  182. // Is track active
  183. bool m_bActive:1;
  184. // Is this a combo (magnitude + stereo) track
  185. bool m_bCombo:1;
  186. bool m_bServerSide:1;
  187. bool m_bInverted; // track is displayed 1..0 instead of 0..1
  188. };
  189. //-----------------------------------------------------------------------------
  190. // Purpose: The generic scene event type
  191. //-----------------------------------------------------------------------------
  192. class CChoreoEvent : public ICurveDataAccessor
  193. {
  194. public:
  195. // Type of event this object represents
  196. typedef enum
  197. {
  198. // Don't know yet
  199. UNSPECIFIED = 0,
  200. // Section start/end
  201. SECTION,
  202. // Play an expression
  203. EXPRESSION,
  204. // Look at another actor
  205. LOOKAT,
  206. // Move to a location
  207. MOVETO,
  208. // Speak/visemes a wave file
  209. SPEAK,
  210. // Play a gesture
  211. GESTURE,
  212. // Play a sequence
  213. SEQUENCE,
  214. // Face another actor
  215. FACE,
  216. // Fire a trigger
  217. FIRETRIGGER,
  218. // One or more flex sliders animated over the course of the event time period
  219. FLEXANIMATION,
  220. // A contained .vcd file
  221. SUBSCENE,
  222. // Loop back to previous time (forever or up to N times)
  223. LOOP,
  224. // A time span during which the scene may be temporarily interrupted
  225. INTERRUPT,
  226. // A dummy event that is used to mark the .vcd end time
  227. STOPPOINT,
  228. // A time span during which this actor can respond to events happening in the world, etc.
  229. PERMIT_RESPONSES,
  230. // A string passed to the game code for interpretation
  231. GENERIC,
  232. // Camera control
  233. CAMERA,
  234. // Script function call
  235. SCRIPT,
  236. // THIS MUST BE LAST!!!
  237. NUM_TYPES,
  238. } EVENTTYPE;
  239. enum
  240. {
  241. MAX_TAGNAME_STRING = 128,
  242. MAX_CCTOKEN_STRING = 64,
  243. };
  244. typedef enum
  245. {
  246. DEFAULT = 0,
  247. SIMULATION,
  248. DISPLAY,
  249. } TIMETYPE;
  250. typedef enum
  251. {
  252. CC_MASTER = 0, // default, implied
  253. CC_SLAVE,
  254. CC_DISABLED,
  255. NUM_CC_TYPES,
  256. } CLOSECAPTION;
  257. static int s_nGlobalID;
  258. // Construction
  259. CChoreoEvent( CChoreoScene *scene );
  260. CChoreoEvent( CChoreoScene *scene, EVENTTYPE type, const char *name );
  261. CChoreoEvent( CChoreoScene *scene, EVENTTYPE type, const char *name, const char *param );
  262. // Assignment
  263. CChoreoEvent& operator=(const CChoreoEvent& src );
  264. ~CChoreoEvent( void );
  265. // ICurveDataAccessor methods
  266. virtual bool CurveHasEndTime();
  267. virtual int GetDefaultCurveType();
  268. // Binary serialization
  269. void SaveToBuffer( CUtlBuffer& buf, CChoreoScene *pScene, IChoreoStringPool *pStringPool );
  270. bool RestoreFromBuffer( CUtlBuffer& buf, CChoreoScene *pScene, IChoreoStringPool *pStringPool );
  271. // Accessors
  272. EVENTTYPE GetType( void );
  273. void SetType( EVENTTYPE type );
  274. void SetName( const char *name );
  275. const char *GetName( void );
  276. void SetParameters( const char *target );
  277. const char *GetParameters( void );
  278. void SetParameters2( const char *target );
  279. const char *GetParameters2( void );
  280. void SetParameters3( const char *target );
  281. const char *GetParameters3( void );
  282. void SetStartTime( float starttime );
  283. float GetStartTime( void );
  284. void SetEndTime( float endtime );
  285. float GetEndTime( void );
  286. float GetDuration( void );
  287. void SetResumeCondition( bool resumecondition );
  288. bool IsResumeCondition( void );
  289. void SetLockBodyFacing( bool lockbodyfacing );
  290. bool IsLockBodyFacing( void );
  291. void SetDistanceToTarget( float distancetotarget );
  292. float GetDistanceToTarget( void );
  293. void SetForceShortMovement( bool bForceShortMovement );
  294. bool GetForceShortMovement( void );
  295. void SetSyncToFollowingGesture( bool bSyncToFollowingGesture );
  296. bool GetSyncToFollowingGesture( void );
  297. void SetPlayOverScript( bool bPlayOverScript );
  298. bool GetPlayOverScript( void );
  299. int GetRampCount( void ) { return m_Ramp.GetCount(); };
  300. CExpressionSample *GetRamp( int index ) { return m_Ramp.Get( index ); };
  301. CExpressionSample *AddRamp( float time, float value, bool selected ) { return m_Ramp.Add( time, value, selected ); };
  302. void DeleteRamp( int index ) { m_Ramp.Delete( index ); };
  303. void ClearRamp( void ) { m_Ramp.Clear(); };
  304. void ResortRamp( void ) { m_Ramp.Resort( this ); };
  305. CCurveData *GetRamp( void ) { return &m_Ramp; };
  306. float GetRampIntensity( float time ) { return m_Ramp.GetIntensity( this, time ); };
  307. // Calculates weighting for a given time
  308. float GetIntensity( float scenetime );
  309. float GetIntensityArea( float scenetime );
  310. // Calculates 0..1 completion for a given time
  311. float GetCompletion( float time );
  312. // An end time of -1.0f means that the events is just triggered at the leading edge
  313. bool HasEndTime( void );
  314. // Is the event something that can be sized ( a wave file, e.g. )
  315. bool IsFixedLength( void );
  316. void SetFixedLength( bool isfixedlength );
  317. // Move the start/end/both times by the specified dt (fixes up -1.0f endtimes)
  318. void OffsetStartTime( float dt );
  319. void OffsetEndTime( float dt );
  320. void OffsetTime( float dt );
  321. // Snap to scene framerate
  322. void SnapTimes( void );
  323. float SnapTime( float t );
  324. CChoreoScene *GetScene( void );
  325. void SetScene( CChoreoScene *scene );
  326. // The actor the event is associated with
  327. void SetActor( CChoreoActor *actor );
  328. CChoreoActor *GetActor( void );
  329. // The channel the event is associated with
  330. void SetChannel( CChoreoChannel *channel );
  331. CChoreoChannel *GetChannel( void );
  332. // Get a more involved description of the event
  333. const char *GetDescription( void );
  334. void ClearAllRelativeTags( void );
  335. int GetNumRelativeTags( void );
  336. CEventRelativeTag *GetRelativeTag( int tagnum );
  337. CEventRelativeTag *FindRelativeTag( const char *tagname );
  338. void AddRelativeTag( const char *tagname, float percentage );
  339. void RemoveRelativeTag( const char *tagname );
  340. bool IsUsingRelativeTag( void );
  341. void SetUsingRelativeTag( bool usetag, const char *tagname = 0, const char *wavname = 0);
  342. const char *GetRelativeTagName( void );
  343. const char *GetRelativeWavName( void );
  344. // Absolute tags
  345. typedef enum
  346. {
  347. INVALID = -1,
  348. PLAYBACK = 0, // new timeline - FIXME: should be stored as an absolute time
  349. ORIGINAL, // original timeline - FIXME: should be stored at a fixed percentage of event
  350. NUM_ABS_TAG_TYPES,
  351. } AbsTagType;
  352. void SetGestureSequenceDuration( float duration );
  353. bool GetGestureSequenceDuration( float& duration );
  354. void ClearAllAbsoluteTags( AbsTagType type );
  355. int GetNumAbsoluteTags( AbsTagType type );
  356. CEventAbsoluteTag *GetAbsoluteTag( AbsTagType type, int tagnum );
  357. CEventAbsoluteTag *FindAbsoluteTag( AbsTagType type, const char *tagname );
  358. void AddAbsoluteTag( AbsTagType type, const char *tagname, float t );
  359. void RemoveAbsoluteTag( AbsTagType type, const char *tagname );
  360. bool VerifyTagOrder( void );
  361. float GetOriginalPercentageFromPlaybackPercentage( float t );
  362. float GetPlaybackPercentageFromOriginalPercentage( float t );
  363. static const char *NameForAbsoluteTagType( AbsTagType t );
  364. static AbsTagType TypeForAbsoluteTagName( const char *name );
  365. void RescaleGestureTimes( float newstart, float newend, bool bMaintainAbsoluteTagPositions );
  366. bool PreventTagOverlap( void );
  367. CEventAbsoluteTag *FindEntryTag( AbsTagType type );
  368. CEventAbsoluteTag *FindExitTag( AbsTagType type );
  369. // Flex animation type
  370. int GetNumFlexAnimationTracks( void );
  371. CFlexAnimationTrack *GetFlexAnimationTrack( int index );
  372. CFlexAnimationTrack *AddTrack( const char *controllername );
  373. CFlexAnimationTrack *FindTrack( const char *controllername );
  374. void RemoveTrack( int index );
  375. void RemoveAllTracks( void );
  376. void OnEndTimeChanged( void );
  377. bool GetTrackLookupSet( void );
  378. void SetTrackLookupSet( bool set );
  379. // Flex Timing Tags (used by editor only)
  380. void ClearAllTimingTags( void );
  381. int GetNumTimingTags( void );
  382. CFlexTimingTag *GetTimingTag( int tagnum );
  383. CFlexTimingTag *FindTimingTag( const char *tagname );
  384. void AddTimingTag( const char *tagname, float percentage, bool locked );
  385. void RemoveTimingTag( const char *tagname );
  386. // Subscene ( embedded .vcd ) support
  387. void SetSubScene( CChoreoScene *scene );
  388. CChoreoScene *GetSubScene( void );
  389. bool IsProcessing( void ) const;
  390. bool HasStopped() const;
  391. void StartProcessing( IChoreoEventCallback *cb, CChoreoScene *scene, float t );
  392. void ContinueProcessing( IChoreoEventCallback *cb, CChoreoScene *scene, float t );
  393. void StopProcessing( IChoreoEventCallback *cb, CChoreoScene *scene, float t );
  394. bool CheckProcessing( IChoreoEventCallback *cb, CChoreoScene *scene, float t );
  395. void ResetProcessing( void );
  396. void SetMixer( CAudioMixer *mixer );
  397. CAudioMixer *GetMixer( void ) const;
  398. // Hack for LOOKAT in editor
  399. int GetPitch( void ) const;
  400. void SetPitch( int pitch );
  401. int GetYaw( void ) const;
  402. void SetYaw( int yaw );
  403. // For LOOP events
  404. void SetLoopCount( int numloops );
  405. int GetLoopCount( void );
  406. int GetNumLoopsRemaining( void );
  407. void SetNumLoopsRemaining( int loops );
  408. bool IsMarkedForSave() const { return m_bMarkedForSave; }
  409. void SetMarkedForSave( bool mark ) { m_bMarkedForSave = mark; }
  410. void GetMovementStyle( char *style, int maxlen );
  411. void GetDistanceStyle( char *style, int maxlen );
  412. int GetGlobalID() const { return m_nGlobalID; }
  413. // Localization/CC support (close captioning and multiple wave file recombination)
  414. void SetCloseCaptionType( CLOSECAPTION type );
  415. CLOSECAPTION GetCloseCaptionType() const;
  416. void SetCloseCaptionToken( char const *token );
  417. char const *GetCloseCaptionToken() const;
  418. void SetUsingCombinedFile( bool isusing );
  419. bool IsUsingCombinedFile() const;
  420. void SetRequiredCombinedChecksum( unsigned int checksum );
  421. unsigned int GetRequiredCombinedChecksum();
  422. void SetNumSlaves( int num );
  423. int GetNumSlaves() const;
  424. void SetLastSlaveEndTime( float t );
  425. float GetLastSlaveEndTime() const;
  426. void SetCloseCaptionTokenValid( bool valid );
  427. bool GetCloseCaptionTokenValid() const;
  428. bool ComputeCombinedBaseFileName( char *dest, int destlen, bool creategenderwildcard );
  429. bool IsCombinedUsingGenderToken() const;
  430. void SetCombinedUsingGenderToken( bool using_gender );
  431. bool IsSuppressingCaptionAttenuation() const;
  432. void SetSuppressingCaptionAttenuation( bool suppress );
  433. int ValidateCombinedFile();
  434. // This returns false if the wave is CC_DISABLED or is a CC_SLAVE,
  435. // otherwise it returns the actual m_szCCToken value, or if that's
  436. // blank it'll return the sounds.txt entry name (m_szParameters)
  437. bool GetPlaybackCloseCaptionToken( char *dest, int destlen );
  438. void ClearEventDependencies();
  439. void AddEventDependency( CChoreoEvent *other );
  440. void GetEventDependencies( CUtlVector< CChoreoEvent * >& list );
  441. void SetActive( bool state );
  442. bool GetActive() const;
  443. void SetDefaultCurveType( int nCurveType );
  444. // Turn enum into string and vice versa
  445. static EVENTTYPE TypeForName( const char *name );
  446. static const char *NameForType( EVENTTYPE type );
  447. // Turn enum into string and vice versa
  448. static CLOSECAPTION CCTypeForName( const char *name );
  449. static const char *NameForCCType( CLOSECAPTION type );
  450. private:
  451. // Declare copy constructor private to prevent accidental usage...
  452. CChoreoEvent(const CChoreoEvent& src );
  453. void SaveFlexAnimationsToBuffer( CUtlBuffer& buf, IChoreoStringPool *pStringPool );
  454. bool RestoreFlexAnimationsFromBuffer( CUtlBuffer& buf, IChoreoStringPool *pStringPool );
  455. float GetBoundedAbsoluteTagPercentage( AbsTagType type, int tagnum );
  456. float _GetIntensity( float time );
  457. // String bounds
  458. enum
  459. {
  460. MAX_CHOREOEVENT_NAME = 128,
  461. MAX_PARAMETERS_STRING = 128,
  462. };
  463. // Base initialization
  464. void Init( CChoreoScene *scene );
  465. // Type of event
  466. byte m_fType;
  467. // Close caption type
  468. byte m_ccType;
  469. // Name of event
  470. ChoreoStr_t m_Name;
  471. // Event parameters
  472. ChoreoStr_t m_Parameters;
  473. ChoreoStr_t m_Parameters2;
  474. ChoreoStr_t m_Parameters3;
  475. // Event start time
  476. float m_flStartTime;
  477. // Event end time ( -1.0f means no ending, just leading edge triggered )
  478. float m_flEndTime;
  479. // Duration of underlying gesture sequence
  480. float m_flGestureSequenceDuration;
  481. // For CChoreoEvent::LOOP
  482. int m_nNumLoops; // -1 == no limit
  483. int m_nLoopsRemaining;
  484. // Overall intensity curve
  485. CCurveData m_Ramp;
  486. // Start time is computed based on length of item referenced by tagged name
  487. ChoreoStr_t m_TagName;
  488. ChoreoStr_t m_TagWavName;
  489. // Associated actor
  490. CChoreoActor *m_pActor;
  491. // Associated channel
  492. CChoreoChannel *m_pChannel;
  493. CUtlVector < CEventRelativeTag > m_RelativeTags;
  494. CUtlVector < CFlexTimingTag > m_TimingTags;
  495. CUtlVector < CEventAbsoluteTag > m_AbsoluteTags[ NUM_ABS_TAG_TYPES ];
  496. CUtlVector < CFlexAnimationTrack * > m_FlexAnimationTracks;
  497. CChoreoScene *m_pSubScene;
  498. CAudioMixer *m_pMixer;
  499. // Scene which owns this event
  500. CChoreoScene *m_pScene;
  501. int m_nPitch;
  502. int m_nYaw;
  503. float m_flDistanceToTarget;
  504. int m_nGlobalID;
  505. ChoreoStr_t m_CCToken;
  506. unsigned int m_uRequiredCombinedChecksum;
  507. // on master only, the combined file must have the same checksum to be useable
  508. int m_nNumSlaves;
  509. // Only set on master, helps UI draw underbar
  510. float m_flLastSlaveEndTime;
  511. // true if the cc token was found in the cc manager's database
  512. CUtlVector< CChoreoEvent * > m_Dependencies;
  513. int m_nDefaultCurveType;
  514. public:
  515. // used only during scrubbing of looping sequences
  516. float m_flPrevCycle;
  517. float m_flPrevTime;
  518. // Flags
  519. bool m_bFixedLength:1;
  520. // True if this event must be "finished" before the next section can be started
  521. // after playback is paused from a globalevent
  522. bool m_bResumeCondition:1;
  523. bool m_bUsesTag:1;
  524. bool m_bTrackLookupSet:1;
  525. bool m_bProcessing:1;
  526. bool m_bHasStopped : 1;
  527. bool m_bLockBodyFacing:1;
  528. // Purely for save/load
  529. bool m_bMarkedForSave:1;
  530. bool m_bUsingCombinedSoundFile:1;
  531. bool m_bCCTokenValid:1;
  532. bool m_bCombinedUsingGenderToken:1;
  533. bool m_bSuppressCaptionAttenuation:1;
  534. bool m_bForceShortMovement:1;
  535. bool m_bSyncToFollowingGesture:1;
  536. bool m_bActive:1;
  537. bool m_bPlayOverScript:1;
  538. };
  539. #endif // CHOREOEVENT_H