srctools.mdl

Parses Source models, to extract metadata.

class srctools.mdl.Flags(value)

Bases: Flag

Flags for studio models.

autogenerated_hitbox = 1
uses_env_cubemap = 2
force_opaque = 4
translucent_twopass = 8
static_prop = 16
uses_fb_texture = 32
hasshadowlod = 64
uses_bumpmapping = 128
use_shadowlod_materials = 256
no_forced_fade = 2048
force_phoneme_crossfade = 4096
constant_directional_light_dot = 8192
flexes_converted = 16384
built_in_preview_mode = 32768
ambient_boost = 65536
do_not_cast_shadows = 131072
cast_texture_shadows = 262144
class srctools.mdl.Model(
filesystem: FileSysT,
file: File[FileSysT],
)

Represents parts of Source models.

This does not parse the animation or geometry data, only other metadata.

iter_textures(skins: Optional[Iterable[int]] = None) Iterator[str]

Yield textures used by this model.

Skins if given should be a set of skin indexes, which constrains the list. This looks up in the filesystem to determine which CDMaterials folder to use, if any.

class srctools.mdl.AnimEventTypes(value)

Bases: Flag

Categories of animation events.

NONE = 0
SERVER = 1
SCRIPTED = 2
SHARED = 4
WEAPON = 8
CLIENT = 16
FACEPOSER = 32
class srctools.mdl.AnimEvents(value)

Bases: Enum

The types of events in models.

0 - 999 is “specific” / new string-based type. 1000 - 1999 is for scripted events. 2000 - 2999 is shared events. 3000 - 4999 is weapon events. 5000+ is clientside events.

AE_EMPTY = 0
AE_NPC_LEFTFOOT = 1
AE_NPC_RIGHTFOOT = 2
AE_NPC_BODYDROP_LIGHT = 3
AE_NPC_BODYDROP_HEAVY = 4
AE_NPC_SWISHSOUND = 5
AE_NPC_180TURN = 6
AE_NPC_ITEM_PICKUP = 7
AE_NPC_WEAPON_DROP = 8
AE_NPC_WEAPON_SET_SEQUENCE_NAME = 9
AE_NPC_WEAPON_SET_SEQUENCE_NUMBER = 10
AE_NPC_WEAPON_SET_ACTIVITY = 11

Alias: AE_NPC_HOLSTER

AE_NPC_DRAW = 12
AE_NPC_WEAPON_FIRE = 13
AE_CL_PLAYSOUND = 14
AE_SV_PLAYSOUND = 15
AE_CL_STOPSOUND = 16
AE_START_SCRIPTED_EFFECT = 17
AE_STOP_SCRIPTED_EFFECT = 18
AE_CLIENT_EFFECT_ATTACH = 19
AE_MUZZLEFLASH = 20
AE_NPC_MUZZLEFLASH = 21
AE_THUMPER_THUMP = 22
AE_AMMOCRATE_PICKUP_AMMO = 23
AE_NPC_RAGDOLL = 24
AE_NPC_ADDGESTURE = 25
AE_NPC_RESTARTGESTURE = 26
AE_NPC_ATTACK_BROADCAST = 27
AE_NPC_HURT_INTERACTION_PARTNER = 28
AE_NPC_SET_INTERACTION_CANTDIE = 29
AE_SV_DUSTTRAIL = 30
AE_CL_CREATE_PARTICLE_EFFECT = 31
AE_RAGDOLL = 32
AE_CL_ENABLE_BODYGROUP = 33
AE_CL_DISABLE_BODYGROUP = 34
AE_CL_BODYGROUP_SET_VALUE = 35
AE_CL_BODYGROUP_SET_VALUE_CMODEL_WPN = 36
AE_WPN_PRIMARYATTACK = 37
AE_WPN_INCREMENTAMMO = 38
AE_WPN_HIDE = 39
AE_WPN_UNHIDE = 40
AE_WPN_PLAYWPNSOUND = 41
AE_RD_ROBOT_POP_PANELS_OFF = 42
AE_TAUNT_ENABLE_MOVE = 43
AE_TAUNT_DISABLE_MOVE = 44
AE_ASW_FOOTSTEP = 45
AE_MARINE_FOOTSTEP = 46
AE_MARINE_RELOAD_SOUND_A = 47
AE_MARINE_RELOAD_SOUND_B = 48
AE_MARINE_RELOAD_SOUND_C = 49
AE_REMOVE_CLIENT_AIM = 50
AE_MELEE_DAMAGE = 51
AE_MELEE_START_COLLISION_DAMAGE = 52
AE_MELEE_STOP_COLLISION_DAMAGE = 53
AE_SCREEN_SHAKE = 54
AE_START_DETECTING_COMBO = 55
AE_STOP_DETECTING_COMBO = 56
AE_COMBO_TRANSITION = 57

Alias: AE_ALLOW_MOVEMENT

