- Include the docs and tests in the source distribution.
- Add support for detecting and packing weapon scripts.
- Make custom model gibs inherit skinset when packing.
- Add :py
srctools.bsp.BModel.clear_physics()
, to delete physics data for a brush model. - Add :py
srctools.Keyvalues.LeafKeyvalueError
, raised when block-only operations are attempted on leaf keyvalues. This improves the messages raised and makes them consistent. - Fix :py
srctools.vtf.Frame
indexing behaviour. It would access totally incorrect pixels. - Correctly read/write L4D2's BSP format.
- Fix :py
srctools.vtf.Frame.copy_from()
not clearing cached unparsed file data. If the VTF was parsed from a file, this could case changes to be overwritten with the original data. - Add :py
srctools.vtf.Frame.fill()
, for filling a frame with a constant colour. - Add support for Chaos non-uniform static prop scaling (by @ozxybox).
- Correctly handle non-float numeric values being passed to various :py
srctools.math
operations. - Compute the total vertex count for parsed models.
- Fix Cython version of :py
Vec.join() <srctools.math.VecBase.join>
using a default of{x} {y} {z}
, not{x}, {y}, {z}
. - Added support for the Chaos BSP format (by @ozxybox).
- Improve internal FGD database format to allow parsing entities as they are required. For best efficiency, use :py
EntityDef.engine_def() <srctools.fgd.EntityDef.engine_def>
instead of :pyFGD.engine_dbase() <srctools.fgd.FGD.engine_dbase()>
if possible. - Fix a few bugs with instance collapsing.
- Fix :py
srctools.logger
discarding :external:pyMultiError
(or its backport) if it bubbles up to the toplevel. - Tweak VMF
localise()
andtranslate()
type hints to allow :py~srctools.math.FrozenVec
as the origin. - Make movement and rotation of displacements work correctly.
- Handle pitch keyvalues correctly when instancing, only rotating if it is a specific type.
- Changed :py
srctools.instancing.collapse_one()
to use the entclass database directly, deprecating thefgd
parameter as a result. - Fix :py
BSP.surfedges <srctools.bsp.BSP.surfedges>
incorrectly using edge0
, which may cause a single invisible triangle in maps.
- Removed some unusable constructor parameters from :py
srctools.vmf.VMF
, since they required passing in an object which requires the not-yet-constructed :py~srctools.vmf.VMF
as a parameter. - Renamed
srctools.fgd.KeyValues
toKVDef
, so it is not confused with KV1 trees. - Replace
on_error
callback in :pysrctools.logger.init_logging()
witherror
, which now takes just an :external:pyBaseException
. - :py
~srctools.surfaceprop.SurfaceProp
has been rewritten to useattrs
to simplify code. - Add :py
srctools.run.send_engine_command()
, which executes console commands in a running Source game. - :py
~srctools.math.Vec
and :py~srctools.math.FrozenVec
no longer inherits from :external:pytyping.SupportsRound
, since typeshed updated the overloads for :external:pyround()
to permit zero-arg calls to return a non-:external:pyint
type. - Permit VMFs to accept frozen math classes directly as keyvalues.
- Fix multiplying vectors and :py
Vec.norm_mask() <srctools.math.VecBase.norm_mask()>
not producing :py~srctools.math.FrozenVec
. - Parse errors in
BSP.ents
are more informative and verbose. - Add an additional callback parameter to :py
PackList.pack_into_zip() <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 :py
~srctools.math.FrozenVec
and :py~srctools.math.FrozenAngle
in the :py~srctools.dmx
module instead of :external:py~collections.namedtuple
subclasses. - Upgrade :py
srctools.dmx.Time
to a full class instead of a :external:pytyping.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 (:py
~srctools.filesys.RootEscapeError
) for when../
paths go above the root of a filesystem.
- Add ability to specify resources used in entities to the FGD file, move internal class resource definitions to the Hammer Addons repository.
- Added new :py
srctools.fgd.EntityDef.get_resources()
method, replacingfgd.entclass_*()
methods. - When parsing VMF outputs, assume extraneous commas are part of the parameter.
- Add :py
~srctools.math.FrozenVec
, :py~srctools.math.FrozenAngle
and :py~srctools.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.
- Expand on documentation, build into explicit docs files.
- Fix :py
!srctools.logging.LoggerAdapter.log
being invalid in Python 3.7. - Make :py
srctools.fgd
work when reloaded. - Remove blank
srctools.choreo
module. - Disable iterating on :py
srctools.math.Matrix
, this is not useful. - Add iterable parameter to :py
srctools.dmx.Attribute.array()
, for constructing arrays with values. - Fix DMX :external:py
bool
to :external:pyfloat
conversions mistakenly returning :external:pyint
instead. - Remove useless
header_len
attribute from :pysrctools.vpk.VPK
. - Rename
srctools.property_parser.Property
to :pysrctools.keyvalues.Keyvalues
, as well as :py~srctools.keyvalues.NoKeyError
and :py~srctools.keyvalues.KeyValError
. - Allow parsing :py
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.
- Add public submodules to
__all__
. - Disable escapes when parsing gameinfo files.
- Add unprefixed
vtx
files to :pysrctools.mdl.MDL_EXTS
. - Skip empty folder/extension dicts when writing VPK files.
- Clean up VPK fileinfo dicts when deleting files.
- Default :py
srctools.fgd.IODef
to :pysrctools.fgd.ValueTypes.VOID
. - Sort tags when exporting FGDs, to make it determinstic.
- Writing out soundscript/particle cache can be non-atomic.
- Vendor code from deprecated
chunk.Chunk
standard library class. - Fix bad use of builtin generics.
- Make particle systems use a cache file for the manifest too.
- Make :py
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 :py
srctools.filesys.CACHE_KEY_INVALID
. - Add :py
srctools.math.Matrix.from_angstr()
.
- Fix :py
srctools.vmf.Output.combine
not handlingtimes
correctly. - :py
srctools.math.quickhull()
is now public. - Add :py
srctools.bsp.BSP.is_cordoned_heuristic()
. - Restrict :py
srctools.bsp.Overlay.min_cpu
, :py~srctools.bsp.Overlay.max_cpu
, :py~srctools.bsp.Overlay.min_gpu
and :py~srctools.bsp.Overlay.max_gpu
to valid values. - Test against Python 3.11.
- Read/write the :py
~srctools.bsp.BSP_LUMPS.LEAFMINDISTTOWATER
lump data into :pysrctools.bsp.VisLeaf.min_water_dist
. - Read/write the :py
~srctools.bsp.BSP_LUMPS.LEAFWATERDATA
lump. - Copy flags when copying :py
srctools.bsp.TexInfo
from an existing source. - :py
srctools.tokenizer.Tokenizer
now handles universal newlines conversion. - Disallow newlines in keyvalues keys when parsing by default. This catches syntax errors earlier.
- More :py
srctools.game.Game
gameinfo.txt
fields are now optional.
- Postcompiler code has been moved to HammerAddons.
- Fix raw sound filenames not stripping special characters from the start when packing.
- Allow :py
srctools.dmx.Color
to omit alpha when parsed from strings, and roound/clamp values. - Handle INFRA's altered :py
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 :py
srctools.bsp.StaticProp
lumps, and parse them. - :py
srctools.vmf.Entity
now directly implements :external:pycollections.abc.MutableMapping
. Direct access to theEntity.keys
:external:pydict
is deprecated. - Correctly handle proxy blocks in :py
~srctools.vmt.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 :py
!srctools.Property.build()
API. - Make error messages more clear when :py
srctools.tokenizer.Tokenizer.error()
is used directly with a :py~srctools.tokenizer.Token
. - Include potential variables in :external:py
KeyError
from :pysrctools.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 :py
srctools.bsp.Primitive.dynamic_shadows
. - Deprecate :py
srctools.AtomicWriter
, use theatomicwrites
module. - :py
srctools._class_resources
is now only imported when required. - Use Cython when building, instead of including sources.
- :py
srctools.vmf.Entity.fixup
will instantiate the :py~srctools.vmf.EntityFixup
object only when actually required.
- Restore :py
srctools.dmx.Attribute.iter_str()
etc method's ability to iterate scalars. - Suppress warnings in :py
srctools.Property.copy()
.
- Fix behaviour of :py
Property.__getitem__() <srctools.keyvalues.Keyvalues.__getitem__()>
and :pyProperty.__setitem__() <srctools.keyvalues.Keyvalues.__setitem__()>
. - Improve performance of :py
~srctools.vpk.VPK
parsing. - Add support for Portal Revolution's :py
~srctools.fgd.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 :py
srctools.math.Vec.bbox_intersect
. - Allow indexing :py
~srctools.vmf.PrismFace
objects by a normal to get a :py~srctools.vmf.Side
. - Add :py
srctools.dmx.Attribute.iter_str()
etc methods for iterating converted values. Directly iterating the :py~srctools.dmx.Attribute
is deprecated. - Add :py
srctools.dmx.Attribute.append()
, :py~srctools.dmx.Attribute.extend()
and :py~srctools.dmx.Attribute.clear_array()
methods. - Fix corruption from mistaken deduplication of :py
srctools.bsp.VisLeaf
and :py~srctools.bsp.Primitive
lumps.
- Fix use of builtin generics.
- Document some known particle manifest paths.
- Handle double-spacing in animation particle options.
- Improve type hints in :py
srctools.smd
.
- Missing particles is now an warning, not an error.
- Particles are now case-insensitive.
- py
srctools.vmf.EntityFixup.keys()
, :py~srctools.vmf.EntityFixup.values()
and :py~srctools.vmf.EntityFixup.items()
are now full mapping views. - Fix incompatibility with some Python versions.
- Make
srctools.compiler.mdl_compiler
generic, to allow typechecking results. - Add :py
srctools.particles
. - DMX attributes may now be copied using the :external:py
copy
module, and also tested for equality. - :py
srctools.sndscript.Sound
now lazily creates operator stack keyvalue objects. - :py
srctools.packlist.Packlist
now can pack particle systems, and generate particle manifests. - Animation events which spawn particles are also detected.
- Fix
%
-formatted logs breaking when :pysrctools.logger
is used. - Add :py
Property.extend()
, instead of using+
or :pyProperty.append()
with a block. That usage is deprecated. - Deprecate creating root properties with
name=None
. - :py
srctools.filesys.FileSystemChain
is no longer generic, this is not useful. - Add functions which embed a Keyvalues1 tree in a DMX tree.