Blender V4.3
DNA_anim_types.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2009 Blender Authors, Joshua Leung. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include "BLI_utildefines.h"
12
13#include "DNA_ID.h"
14#include "DNA_action_types.h"
15#include "DNA_curve_types.h"
16#include "DNA_listBase.h"
17
18#ifdef __cplusplus
19# include "BLI_span.hh"
20
21# include <type_traits>
22#endif
23
24/* ************************************************ */
25/* F-Curve DataTypes */
26
27/* Modifiers -------------------------------------- */
28
35typedef struct FModifier {
36 struct FModifier *next, *prev;
37
39 struct FCurve *curve;
41 void *data;
42
44 char name[64];
46 short type;
48 short flag;
54
55 char _pad[6];
56
58 float influence;
59
61 float sfra;
63 float efra;
65 float blendin;
67 float blendout;
69
74typedef enum eFModifier_Types {
81 FMODIFIER_TYPE_FILTER = 6, /* Was never implemented, removed in #123906. */
82 FMODIFIER_TYPE_PYTHON = 7, /* Was never implemented, removed in #123906. */
85
86 /* NOTE: all new modifiers must be added above this line */
89
91typedef enum eFModifier_Flags {
96 FMODIFIER_FLAG_EXPANDED = (1 << 1),
97#endif
107
108/* --- */
109
110/* Generator modifier data */
111typedef struct FMod_Generator {
112 /* general generator information */
116 unsigned int arraysize;
117
121 int mode;
122
124 int flag;
126
127/* generator modes */
132
133/* generator flags
134 * - shared by Generator and Function Generator
135 */
137 /* generator works in conjunction with other modifiers (i.e. doesn't replace those before it) */
140
163
164/* 'function' generator types */
173
174/* envelope modifier - envelope data */
175typedef struct FCM_EnvelopeData {
177 float min, max;
179 float time;
180
182 short f1;
184 short f2;
186
187/* envelope-like adjustment to values (for fade in/out) */
199
200/* cycling/repetition modifier data */
201/* TODO: we can only do complete cycles. */
212
213/* cycling modes */
224
225/* limits modifier data */
226typedef struct FMod_Limits {
230 int flag;
231 char _pad[4];
233
234/* limiting flags */
241
242/* noise modifier data */
243typedef struct FMod_Noise {
244 float size;
245 float strength;
246 float phase;
247 float offset;
248
249 short depth;
252
253/* modification modes */
264
265/* stepped modifier data */
266typedef struct FMod_Stepped {
270 float offset;
271
276
278 int flag;
280
281/* stepped modifier range flags */
288
289/* Drivers -------------------------------------- */
290
296typedef struct DriverTarget {
299
301 char *rna_path;
302
307 char pchan_name[64];
310
313 char _pad[5];
314
319 short flag;
321 short options;
324
325 /* Context-dependent property of a "Context Property" type target.
326 * The `rna_path` of this property is used as a target.
327 * This is a value of enumerator #eDriverTarget_ContextProperty. */
329
330 /* Fallback value to use with DTAR_OPTION_USE_FALLBACK. */
333
339
341typedef enum eDriverTarget_Flag {
347
348 /* "local-space" flags. */
353
356
360
361/* Transform Channels for Driver Targets */
377
378/* Rotation channel mode for Driver Targets */
404
409
410/* --- */
411
412/* maximum number of driver targets per variable */
413#define MAX_DRIVER_TARGETS 8
414
423typedef struct DriverVar {
424 struct DriverVar *next, *prev;
425
430 char name[64];
431
434
438 char type;
439
441 short flag;
443 float curval;
445
467
468/* Driver Variable Flags */
469typedef enum eDriverVar_Flags {
470 /* variable is not set up correctly */
471 DVAR_FLAG_ERROR = (1 << 0),
472
473 /* variable name doesn't pass the validation tests */
475 /* name starts with a number */
477 /* name starts with a special character (!, $, @, #, _, etc.) */
479 /* name contains a space */
481 /* name contains a dot */
483 /* name contains invalid chars */
485 /* name is a reserved keyword */
487 /* name is zero-length */
490
492#define DVAR_ALL_INVALID_FLAGS \
493 (DVAR_FLAG_INVALID_NAME | DVAR_FLAG_INVALID_START_NUM | DVAR_FLAG_INVALID_START_CHAR | \
494 DVAR_FLAG_INVALID_HAS_SPACE | DVAR_FLAG_INVALID_HAS_DOT | DVAR_FLAG_INVALID_HAS_SPECIAL | \
495 DVAR_FLAG_INVALID_PY_KEYWORD | DVAR_FLAG_INVALID_EMPTY)
496
497/* --- */
498
511typedef struct ChannelDriver {
514
515 /* python expression to execute (may call functions defined in an accessory file)
516 * which relates the target 'variables' in some way to yield a single usable value
517 */
519 char expression[256];
522
525
527 float curval;
528 /* XXX to be implemented... this is like the constraint influence setting. */
531
532 /* general settings */
534 int type;
536 int flag;
538
552
554typedef enum eDriver_Flags {
559 /* TODO: this needs to be implemented at some stage or left out... */
560 // DRIVER_FLAG_LAYERING = (1 << 2),
565 /* Set if the driver cannot run because it uses Python which isn't allowed to execute. */
570
571/* F-Curves -------------------------------------- */
572
574#define FCURVE_ACTIVE_KEYFRAME_NONE -1
575
582typedef struct FPoint {
584 float vec[2];
586 int flag;
587 char _pad[4];
589
591typedef struct FCurve {
592 struct FCurve *next, *prev;
593
594 /* group */
597
598 /* driver settings */
601 /* evaluation settings */
604
605 /* motion data */
611 unsigned int totvert;
612
621
622 /* value cache + settings */
624 float curval;
626 short flag;
628 short extend;
631
632 char _pad[3];
633
634 /* RNA - data link */
647 char *rna_path;
648
649 /* curve coloring (for editor) */
653 float color[3];
654
657
658/* user-editable flags/settings */
659typedef enum eFCurve_Flags {
661 FCURVE_VISIBLE = (1 << 0),
663 FCURVE_SELECTED = (1 << 1),
665 FCURVE_ACTIVE = (1 << 2),
669 FCURVE_MUTED = (1 << 4),
670
673 FCURVE_AUTO_HANDLES = (1 << 5), /* Dirty. */
674#endif
675 FCURVE_MOD_OFF = (1 << 6),
678 FCURVE_DISABLED = (1 << 10),
680 FCURVE_INT_VALUES = (1 << 11),
684
686 FCURVE_TAGGED = (1 << 15),
688
689/* extrapolation modes (only simple value 'extending') */
696
697/* curve coloring modes */
708
709/* curve smoothing modes */
716
717/* ************************************************ */
718/* 'Action' Data-types */
719
720/* NOTE: Although these are part of the Animation System,
721 * they are not stored here, see `DNA_action_types.h` instead. */
722
723/* ************************************************ */
724/* NLA - Non-Linear Animation */
725
726/* NLA Strips ------------------------------------- */
727
734typedef struct NlaStrip {
735 struct NlaStrip *next, *prev;
736
746
765 char action_slot_name[66]; /* MAX_ID_NAME */
766 char _pad0[2];
767
768 /* TODO: move out? */
772
774 char name[64];
775
780
782 float start, end;
785
787 float repeat;
789 float scale;
790
795
798 char _pad1[2];
799
801 short type;
802
805
807 int flag;
808 char _pad2[4];
809
810 /* Pointer to an original NLA strip. */
812
813 void *_pad3;
815
816#ifdef __cplusplus
817/* Some static assertions that things that should have the same type actually do. */
818static_assert(
819 std::is_same_v<decltype(ActionSlot::handle), decltype(NlaStrip::action_slot_handle)>);
820#endif
821
822/* NLA Strip Blending Mode */
830
833 /* extend before first frame if no previous strips in track,
834 * and always hold+extend last frame */
836 /* only hold+extend last frame */
838 /* don't contribute at all */
841
843typedef enum eNlaStrip_Flag {
844 /* UI selection flags */
847 /* NLA strip is selected for editing */
849 // NLASTRIP_FLAG_SELECT_L = (1 << 2), /* left handle selected. */
850 // NLASTRIP_FLAG_SELECT_R = (1 << 3), /* right handle selected. */
851
857
858 /* controls driven by local F-Curves */
863
866
867 /* playback flags (may be overridden by F-Curves) */
875 /* NLASTRIP_FLAG_MIRROR = (1 << 13), */ /* UNUSED */
876
877 /* temporary editing flags */
878
891
892/* NLA Strip Type */
893typedef enum eNlaStrip_Type {
894 /* 'clip' - references an Action */
896 /* 'transition' - blends between the adjacent strips */
898 /* 'meta' - a strip which acts as a container for a few others */
900
901 /* 'emit sound' - a strip which is used for timing when speaker emits sounds */
904
905/* NLA Tracks ------------------------------------- */
906
915typedef struct NlaTrack {
916 struct NlaTrack *next, *prev;
917
920
922 int flag;
925 int index;
926
928 char name[64];
930
931/* settings for track */
957
958/* ************************************ */
959/* KeyingSet Data-types */
960
970typedef struct KS_Path {
971 struct KS_Path *next, *prev;
972
976 char group[64];
977
980
984 short flag;
985
987 char *rna_path;
990
996
997/* KS_Path->flag */
998typedef enum eKSP_Settings {
999 /* entire array (not just the specified index) gets keyframed */
1002
1003/* KS_Path->groupmode */
1004typedef enum eKSP_Grouping {
1013 /* KSP_GROUP_TEMPLATE_ITEM, */ /* UNUSED */
1015
1016/* ---------------- */
1017
1029typedef struct KeyingSet {
1031
1034
1036 char idname[64];
1038 char name[64];
1040 char description[1024];
1042 char typeinfo[64];
1043
1046
1048 short flag;
1049
1054
1055 char _pad[6];
1057
1058/* KeyingSet settings */
1059typedef enum eKS_Settings {
1061 /* KEYINGSET_BUILTIN = (1 << 0), */ /* UNUSED */
1066
1067/* Flags for use by keyframe creation/deletion calls */
1068typedef enum eInsertKeyFlags {
1075 INSERTKEY_FAST = (1 << 2),
1077 /* INSERTKEY_FASTR = (1 << 3), */ /* UNUSED */
1094
1095/* ************************************************ */
1096/* Animation Data */
1097
1098/* AnimOverride ------------------------------------- */
1099
1110typedef struct AnimOverride {
1112
1117
1119 float value;
1121
1122/* AnimData ------------------------------------- */
1123
1138typedef struct AnimData {
1149
1167 char slot_name[66]; /* MAX_ID_NAME */
1169
1176 char tmp_slot_name[66]; /* MAX_ID_NAME */
1178
1179 /* nla-tracks */
1191
1192 /* 'drivers' for this ID-block's settings - FCurves, but are completely
1193 * separate from those for animation data
1194 */
1200
1203
1204 /* settings for animation evaluation */
1206 int flag;
1207
1208 /* settings for active action evaluation (based on NLA strip settings) */
1215
1218
1219#ifdef __cplusplus
1220/* Some static assertions that things that should have the same type actually do. */
1221static_assert(std::is_same_v<decltype(ActionSlot::handle), decltype(AnimData::slot_handle)>);
1222static_assert(std::is_same_v<decltype(ActionSlot::name), decltype(AnimData::slot_name)>);
1223#endif
1224
1225/* Animation Data settings (mostly for NLA) */
1226typedef enum eAnimData_Flag {
1237 /* Evaluate tracks above tweaked strip. Only relevant in tweak mode. */
1239
1243 /* ADT_DRIVERS_DISABLED = (1 << 11), */ /* UNUSED */
1244
1246 ADT_UI_SELECTED = (1 << 14),
1248 ADT_UI_ACTIVE = (1 << 15),
1249
1252
1255
1258 ADT_UI_EXPANDED = (1 << 18),
1260
1261/* Base Struct for Anim ------------------------------------- */
1262
1272
1273/* From: `DNA_object_types.h`, see its doc-string there. */
1274#define SELECT 1
#define ENUM_OPERATORS(_type, _max)
ID and Library types, which are fundamental for SDNA.
struct FMod_Cycles FMod_Cycles
eNlaStrip_Flag
@ NLASTRIP_FLAG_ACTIVE
@ NLASTRIP_FLAG_USR_INFLUENCE
@ NLASTRIP_FLAG_USR_TIME
@ NLASTRIP_FLAG_INVALID_LOCATION
@ NLASTRIP_FLAG_TEMP_META
@ NLASTRIP_FLAG_AUTO_BLENDS
@ NLASTRIP_FLAG_REVERSE
@ NLASTRIP_FLAG_MUTED
@ NLASTRIP_FLAG_USR_TIME_CYCLIC
@ NLASTRIP_FLAG_NO_TIME_MAP
@ NLASTRIP_FLAG_SELECT
@ NLASTRIP_FLAG_TWEAKUSER
@ NLASTRIP_FLAG_EDIT_TOUCHED
@ NLASTRIP_FLAG_SYNC_LENGTH
eAnimData_Flag
@ ADT_NLA_SOLO_TRACK
@ ADT_UI_EXPANDED
@ ADT_CURVES_ALWAYS_VISIBLE
@ ADT_CURVES_NOT_VISIBLE
@ ADT_DRIVERS_COLLAPSED
@ ADT_NLA_SKEYS_COLLAPSED
@ ADT_UI_ACTIVE
@ ADT_NLA_EVAL_OFF
@ ADT_NLA_EDIT_NOMAP
@ ADT_UI_SELECTED
@ ADT_NLA_EVAL_UPPER_TRACKS
@ ADT_NLA_EDIT_ON
struct FMod_Noise FMod_Noise
eFMod_Stepped_Flags
@ FCM_STEPPED_NO_AFTER
@ FCM_STEPPED_NO_BEFORE
struct FCurve FCurve
eDriverTarget_TransformChannels
@ DTAR_TRANSCHAN_ROTZ
@ DTAR_TRANSCHAN_SCALEX
@ DTAR_TRANSCHAN_SCALEZ
@ DTAR_TRANSCHAN_LOCX
@ DTAR_TRANSCHAN_ROTW
@ DTAR_TRANSCHAN_LOCY
@ DTAR_TRANSCHAN_ROTX
@ MAX_DTAR_TRANSCHAN_TYPES
@ DTAR_TRANSCHAN_LOCZ
@ DTAR_TRANSCHAN_SCALE_AVG
@ DTAR_TRANSCHAN_SCALEY
@ DTAR_TRANSCHAN_ROTY
struct FMod_Envelope FMod_Envelope
eFMod_Cycling_Modes
@ FCM_EXTRAPOLATE_MIRROR
@ FCM_EXTRAPOLATE_CYCLIC
@ FCM_EXTRAPOLATE_CYCLIC_OFFSET
@ FCM_EXTRAPOLATE_NONE
struct DriverVar DriverVar
eKS_Settings
@ KEYINGSET_ABSOLUTE
struct FMod_Limits FMod_Limits
struct FMod_Generator FMod_Generator
eDriverTarget_Options
@ DTAR_OPTION_USE_FALLBACK
eDriver_Types
@ DRIVER_TYPE_AVERAGE
@ DRIVER_TYPE_PYTHON
@ DRIVER_TYPE_MAX
@ DRIVER_TYPE_MIN
@ DRIVER_TYPE_SUM
struct NlaStrip NlaStrip
eFCurve_Coloring
@ FCURVE_COLOR_AUTO_RGB
@ FCURVE_COLOR_AUTO_RAINBOW
@ FCURVE_COLOR_CUSTOM
@ FCURVE_COLOR_AUTO_YRGB
eFMod_Generator_Flags
@ FCM_GENERATOR_ADDITIVE
eFMod_Limit_Flags
@ FCM_LIMIT_XMIN
@ FCM_LIMIT_YMAX
@ FCM_LIMIT_XMAX
@ FCM_LIMIT_YMIN
eFMod_Noise_Modifications
@ FCM_NOISE_MODIF_REPLACE
@ FCM_NOISE_MODIF_SUBTRACT
@ FCM_NOISE_MODIF_ADD
@ FCM_NOISE_MODIF_MULTIPLY
eDriverVar_Types
@ DVAR_TYPE_LOC_DIFF
@ DVAR_TYPE_TRANSFORM_CHAN
@ DVAR_TYPE_ROT_DIFF
@ MAX_DVAR_TYPES
@ DVAR_TYPE_SINGLE_PROP
@ DVAR_TYPE_CONTEXT_PROP
eInsertKeyFlags
@ INSERTKEY_FAST
@ INSERTKEY_CYCLE_AWARE
@ INSERTKEY_OVERWRITE_FULL
@ INSERTKEY_REPLACE
@ INSERTKEY_MATRIX
@ INSERTKEY_NEEDED
@ INSERTKEY_NO_USERPREF
@ INSERTKEY_AVAILABLE
@ INSERTKEY_NOFLAGS
struct KS_Path KS_Path
eFModifier_Types
@ FMODIFIER_TYPE_CYCLES
@ FMODIFIER_TYPE_FILTER
@ FMODIFIER_TYPE_STEPPED
@ FMODIFIER_TYPE_FN_GENERATOR
@ FMODIFIER_TYPE_NOISE
@ FMODIFIER_TYPE_NULL
@ FMODIFIER_TYPE_GENERATOR
@ FMODIFIER_NUM_TYPES
@ FMODIFIER_TYPE_ENVELOPE
@ FMODIFIER_TYPE_PYTHON
@ FMODIFIER_TYPE_LIMITS
eKSP_Grouping
@ KSP_GROUP_KSNAME
@ KSP_GROUP_NAMED
@ KSP_GROUP_NONE
struct KeyingSet KeyingSet
struct FCM_EnvelopeData FCM_EnvelopeData
eFMod_Generator_Modes
@ FCM_GENERATOR_POLYNOMIAL_FACTORISED
@ FCM_GENERATOR_POLYNOMIAL
eNlaStrip_Extrapolate_Mode
@ NLASTRIP_EXTEND_HOLD_FORWARD
@ NLASTRIP_EXTEND_NOTHING
@ NLASTRIP_EXTEND_HOLD
eFModifier_Flags
@ FMODIFIER_FLAG_MUTED
@ FMODIFIER_FLAG_USEINFLUENCE
@ FMODIFIER_FLAG_ACTIVE
@ FMODIFIER_FLAG_DISABLED
@ FMODIFIER_FLAG_RANGERESTRICT
struct FPoint FPoint
eDriverTarget_RotationMode
@ DTAR_ROTMODE_QUATERNION
@ DTAR_ROTMODE_SWING_TWIST_X
@ DTAR_ROTMODE_EULER_MIN
@ DTAR_ROTMODE_EULER_ZXY
@ DTAR_ROTMODE_SWING_TWIST_Y
@ DTAR_ROTMODE_EULER_XYZ
@ DTAR_ROTMODE_EULER_ZYX
@ DTAR_ROTMODE_AUTO
@ DTAR_ROTMODE_EULER_YXZ
@ DTAR_ROTMODE_EULER_MAX
@ DTAR_ROTMODE_EULER_XZY
@ DTAR_ROTMODE_SWING_TWIST_Z
@ DTAR_ROTMODE_EULER_YZX
eDriverTarget_Flag
@ DTAR_FLAG_LOCAL_CONSTS
@ DTAR_FLAG_LOCALSPACE
@ DTAR_FLAG_ID_OB_ONLY
@ DTAR_FLAG_FALLBACK_USED
@ DTAR_FLAG_INVALID
@ DTAR_FLAG_STRUCT_REF
eNlaStrip_Blend_Mode
@ NLASTRIP_MODE_REPLACE
@ NLASTRIP_MODE_ADD
@ NLASTRIP_MODE_SUBTRACT
@ NLASTRIP_MODE_COMBINE
@ NLASTRIP_MODE_MULTIPLY
eDriver_Flags
@ DRIVER_FLAG_INVALID
@ DRIVER_FLAG_PYTHON_BLOCKED
@ DRIVER_FLAG_RECOMPILE
@ DRIVER_FLAG_USE_SELF
@ DRIVER_FLAG_RENAMEVAR
@ DRIVER_FLAG_DEPRECATED
eNlaStrip_Type
@ NLASTRIP_TYPE_SOUND
@ NLASTRIP_TYPE_META
@ NLASTRIP_TYPE_TRANSITION
@ NLASTRIP_TYPE_CLIP
eFCurve_Flags
@ FCURVE_DISABLED
@ FCURVE_MUTED
@ FCURVE_TAGGED
@ FCURVE_MOD_OFF
@ FCURVE_INT_VALUES
@ FCURVE_ACTIVE
@ FCURVE_SELECTED
@ FCURVE_DISCRETE_VALUES
@ FCURVE_PROTECTED
@ FCURVE_VISIBLE
eKSP_Settings
@ KSP_FLAG_WHOLE_ARRAY
eNlaTrack_Flag
@ NLATRACK_SOLO
@ NLATRACK_ACTIVE
@ NLATRACK_MUTED
@ NLATRACK_DISABLED
@ NLATRACK_SELECTED
@ NLATRACK_PROTECTED
@ NLATRACK_TEMPORARILY_ADDED
@ NLATRACK_OVERRIDELIBRARY_LOCAL
eFCurve_Extend
@ FCURVE_EXTRAPOLATE_CONSTANT
@ FCURVE_EXTRAPOLATE_LINEAR
struct DriverTarget DriverTarget
eFCurve_Smoothing
@ FCURVE_SMOOTH_NONE
@ FCURVE_SMOOTH_CONT_ACCEL
struct FMod_FunctionGenerator FMod_FunctionGenerator
struct FModifier FModifier
struct AnimData AnimData
eDriverTarget_ContextProperty
@ DTAR_CONTEXT_PROPERTY_ACTIVE_SCENE
@ DTAR_CONTEXT_PROPERTY_ACTIVE_VIEW_LAYER
struct AnimOverride AnimOverride
struct IdAdtTemplate IdAdtTemplate
eDriverVar_Flags
@ DVAR_FLAG_INVALID_START_CHAR
@ DVAR_FLAG_INVALID_NAME
@ DVAR_FLAG_INVALID_EMPTY
@ DVAR_FLAG_INVALID_START_NUM
@ DVAR_FLAG_INVALID_HAS_SPACE
@ DVAR_FLAG_ERROR
@ DVAR_FLAG_INVALID_HAS_DOT
@ DVAR_FLAG_INVALID_HAS_SPECIAL
@ DVAR_FLAG_INVALID_PY_KEYWORD
struct FMod_Stepped FMod_Stepped
eFMod_Generator_Functions
@ FCM_GENERATOR_FN_LN
@ FCM_GENERATOR_FN_SIN
@ FCM_GENERATOR_FN_SQRT
@ FCM_GENERATOR_FN_SINC
@ FCM_GENERATOR_FN_COS
@ FCM_GENERATOR_FN_TAN
struct NlaTrack NlaTrack
struct ChannelDriver ChannelDriver
These structs are the foundation for all linked lists in the library system.
#define DNA_DEPRECATED_ALLOW
signed int int32_t
Definition stdint.h:77
unsigned char uint8_t
Definition stdint.h:78
uint8_t _pad0[2]
bAction * action
short act_blendmode
NlaStrip * actstrip
ListBase overrides
float act_influence
int32_t slot_handle
FCurve ** driver_array
uint8_t _pad2[4]
char tmp_slot_name[66]
NlaTrack * act_track
int32_t tmp_slot_handle
bAction * tmpact
short act_extendmode
uint8_t _pad1[2]
ListBase drivers
ListBase nla_tracks
char slot_name[66]
struct AnimOverride * prev
struct AnimOverride * next
char expression[256]
struct ExprPyLike_Parsed * expr_simple
char pchan_name[64]
struct DriverVar * next
DriverTarget targets[8]
struct DriverVar * prev
struct FCurve * next
bActionGroup * grp
float curval
char * rna_path
FPoint * fpt
ChannelDriver * driver
BezTriple * bezt
struct FCurve * prev
float prev_norm_factor
float prev_offset
char _pad[3]
short extend
int array_index
unsigned int totvert
int active_keyframe_index
char auto_smoothing
ListBase modifiers
FCM_EnvelopeData * data
unsigned int arraysize
struct FCurve * curve
float influence
struct FModifier * next
short ui_expand_flag
char _pad[6]
struct FModifier * prev
char _pad[4]
float vec[2]
Definition DNA_ID.h:413
struct KS_Path * next
short keyingoverride
short keyingflag
short groupmode
struct KS_Path * prev
char * rna_path
struct KeyingSet * prev
char typeinfo[64]
char idname[64]
struct KeyingSet * next
ListBase paths
short keyingoverride
char description[1024]
struct NlaStrip * next
short blendmode
char _pad2[4]
char _pad1[2]
ListBase fcurves
char action_slot_name[66]
float influence
ListBase strips
void * speaker_handle
int32_t action_slot_handle
ListBase modifiers
struct NlaStrip * prev
struct NlaStrip * orig_strip
short extendmode
char _pad0[2]
bAction * act
float strip_time
ListBase strips
struct NlaTrack * next
struct NlaTrack * prev