AE_SKILL_EVENT = 59
AE_TUG_INCAP = 60
SCRIPT_EVENT_DEAD = 1000
SCRIPT_EVENT_NOINTERRUPT = 1001
SCRIPT_EVENT_CANINTERRUPT = 1002
SCRIPT_EVENT_FIREEVENT = 1003
SCRIPT_EVENT_SOUND = 1004
SCRIPT_EVENT_SENTENCE = 1005
SCRIPT_EVENT_INAIR = 1006
SCRIPT_EVENT_ENDANIMATION = 1007
SCRIPT_EVENT_SOUND_VOICE = 1008
SCRIPT_EVENT_SENTENCE_RND1 = 1009
SCRIPT_EVENT_NOT_DEAD = 1010
SCRIPT_EVENT_EMPHASIS = 1011
SCRIPT_EVENT_BODYGROUPON = 1020
SCRIPT_EVENT_BODYGROUPOFF = 1021
SCRIPT_EVENT_BODYGROUPTEMP = 1022
SCRIPT_EVENT_FIRE_INPUT = 1100
NPC_EVENT_BODYDROP_LIGHT = 2001
NPC_EVENT_BODYDROP_HEAVY = 2002
NPC_EVENT_SWISHSOUND = 2010
NPC_EVENT_180TURN = 2020
NPC_EVENT_ITEM_PICKUP = 2040
NPC_EVENT_WEAPON_DROP = 2041
NPC_EVENT_WEAPON_SET_SEQUENCE_NAME = 2042
NPC_EVENT_WEAPON_SET_SEQUENCE_NUMBER = 2043
NPC_EVENT_WEAPON_SET_ACTIVITY = 2044
NPC_EVENT_LEFTFOOT = 2050
NPC_EVENT_RIGHTFOOT = 2051
NPC_EVENT_OPEN_DOOR = 2060
EVENT_WEAPON_MELEE_HIT = 3001
EVENT_WEAPON_SMG1 = 3002
EVENT_WEAPON_MELEE_SWISH = 3003
EVENT_WEAPON_SHOTGUN_FIRE = 3004
EVENT_WEAPON_THROW = 3005
EVENT_WEAPON_AR1 = 3006
EVENT_WEAPON_AR2 = 3007
EVENT_WEAPON_HMG1 = 3008
EVENT_WEAPON_SMG2 = 3009
EVENT_WEAPON_MISSILE_FIRE = 3010
EVENT_WEAPON_SNIPER_RIFLE_FIRE = 3011
EVENT_WEAPON_AR2_GRENADE = 3012
EVENT_WEAPON_THROW2 = 3013
EVENT_WEAPON_PISTOL_FIRE = 3014
EVENT_WEAPON_RELOAD = 3015
EVENT_WEAPON_THROW3 = 3016
EVENT_WEAPON_RELOAD_SOUND = 3017
EVENT_WEAPON_RELOAD_FILL_CLIP = 3018
EVENT_WEAPON_SMG1_BURST1 = 3101
EVENT_WEAPON_SMG1_BURSTN = 3102
EVENT_WEAPON_AR2_ALTFIRE = 3103
EVENT_WEAPON_SEQUENCE_FINISHED = 3900
CL_EVENT_MUZZLEFLASH0 = 5001
CL_EVENT_MUZZLEFLASH1 = 5011
CL_EVENT_MUZZLEFLASH2 = 5021
CL_EVENT_MUZZLEFLASH3 = 5031
CL_EVENT_SPARK0 = 5002
CL_EVENT_NPC_MUZZLEFLASH0 = 5003
CL_EVENT_NPC_MUZZLEFLASH1 = 5013
CL_EVENT_NPC_MUZZLEFLASH2 = 5023
CL_EVENT_NPC_MUZZLEFLASH3 = 5033
CL_EVENT_SOUND = 5004
CL_EVENT_EJECTBRASS1 = 6001
CL_EVENT_DISPATCHEFFECT0 = 9001
CL_EVENT_DISPATCHEFFECT1 = 9011
CL_EVENT_DISPATCHEFFECT2 = 9021
CL_EVENT_DISPATCHEFFECT3 = 9031
CL_EVENT_DISPATCHEFFECT4 = 9041
CL_EVENT_DISPATCHEFFECT5 = 9051
CL_EVENT_DISPATCHEFFECT6 = 9061
CL_EVENT_DISPATCHEFFECT7 = 9071
CL_EVENT_DISPATCHEFFECT8 = 9081
CL_EVENT_DISPATCHEFFECT9 = 9091
CL_EVENT_SPRITEGROUP_CREATE = 6002
CL_EVENT_SPRITEGROUP_DESTROY = 6003
CL_EVENT_FOOTSTEP_LEFT = 6004
CL_EVENT_FOOTSTEP_RIGHT = 6005
CL_EVENT_MFOOTSTEP_LEFT = 6006
CL_EVENT_MFOOTSTEP_RIGHT = 6007
CL_EVENT_MFOOTSTEP_LEFT_LOUD = 6008
CL_EVENT_MFOOTSTEP_RIGHT_LOUD = 6009
CSS_FOOT_WATER_SPLASH = 7001
CSS_FOOT_WATER_RIPPLE = 7002
CSGO_FOOT_JUMP = 4001
CSGO_FOOT_WALK = 4002
class srctools.mdl.IncludedMDL(label: str, filename: str)

Additional model files to load animations from.

class srctools.mdl.SeqEvent(
type: Union[AnimEvents, str],
cycle: float,
options: str,
)

An event that occurs at some point in an animation sequence.

class srctools.mdl.Sequence(
label: str,
act_name: str,
flags: int,
act_weight: int,
events: List[SeqEvent],
bbox_min: Vec,
bbox_max: Vec,
keyvalues: str,
)

An animation sequence.