archives
cdrom.Iso
ion_storm.Dat
ion_storm.Pak
nexon.PakFile
(formerlybranches.nexon.pakfile.PakFile
)pkware.Zip
(formerlybranches.valve.source.PakFile
)sega.GDRom
ArchiveClass
filesystem utility methods.is_dir("folder")
.is_file("filename")
.list_dir("folder")
.path_exists("filename")
.tree(folder="./")
DiscClass
spec for disc images which may contain filesystemsalcohol.Mds
golden_hawk.Cue
mame.Chd
padus.Cdi
sega.Gdi
- added
physics.AABB.as_model()
- moved
archives
out ofextensions
- moved
lightmaps
out ofextensions
ArchiveClass
es are now initialised with@classmethod
s.from_archive("filename", archive)
.from_bytes(b"bytes")
.from_file("filename")
.from_stream(open(stream))
BspClass
es are now initialised with@classmethod
s.from_archive(branch, "filepath", archive)
.from_bytes(branch, "filepath", b"bytes")
.from_file(branch, "filepath")
.from_stream(branch, "filepath", open(stream))
__init__
methods for all SpecialLumpClassesbranches.colour
branches.ieee754
Float32
BitField
reversing helper
extensions.editor
- parse
.map
&.vmf
- compare uncompiled maps to
.bsp
- parse
utils
binary
editor
geometry
physics
texture
NexonBsp
- thanks
cso2
big-endianfourCC
- thanks
BSPX
lumps can be parsed withbspx.BspX
- SpecialLumpClasses & GameLumpClasses refactor
- new basic
__init__
for making your own from scratch - loaded from files with
from_bytes
- new basic
- BspLump refactor
- new barebones
__init__
- maps bsp lumps with
from_header
- pulled out of streams with
from_count
lumps.create_RawBspLump
will decompress before mapping- added
append
,extend
&insert
methods toRawBspLump
BspLump.find(attr=val)
method is now.search()
- removed
.find()
method fromBasicBspLump
- allowed implicit changes (e.g.
bsp.VERTICES[0].z += 1
) __iter__
doesn't update_changes
, reducing unnessecary caching- TODO:
bsp.LUMP[::]
creates a copy & doesn't affect / share_changes
RawBspLump
slices arebytearray
s
- new barebones
- Fractured Source Engine into more branches ("solves" version conflicts of SPRP formats)
extensions.archives
refactor- One script per-developer
- Placeholders for not-yet-supported archives
- MeruBasu
utoplanet.Apk
can extract files - Titanfall
respawn.Vpk
can list files (no extraction)
- Capturing compiler signatures
RespawnBsp
MRVN-Radiant signature- saved by
.save_as
- parser in
extensions.compiler_signature
- saved by
- Moved
valve_physics
tovalve.physics
- RespawnBsp
.save_as()
can now skip.bsp_lump
respawn.ExternalLumpManager
now handles.bsp_lump
saving- added
leaves_of_node
method to most branch scripts methods
of branch scripts are now stored indict
- Moved
branches.vector
toutils.vector
shared.Entities
the following silent failures are now caught by the parser- curly braces inside key values
- multi-line keys
shared.PakFile
can be edited.as_bytes()
correctly includes "end record", without calling.close()
- Genesis3D
- Id Tech 2
- Qbism
- Quake 64
- IW Engine
- Call of Duty 1 SP Demo: Burnville
- Call of Duty 1 SP Demo: Dawnville
- Source Engine
- Fairy Tale Busters (メルヘソバスターズ)
- Zeno Clash
- Titanfall Engine
- Apex Legends Season 13-18
- Apex Legends Season 18+
- Ubertools
- Star Trek Elite Force II SP Demo
- Quake
- Source Engine
- More dynamic reading of Static Props
- Split into more branches for Static Prop variants
- Titanfall Engine
- Split v50 into it's own branch
- Added support for Ritual Entertainment's Ubertools (Quake III Engine Branch)
- If
autoload
cannot find the specified.bsp
file a UserWarning is issued - Support for
ValveBsp
&RespawnBsp
Xbox360 formats (.360.bsp
)
- Moved physics SpecialLumpClasses to
branches/shared/physics.py
- Fixed up
GAME_LUMP.sprp
errors acrosssource
,left4dead
&source_2013
- Updated both
base.Struct
&base.MappedArray
- built in asserts to verify accurate definitions
- rebuilt
__init__
method, can now generate blank - added
_bitfields
attr, defines childbase.BitFields
- added
_classes
attr, overrides class of named attr - added
as_bytes
method - added
as_cpp
method - added
from_bytes
method - added
from_stream
method - added
from_tuple
method (replaces old__init__
behaviour)
- Added
base.BitField
for more reliable bitfield mapping- behaves similarly to
base.MappedArray
- behaves similarly to
- Completely refactored
branch_script
detection- only
file_magic
&bsp_version
matter (unless.d3dbsp
) load_bsp
now only accepts abranch_script
as it's optional argument
- only
- RespawnBsp
.ent
file headers moved toRespawnBsp.entity_headers
- RespawnBsp
.bsp_lump
moved tobsp.external
- Uses the
respawn.ExternalLumpManager
.bsp_lump
are only opened when accesed viabsp.external.LUMP_NAME
- Uses the
- "MegaTest" RAM usage significantly reduced
ArkaneBsp
has been rolled intoValveBsp
LumpHeader
now usebsp.branch.LumpHeader
instead ofcollections.namedtuple
- Support for
ValveBsp
&RespawnBsp
x360 (big-endian) formats - Caught some unexpected behaviour with
GAME_LUMP_CLASS
dict deepcopies
- Infinity Ward Engine
- Call of Duty 2
- Call of Duty 4: Modern Warfare
- Ion Storm IdTech
- Daikatana
- Respawn Engine
- Titanfall (Xbox360)
- Source Engine
- Half-Life 2 (Xbox)
- Infra
- Momentum Mod
- Orange Box (Xbox360)
- Portal 2 (Xbox360)
- Tactical Intervention
- Vampire the Masquerade: Bloodlines
- Ubertools
- Id Tech 3
- Quake III Arena
- Raven Software Titles
- Infinity Ward Engine
- Call of Duty
- Quake Engine
- Hexen II
- Source Engine
- Titanfall Engine
- Identified & thwarted Half-Life: Blue Shift obfuscation
- Fixed
.as_bytes()
method forshared.PhysicsCollide
- byte perfect recreation of input
- Re-implemented
PhysicsCollide
for Source & Titanfall Engines
- Half-Life: Blue Shift
- Source Engine
- Titanfall Engine
- Added
load_bsp
function to identify bsp type - Added
InfinityWardBsp
,IdTechBsp
,RespawnBsp
&ValveBsp
classes - Added general support for the PakFile lump
- Added general support for the GameLump lump
- Extension scripts
archive.py
extractor for CoD.iwd
/ Quake.pk3
diff.py
compare bsps for changelogs / studylightmaps.py
bsp lightmap ->.png
- Made a basic C++ 17 implementation in
src/
Bsp
lumps are loaded dynamically, reducing memory usage- New wrapper classes can be found in
bsp_tool/lumps.py
- New wrapper classes can be found in
mods/
changed tobranches/
- Added subfolders for developers
- Helpful lists for auto-detecting a .bsp's origin
- Renamed
team_fortress2
tovalve/orange_box
LumpClasses
now end up in 3 dictionaries per branch scriptBASIC_LUMP_CLASSES
for types likeshort int
LUMP_CLASSES
for standardLumpClasses
SPECIAL_LUMP_CLASSES
for irregular types (e.g. PakFile)GAME_LUMP_CLASSES
for GameLump SpecialLumpClasses
Bsp
s no longer print to console once loadedBase.Bsp
& subclasses have reserved ALL CAPS member names for lumps onlyBSP_VERSION, FILE_MAGIC, HEADERS, REVISION
->bsp_version, file_magic, headers, revision
- IdTech Engine
- Quake II
- Quake 3 Arena
- GoldSrc Engine
- Source Engine
- 2013 SDK
- Alien Swarm branch
- Counter-Strike: Global Offensive
- Half-Life 2
- Left 4 Dead branch
- GoldSrc Engine
- Half-Life: Blue Shift
- IdTech Engine
- Quake
- IW Engine
- Call of Duty
- Source Engine
- Dark Messiah of Might and Magic
- Vindictus
- Source Engine
- Orange Box
- Titanfall Engine
- Titanfall
- Titanfall 2
- Apex Legends