Changelog
Dev branch
Version 2.3.7
- Removed some unusable constructor parameters from
srctools.vmf.VMF
, since they required passing in an object which requires the not-yet-constructedVMF
as a parameter. - Renamed
srctools.fgd.KeyValues
toKVDef
, so it is not confused with KV1 trees. - Replace
on_error
callback insrctools.logger.init_logging()
witherror
, which now takes just anBaseException
. SurfaceProp
has been rewritten to useattrs
to simplify code.- Add
srctools.run.send_engine_command()
, which executes console commands in a running Source game. Vec
andFrozenVec
no longer inherits fromtyping.SupportsRound
, since typeshed updated the overloads forround()
to permit zero-arg calls to return a non-int
type.- Permit VMFs to accept frozen math classes directly as keyvalues.
- Fix multiplying vectors and
norm_mask()
not producingFrozenVec
. - Parse errors in
BSP.ents
are more informative and verbose. - Add an additional callback parameter to
srctools.packlist.PackList.pack_into_zip()
to finely control which files are packed. - Implement vector and angle stringification manually, to ensure
.0
prefixes are always removed. - Use
FrozenVec
andFrozenAngle
in thedmx
module instead ofnamedtuple()
subclasses. - Upgrade
srctools.dmx.Time
to a full class instead of atyping.NewType
. - Fix packlist logic inadvertently discarding
skinset
keyvalue hints when packing models. - Change behaviour of DMX
name
andid
attributes to match game logic.name
is actually a regular attribute, but the uuid has a unique type and so can coexist with an attribute of the same name. - Add support for Black Mesa’s static prop format.
- Support integer values for soundscript channels, instead of just
CHAN_
constants. - Add a distinct exception (
RootEscapeError
) for when../
paths go above the root of a filesystem.
Version 2.3.6
- Add ability to specify resources used in entities to the FGD file, move internal class resource definitions to the Hammer Addons repository.
- Added new
srctools.fgd.EntityDef.get_resources()
method, replacingfgd.entclass_*()
methods. - When parsing VMF outputs, assume extraneous commas are part of the parameter.
- Add
srctools.math.FrozenVec
,srctools.math.FrozenAngle
andsrctools.math.FrozenMatrix
- immutable versions of the existing classes. This is a far better version ofVec_tuple
, which is now deprecated. - Build Python 3.11 wheels.
- Drop dependency on
atomicwrites
, it is no longer being maintained.
Version 2.3.5
- Expand on documentation, build into explicit docs files.
- Fix
srctools.logging.LoggerAdapter.log()
being invalid in Python 3.7. - Make
srctools.fgd
work when reloaded. - Remove blank
srctools.choreo
module. - Disable iterating on
srctools.math.Matrix
, this is not useful. - Add iterable parameter to
srctools.dmx.Attribute.array()
, for constructing arrays with values. - Fix DMX
bool
tofloat
conversions mistakenly returningint
instead. - Remove useless
header_len
attribute fromsrctools.vpk.VPK
. - Rename
srctools.property_parser.Property
tosrctools.keyvalues.Keyvalues
, as well asNoKeyError
andKeyValError
. - Allow parsing
srctools.fgd.IODef
types which normally are not allowed for I/O. This will be substituted when exporting. - Use
__class__.__name__
in reprs, to better support subclasses. - Issue #14: Disable some size checks on LZMA decompression, so more TF2 maps can be parsed.
Version 2.3.4
- Add public submodules to
__all__
. - Disable escapes when parsing gameinfo files.
- Add unprefixed
vtx
files tosrctools.mdl.MDL_EXTS
. - Skip empty folder/extension dicts when writing VPK files.
- Clean up VPK fileinfo dicts when deleting files.
- Default
srctools.fgd.IODef
tosrctools.fgd.ValueTypes.VOID
. - Sort tags when exporting FGDs, to make it determinstic.
Version 2.3.3
- Writing out soundscript/particle cache can be non-atomic.
- Vendor code from deprecated
chunk.Chunk
standard library class. - Fix bad use of builtin generics.
Version 2.3.2
- Make particle systems use a cache file for the manifest too.
- Make
srctools.fgd.FGD.engine_db()
actually cache and copy the database. - Automatically add the
update
folder to searchpath precedence, fixing TeamSpen210/HammerAddons#164. - Make DMX scalar type deduction more strict (removing iterable -> vec support), making it typesafe.
- Add
srctools.filesys.CACHE_KEY_INVALID
. - Add
srctools.math.Matrix.from_angstr()
.
Version 2.3.1
- Fix
srctools.vmf.Output.combine()
not handlingtimes
correctly. srctools.math.quickhull()
is now public.- Add
srctools.bsp.BSP.is_cordoned_heuristic()
. - Restrict
srctools.bsp.Overlay.min_cpu
,max_cpu
,min_gpu
andmax_gpu
to valid values. - Test against Python 3.11.
- Read/write the
LEAFMINDISTTOWATER
lump data intosrctools.bsp.VisLeaf.min_water_dist
. - Read/write the
LEAFWATERDATA
lump. - Copy flags when copying
srctools.bsp.TexInfo
from an existing source. srctools.tokenizer.Tokenizer
now handles universal newlines conversion.- Disallow newlines in keyvalues keys when parsing by default. This catches syntax errors earlier.
- More
srctools.game.Game
gameinfo.txt
fields are now optional.
Version 2.3.0
- __Postcompiler code has been moved to HammerAddons.__
- Fix raw sound filenames not stripping special characters from the start when packing.
- Allow
srctools.dmx.Color
to omit alpha when parsed from strings, and roound/clamp values. - Handle INFRA’s altered
srctools.bsp.Primitive
lump. - Read soundscripts and breakable chunk files with code page 1252.
- Handle TF2’s LZMA compressed lumps.
- Detect various alternate versions of
srctools.bsp.StaticProp
lumps, and parse them. srctools.vmf.Entity
now directly implementscollections.abc.MutableMapping
. Direct access to theEntity.keys
dict
is deprecated.- Correctly handle proxy blocks in
VMT
patch shaders. - DMX stub and null elements use an immutable subclass, instead of having elements be None-able.
- Disallow entities to have a blank classname.
- Elide long arrays in element reprs.
- Add some additional logs when finding propcombine models fails.
- Clean up
srctools.Property.build()
API. - Make error messages more clear when
srctools.tokenizer.Tokenizer.error()
is used directly with aToken
. - Include potential variables in
KeyError
fromsrctools.vmf.EntityFixup.substitute()
. - Remove support for deprecated
imghdr
module. - Upgrade plugin finding logic to ensure each source is mounted under a persistent ID.
- Add missing
srctools.bsp.Primitive.dynamic_shadows
. - Deprecate
srctools.AtomicWriter
, use theatomicwrites
module. srctools._class_resources
is now only imported when required.- Use Cython when building, instead of including sources.
srctools.vmf.Entity.fixup
will instantiate theEntityFixup
object only when actually required.
Version 2.2.5
- Restore
srctools.dmx.Attribute.iter_str()
etc method’s ability to iterate scalars. - Suppress warnings in
srctools.Property.copy()
.
Version 2.2.4
- Fix behaviour of
srctools.Property.__getitem__()
and__setitem__()
. - Improve performance of
VPK
parsing. - Add support for Portal Revolution’s
FGD
helper tweaks. - Add option to collapse and remove IO proxies entirely.
- Fix
ModelCompiler
creating directories with relative paths. - Pass through unknown model flag bits unchanged.
- Fix VPK ascii check.
- Handle VMF groups correctly.
- Add
srctools.math.Vec.bbox_intersect()
. - Allow indexing
PrismFace
objects by a normal to get aSide
. - Add
srctools.dmx.Attribute.iter_str()
etc methods for iterating converted values. Directly iterating theAttribute
is deprecated. - Add
srctools.dmx.Attribute.append()
,extend()
andclear_array()
methods. - Fix corruption from mistaken deduplication of
srctools.bsp.VisLeaf
andPrimitive
lumps.
Version 2.2.3
- Fix use of builtin generics.
Version 2.2.2
- Document some known particle manifest paths.
- Handle double-spacing in animation particle options.
- Improve type hints in
srctools.smd
.
Version 2.2.1
Version 2.2.0
- Make
srctools.compiler.mdl_compiler
generic, to allow typechecking results. - Add
srctools.particles
. - DMX attributes may now be copied using the
copy
module, and also tested for equality. srctools.sndscript.Sound
now lazily creates operator stack keyvalue objects.srctools.packlist.Packlist
now can pack particle systems, and generate particle manifests.- Animation events which spawn particles are also detected.
Version 2.1.0
- Fix
%
-formatted logs breaking whensrctools.logger
is used. - Add
Property.extend()
, instead of using+
orProperty.append()
with a block. That usage is deprecated. - Deprecate creating root properties with
name=None
. srctools.filesys.FileSystemChain
is no longer generic, this is not useful.- Add functions which embed a Keyvalues1 tree in a DMX tree.