From bcfdd091441b169a704fe5bc4c32b028e86c4d14 Mon Sep 17 00:00:00 2001 From: snake-biscuits <36507175+snake-biscuits@users.noreply.github.com> Date: Sun, 28 Nov 2021 07:06:16 +1000 Subject: [PATCH] found out a bunch from testing Infra & Wolfenstein Enemy Territory --- CHANGELOG.md | 14 +- README.md | 5 + .../arkane/dark_messiah_multiplayer.py | 2 +- .../arkane/dark_messiah_singleplayer.py | 2 +- bsp_tool/branches/gearbox/blue_shift.py | 2 +- bsp_tool/branches/gearbox/nightfire.py | 2 +- bsp_tool/branches/id_software/quake.py | 2 +- bsp_tool/branches/id_software/quake2.py | 2 +- .../branches/infinity_ward/call_of_duty1.py | 2 +- .../branches/infinity_ward/call_of_duty2.py | 2 +- .../branches/infinity_ward/call_of_duty4.py | 2 +- bsp_tool/branches/ion_storm/daikatana.py | 2 +- bsp_tool/branches/nexon/cso2.py | 2 +- bsp_tool/branches/nexon/cso2_2018.py | 2 +- bsp_tool/branches/nexon/vindictus.py | 2 +- bsp_tool/branches/raven/hexen2.py | 2 +- bsp_tool/branches/raven/soldier_of_fortune.py | 2 +- .../branches/raven/soldier_of_fortune2.py | 2 +- bsp_tool/branches/respawn/titanfall.py | 2 +- .../branches/ritual/moh_allied_assault.py | 2 +- bsp_tool/branches/ritual/sin.py | 2 +- .../branches/ritual/star_trek_elite_force2.py | 2 +- bsp_tool/branches/troika/vampire.py | 2 +- bsp_tool/branches/valve/alien_swarm.py | 2 +- bsp_tool/branches/valve/goldsrc.py | 2 +- bsp_tool/branches/valve/left4dead.py | 2 +- bsp_tool/branches/valve/left4dead2.py | 6 +- bsp_tool/branches/valve/orange_box.py | 2 +- bsp_tool/branches/valve/sdk_2013.py | 89 ++++- bsp_tool/branches/valve/source.py | 2 +- pytest_all_bsps.log | 312 +++++++++--------- tests/maplist.py | 8 +- tests/test_d3d_bsp.py | 9 +- tests/test_idtech_bsp.py | 8 +- tests/test_valve_bsp.py | 10 +- 35 files changed, 309 insertions(+), 204 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54de8761..15cd743e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## v0.4.0 (???) +## v0.4.0 (??? 2022) ## New * Added support for Ritual Entertainment's Ubertools (Quake III Engine Branch) @@ -18,17 +18,25 @@ * `load_bsp` now only accepts a `branch_script` as it's optional argument ### Newly Supported + * Infinity Ward Engine + - IW 2.0 + - IW 3.0 + * Ion Storm IdTech + - Daikatana + * Raven IdTech * Source Engine - Tactical Intervention - Vampire the Masquerade: Bloodlines * Ubertools ### Updated Support - * Quake Engine - - Hexen 2 * Id Tech 3 - Quake III Arena - Raven Software Titles + * Infinity Ward Engine + - Call of Duty + * Quake Engine + - Hexen 2 * Source Engine * Titanfall Engine diff --git a/README.md b/README.md index b90c04b4..772bb394 100644 --- a/README.md +++ b/README.md @@ -142,9 +142,11 @@ Full documentation: [snake-biscuits.github.io/bsp_tool/](https://snake-biscuits. - [G-String](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/orange_box.py) - [Garry's Mod](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/orange_box.py) - [Halfquake Trilogy](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/goldsrc.py) + - [INFRA](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/sdk_2013.py) - Kingpin: Life of Crime :o: - [Medal of Honor: Allied Assault](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/ritual/moh_allied_assault.py) - [NEOTOKYO](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/orange_box.py) + - [Return to Castle Wolfenstein](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/id_software/quake3.py) - [Sven Co-op](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/goldsrc.py) - [Synergy](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/source.py) - [Tactical Intervention](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/orange_box.py) @@ -152,6 +154,7 @@ Full documentation: [snake-biscuits.github.io/bsp_tool/](https://snake-biscuits. - [The Beginner's Guide](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/sdk_2013.py) :o: - [The Stanley Parable](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/sdk_2013.py) :o: - [Vampire: The Masquerade - Bloodlines](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/valve/source.py) + - [Wolfenstein: Enemy Territory](https://github.com/snake-biscuits/bsp_tool/tree/master/bsp_tool/branches/id_software/quake3.py) ## Thanks @@ -163,6 +166,8 @@ Full documentation: [snake-biscuits.github.io/bsp_tool/](https://snake-biscuits. - Preserving **extensive** documentation, mods & source code for Quake 3 & Ubertools games * [Ficool2](https://github.com/ficool2) - Providing lots of current and detailed info on Source & helping track down some rarer titles + * [GCFScape](https://nemstools.github.io/pages/GCFScape-Download.html) + - Super handy `.vpk` (Valve format) browser; VTFLib / VTFEdit is also from Nem's Tools * [Maxime Dupuis](https://github.com/maxdup) - Helping me identify multiple lumps in Source Engine .bsps * [MobyGames](https://www.mobygames.com/) diff --git a/bsp_tool/branches/arkane/dark_messiah_multiplayer.py b/bsp_tool/branches/arkane/dark_messiah_multiplayer.py index 74d83b77..509d2e51 100644 --- a/bsp_tool/branches/arkane/dark_messiah_multiplayer.py +++ b/bsp_tool/branches/arkane/dark_messiah_multiplayer.py @@ -12,7 +12,7 @@ GAME_PATHS = ["Dark Messiah of Might and Magic Multi-Player"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} LUMP = orange_box.LUMP diff --git a/bsp_tool/branches/arkane/dark_messiah_singleplayer.py b/bsp_tool/branches/arkane/dark_messiah_singleplayer.py index ec4fb09d..c31a4a91 100644 --- a/bsp_tool/branches/arkane/dark_messiah_singleplayer.py +++ b/bsp_tool/branches/arkane/dark_messiah_singleplayer.py @@ -14,7 +14,7 @@ GAME_PATHS = ["Dark Messiah of Might and Magic Single Player"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} LUMP = orange_box.LUMP diff --git a/bsp_tool/branches/gearbox/blue_shift.py b/bsp_tool/branches/gearbox/blue_shift.py index 4a81773a..613c0419 100644 --- a/bsp_tool/branches/gearbox/blue_shift.py +++ b/bsp_tool/branches/gearbox/blue_shift.py @@ -10,7 +10,7 @@ GAME_PATHS = ["Half-Life/blue_shift"] # Half-Life: Blue Shift -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/gearbox/nightfire.py b/bsp_tool/branches/gearbox/nightfire.py index b1afdfd2..e90a04fb 100644 --- a/bsp_tool/branches/gearbox/nightfire.py +++ b/bsp_tool/branches/gearbox/nightfire.py @@ -13,7 +13,7 @@ GAME_PATHS = ["James Bond 007: Nightfire"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/id_software/quake.py b/bsp_tool/branches/id_software/quake.py index 68fe2667..39bfa7bd 100644 --- a/bsp_tool/branches/id_software/quake.py +++ b/bsp_tool/branches/id_software/quake.py @@ -14,7 +14,7 @@ GAME_PATHS = ["Quake", "Team Fortress Quake"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} # lump names & indices: diff --git a/bsp_tool/branches/id_software/quake2.py b/bsp_tool/branches/id_software/quake2.py index 9bcbf0fb..35b558b8 100644 --- a/bsp_tool/branches/id_software/quake2.py +++ b/bsp_tool/branches/id_software/quake2.py @@ -14,7 +14,7 @@ GAME_PATHS = ["Anachronox", "Quake II", "Heretic II"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/infinity_ward/call_of_duty1.py b/bsp_tool/branches/infinity_ward/call_of_duty1.py index 0cc58cdb..efe7e969 100644 --- a/bsp_tool/branches/infinity_ward/call_of_duty1.py +++ b/bsp_tool/branches/infinity_ward/call_of_duty1.py @@ -14,7 +14,7 @@ GAME_PATHS = ["Call of Duty", "Call of Duty: United Offensive"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/infinity_ward/call_of_duty2.py b/bsp_tool/branches/infinity_ward/call_of_duty2.py index e60e20a8..f68f5a1c 100644 --- a/bsp_tool/branches/infinity_ward/call_of_duty2.py +++ b/bsp_tool/branches/infinity_ward/call_of_duty2.py @@ -16,7 +16,7 @@ GAME_PATHS = ["Call of Duty 2"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/infinity_ward/call_of_duty4.py b/bsp_tool/branches/infinity_ward/call_of_duty4.py index cbe8c7ad..06ed8f37 100644 --- a/bsp_tool/branches/infinity_ward/call_of_duty4.py +++ b/bsp_tool/branches/infinity_ward/call_of_duty4.py @@ -13,7 +13,7 @@ GAME_PATHS = ["Call of Duty 4: Modern Warfare"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} # NOTE: lumps are given ids and headers reference these ids in order diff --git a/bsp_tool/branches/ion_storm/daikatana.py b/bsp_tool/branches/ion_storm/daikatana.py index 77d54ed3..e42178f8 100644 --- a/bsp_tool/branches/ion_storm/daikatana.py +++ b/bsp_tool/branches/ion_storm/daikatana.py @@ -8,7 +8,7 @@ GAME_PATHS = ["Daikatana"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} LUMP = quake2.LUMP # NOTE: ASSUMED diff --git a/bsp_tool/branches/nexon/cso2.py b/bsp_tool/branches/nexon/cso2.py index 94c10f83..5824a8e1 100644 --- a/bsp_tool/branches/nexon/cso2.py +++ b/bsp_tool/branches/nexon/cso2.py @@ -15,7 +15,7 @@ GAME_PATHS = ["Counter-Strike: Online 2"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/nexon/cso2_2018.py b/bsp_tool/branches/nexon/cso2_2018.py index 34a1797b..231c6ec8 100644 --- a/bsp_tool/branches/nexon/cso2_2018.py +++ b/bsp_tool/branches/nexon/cso2_2018.py @@ -10,7 +10,7 @@ GAME_PATHS = ["Counter-Strike: Online 2"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} LUMP = cso2.LUMP diff --git a/bsp_tool/branches/nexon/vindictus.py b/bsp_tool/branches/nexon/vindictus.py index 98edbe7a..a87a987b 100644 --- a/bsp_tool/branches/nexon/vindictus.py +++ b/bsp_tool/branches/nexon/vindictus.py @@ -18,7 +18,7 @@ GAME_PATHS = ["Vindictus"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/raven/hexen2.py b/bsp_tool/branches/raven/hexen2.py index c98e755d..87d47343 100644 --- a/bsp_tool/branches/raven/hexen2.py +++ b/bsp_tool/branches/raven/hexen2.py @@ -7,7 +7,7 @@ GAME_PATHS = ["Hexen 2"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} LUMP = quake.LUMP diff --git a/bsp_tool/branches/raven/soldier_of_fortune.py b/bsp_tool/branches/raven/soldier_of_fortune.py index 21e5ce03..9d04e7da 100644 --- a/bsp_tool/branches/raven/soldier_of_fortune.py +++ b/bsp_tool/branches/raven/soldier_of_fortune.py @@ -7,7 +7,7 @@ GAME_PATHS = ["Soldier of Fortune"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} LUMP = quake2.LUMP diff --git a/bsp_tool/branches/raven/soldier_of_fortune2.py b/bsp_tool/branches/raven/soldier_of_fortune2.py index f26a79b5..e6a3953e 100644 --- a/bsp_tool/branches/raven/soldier_of_fortune2.py +++ b/bsp_tool/branches/raven/soldier_of_fortune2.py @@ -14,7 +14,7 @@ "Star Wars Jedi Knight - Jedi Academy", "Star Wars Jedi Knight II - Jedi Outcast"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/respawn/titanfall.py b/bsp_tool/branches/respawn/titanfall.py index 99b1aeb4..0f2c60cf 100644 --- a/bsp_tool/branches/respawn/titanfall.py +++ b/bsp_tool/branches/respawn/titanfall.py @@ -82,7 +82,7 @@ class LUMP(enum.Enum): UNUSED_59 = 0x003B UNUSED_60 = 0x003C UNUSED_61 = 0x003D - PHYSICS_LEVEL = 0x003E + PHYSICS_LEVEL = 0x003E # from L4D2 / INFRA ? UNUSED_63 = 0x003F UNUSED_64 = 0x0040 UNUSED_65 = 0x0041 diff --git a/bsp_tool/branches/ritual/moh_allied_assault.py b/bsp_tool/branches/ritual/moh_allied_assault.py index 5709945b..87db31f9 100644 --- a/bsp_tool/branches/ritual/moh_allied_assault.py +++ b/bsp_tool/branches/ritual/moh_allied_assault.py @@ -16,7 +16,7 @@ "Medal of Honor: Allied Assault - Breakthrough", "Medal of Honor: Allied Assault - Spearhead"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/ritual/sin.py b/bsp_tool/branches/ritual/sin.py index 3decdb5b..5e34f812 100644 --- a/bsp_tool/branches/ritual/sin.py +++ b/bsp_tool/branches/ritual/sin.py @@ -10,7 +10,7 @@ GAME_PATHS = ["SiN", "SiN Gold"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} LUMP = quake2.LUMP diff --git a/bsp_tool/branches/ritual/star_trek_elite_force2.py b/bsp_tool/branches/ritual/star_trek_elite_force2.py index 5ef531cb..53e4d66d 100644 --- a/bsp_tool/branches/ritual/star_trek_elite_force2.py +++ b/bsp_tool/branches/ritual/star_trek_elite_force2.py @@ -15,7 +15,7 @@ GAME_PATHS = ["Star Trek: Elite Force II"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/troika/vampire.py b/bsp_tool/branches/troika/vampire.py index eaef8460..884734f5 100644 --- a/bsp_tool/branches/troika/vampire.py +++ b/bsp_tool/branches/troika/vampire.py @@ -11,7 +11,7 @@ GAME_PATHS = ["Vampire The Masquerade - Bloodlines"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} LUMP = source.LUMP diff --git a/bsp_tool/branches/valve/alien_swarm.py b/bsp_tool/branches/valve/alien_swarm.py index de021b08..a867254b 100644 --- a/bsp_tool/branches/valve/alien_swarm.py +++ b/bsp_tool/branches/valve/alien_swarm.py @@ -12,7 +12,7 @@ GAME_PATHS = ["Alien Swarm", "Alien Swarm Reactive Drop"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/valve/goldsrc.py b/bsp_tool/branches/valve/goldsrc.py index 9560e568..6a7444c5 100644 --- a/bsp_tool/branches/valve/goldsrc.py +++ b/bsp_tool/branches/valve/goldsrc.py @@ -24,7 +24,7 @@ "valve"]], # Half-Life "Halfquake Trilogy", "Sven Co-op"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/valve/left4dead.py b/bsp_tool/branches/valve/left4dead.py index 6f162316..8bef5b83 100644 --- a/bsp_tool/branches/valve/left4dead.py +++ b/bsp_tool/branches/valve/left4dead.py @@ -13,7 +13,7 @@ GAME_PATHS = ["Left 4 Dead"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/valve/left4dead2.py b/bsp_tool/branches/valve/left4dead2.py index 11b2c570..34d8e3dd 100644 --- a/bsp_tool/branches/valve/left4dead2.py +++ b/bsp_tool/branches/valve/left4dead2.py @@ -14,7 +14,7 @@ GAME_PATHS = ["Left 4 Dead 2"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): @@ -80,7 +80,7 @@ class LUMP(enum.Enum): MAP_FLAGS = 59 OVERLAY_FADES = 60 LUMP_OVERLAY_SYSTEM_LEVELS = 61 # overlay CPU & GPU limits - LUMP_PHYSLEVEL = 62 + LUMP_PHYSICS_LEVEL = 62 UNUSED_63 = 63 @@ -94,7 +94,7 @@ class LUMP(enum.Enum): # UNUSED_24 -> PROP_HULL_VERTS # UNUSED_25 -> PROP_HULL_TRIS # PHYSICS_COLLIDE_SURFACE -> PROP_BLOB -# UNUSED_62 -> LUMP_PHYSLEVEL +# UNUSED_62 -> LUMP_PHYSICS_LEVEL Left4Dead2LumpHeader = collections.namedtuple("Left4DeadLumpHeader", ["version", "offset", "length", "fourCC"]) diff --git a/bsp_tool/branches/valve/orange_box.py b/bsp_tool/branches/valve/orange_box.py index 1c4a70d4..e906f12d 100644 --- a/bsp_tool/branches/valve/orange_box.py +++ b/bsp_tool/branches/valve/orange_box.py @@ -21,7 +21,7 @@ "Portal", "Team Fortress 2"] -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/bsp_tool/branches/valve/sdk_2013.py b/bsp_tool/branches/valve/sdk_2013.py index def9ebdb..e1658ed3 100644 --- a/bsp_tool/branches/valve/sdk_2013.py +++ b/bsp_tool/branches/valve/sdk_2013.py @@ -2,6 +2,9 @@ import enum import struct +# from . import alien_swarm +# from . import left4dead +# from . import left4dead2 from . import orange_box from . import source @@ -10,13 +13,85 @@ BSP_VERSION = 21 -GAME_PATHS = ["Blade Symphony", "Counter-Strike: Global Offensive", "Portal 2", - "Source Filmmaker"] - -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} - - -LUMP = orange_box.LUMP +GAME_PATHS = ["Blade Symphony/berimbau", + "Counter-Strike Global Offensive/csgo", + "infra/infra", + "Portal 2/portal2", + "Source Filmmaker/game/tf"] +# also sourcemods / mapbase + +GAME_VERSIONS = {"infra/infra": 22, + **{GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS if GAME_PATH != "infra/infra"}} + + +# Counter-Strike Global Offensive/bin/bsppack.dll +class LUMP(enum.Enum): + ENTITIES = 0 + PLANES = 1 + TEXTURE_DATA = 2 + VERTICES = 3 + VISIBILITY = 4 + NODES = 5 + TEXTURE_INFO = 6 + FACES = 7 + LIGHTING = 8 + OCCLUSION = 9 + LEAVES = 10 + FACE_IDS = 11 + EDGES = 12 + SURFEDGES = 13 + MODELS = 14 + WORLD_LIGHTS = 15 + LEAF_FACES = 16 + LEAF_BRUSHES = 17 + BRUSHES = 18 + BRUSH_SIDES = 19 + AREAS = 20 + AREA_PORTALS = 21 + FACE_BRUSHES = 22 # infra + FACE_BRUSH_LIST = 23 # infra + UNUSED_24 = 24 + UNUSED_25 = 25 + DISPLACEMENT_INFO = 26 + ORIGINAL_FACES = 27 + PHYSICS_DISPLACEMENT = 28 + PHYSICS_COLLIDE = 29 + VERTEX_NORMALS = 30 + VERTEX_NORMAL_INDICES = 31 + DISPLACEMENT_LIGHTMAP_ALPHAS = 32 # deprecated / X360 ? + DISPLACEMENT_VERTICES = 33 + DISPLACEMENT_LIGHTMAP_SAMPLE_POSITIONS = 34 + GAME_LUMP = 35 + LEAF_WATER_DATA = 36 + PRIMITIVES = 37 + PRIMITIVE_VERTICES = 38 # deprecated / X360 ? + PRIMITIVE_INDICES = 39 + PAKFILE = 40 + CLIP_PORTAL_VERTICES = 41 + CUBEMAPS = 42 + TEXTURE_DATA_STRING_DATA = 43 + TEXTURE_DATA_STRING_TABLE = 44 + OVERLAYS = 45 + LEAF_MIN_DIST_TO_WATER = 46 + FACE_MACRO_TEXTURE_INFO = 47 + DISPLACEMENT_TRIS = 48 + PROP_BLOB = 49 # left4dead + WATER_OVERLAYS = 50 # deprecated / X360 ? + LEAF_AMBIENT_INDEX_HDR = 51 + LEAF_AMBIENT_INDEX = 52 + LIGHTING_HDR = 53 + WORLD_LIGHTS_HDR = 54 + LEAF_AMBIENT_LIGHTING_HDR = 55 + LEAF_AMBIENT_LIGHTING = 56 + XZIP_PAKFILE = 57 # deprecated / X360 ? + FACES_HDR = 58 + MAP_FLAGS = 59 + OVERLAY_FADES = 60 + OVERLAY_SYSTEM_LEVELS = 61 # left4dead + PHYSICS_LEVEL = 62 # left4dead2 + DISPLACEMENT_MULTIBLEND = 63 # alienswarm + +# TODO: Known lump changes from Orange Box -> Source SDK 2013: # struct SourceBspHeader { char file_magic[4]; int version; SourceLumpHeader headers[64]; int revision; }; diff --git a/bsp_tool/branches/valve/source.py b/bsp_tool/branches/valve/source.py index 437fbf4e..9fcefd2a 100644 --- a/bsp_tool/branches/valve/source.py +++ b/bsp_tool/branches/valve/source.py @@ -20,7 +20,7 @@ "Half-Life 2/hl2", # Half-Life 2 "Half-Life 2/episodic"] # Half-Life 2: Episode 1 -GAME_VERSIONS = {GAME: BSP_VERSION for GAME in GAME_PATHS} +GAME_VERSIONS = {GAME_PATH: BSP_VERSION for GAME_PATH in GAME_PATHS} class LUMP(enum.Enum): diff --git a/pytest_all_bsps.log b/pytest_all_bsps.log index d1f29a15..a30ff240 100644 --- a/pytest_all_bsps.log +++ b/pytest_all_bsps.log @@ -3,148 +3,160 @@ platform win32 -- Python 3.9.9, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 -- c:\use cachedir: .pytest_cache rootdir: C:\Users\Jared\Documents\GitHub\bsp_tool plugins: cov-2.12.1 -collecting ... collected 143 items +collecting ... collected 155 items tests/test_bsp.py::test_load_bsp[./-tests/maps-map_dirs0] PASSED [ 0%] tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-gesource-map_dirs1] PASSED [ 1%] -tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-half-life 2 riot act-map_dirs2] PASSED [ 2%] +tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-half-life 2 riot act-map_dirs2] PASSED [ 1%] tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-TFTS-map_dirs3] PASSED [ 2%] tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-episodeone-map_dirs4] PASSED [ 3%] -tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-RunThinkShootLiveVille2-map_dirs5] PASSED [ 4%] +tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-RunThinkShootLiveVille2-map_dirs5] PASSED [ 3%] tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-cromulentville2-map_dirs6] PASSED [ 4%] tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-companionpiece2-map_dirs7] PASSED [ 5%] -tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-eyecandy-map_dirs8] PASSED [ 6%] +tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-eyecandy-map_dirs8] PASSED [ 5%] tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-tworooms-map_dirs9] PASSED [ 6%] tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-fusionville2-map_dirs10] PASSED [ 7%] -tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-tunetwo-map_dirs11] FAILED [ 8%] -tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-lvl2-map_dirs12] PASSED [ 9%] +tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-tunetwo-map_dirs11] FAILED [ 7%] +tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-lvl2-map_dirs12] PASSED [ 8%] tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-thewrapuptwo-map_dirs13] PASSED [ 9%] -tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-halloweenhorror4-map_dirs14] PASSED [ 10%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Cry of Fear-map_dirs15] PASSED [ 11%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/cstrike-map_dirs16] PASSED [ 11%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/czero-map_dirs17] PASSED [ 12%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/czeror-map_dirs18] PASSED [ 13%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/dmc-map_dirs19] PASSED [ 13%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/dod-map_dirs20] PASSED [ 14%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/gearbox-map_dirs21] PASSED [ 15%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/ricochet-map_dirs22] PASSED [ 16%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/tfc-map_dirs23] PASSED [ 16%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/valve-map_dirs24] PASSED [ 17%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Halfquake Trilogy-map_dirs25] PASSED [ 18%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Sven Co-op-map_dirs26] PASSED [ 18%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Alien Swarm-map_dirs27] PASSED [ 19%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Alien Swarm Reactive Drop-map_dirs28] PASSED [ 20%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Blade Symphony-map_dirs29] PASSED [ 20%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Counter-Strike Global Offensive-map_dirs30] PASSED [ 21%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-counter-strike source-map_dirs31] PASSED [ 22%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-day of defeat source-map_dirs32] PASSED [ 23%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Fortress Forever-map_dirs33] PASSED [ 23%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-G String-map_dirs34] PASSED [ 24%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-GarrysMod-map_dirs35] PASSED [ 25%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 1 Source Deathmatch-map_dirs36] PASSED [ 25%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/ep2-map_dirs37] PASSED [ 26%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/episodic-map_dirs38] PASSED [ 27%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/hl1-map_dirs39] PASSED [ 27%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/hl2-map_dirs40] PASSED [ 28%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/lostcoast-map_dirs41] PASSED [ 29%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2 deathmatch-map_dirs42] PASSED [ 30%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 2 Update-map_dirs43] PASSED [ 30%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-left 4 dead-map_dirs44] PASSED [ 31%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Left 4 Dead 2-map_dirs45] PASSED [ 32%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-MINERVA-map_dirs46] PASSED [ 32%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-NEOTOKYO-map_dirs47] PASSED [ 33%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal-map_dirs48] PASSED [ 34%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal 2-map_dirs49] PASSED [ 34%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal Reloaded-map_dirs50] PASSED [ 35%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-SourceFilmmaker-map_dirs51] PASSED [ 36%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Synergy-map_dirs52] PASSED [ 37%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Team Fortress 2-map_dirs53] FAILED [ 37%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Transmissions Element 120-map_dirs54] PASSED [ 38%] -tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Vampire The Masquerade - Bloodlines-map_dirs55] PASSED [ 39%] -tests/test_bsp.py::test_load_bsp[E:/Mod-Anachronox-map_dirs56] PASSED [ 39%] -tests/test_bsp.py::test_load_bsp[E:/Mod-Daikatana-map_dirs57] PASSED [ 40%] -tests/test_bsp.py::test_load_bsp[E:/Mod-HereticII-map_dirs58] PASSED [ 41%] -tests/test_bsp.py::test_load_bsp[E:/Mod-Hexen2-map_dirs59] PASSED [ 41%] -tests/test_bsp.py::test_load_bsp[E:/Mod-RTCW-map_dirs60] PASSED [ 42%] -tests/test_bsp.py::test_load_bsp[E:/Mod-SiN-map_dirs61] PASSED [ 43%] -tests/test_bsp.py::test_load_bsp[E:/Mod-SoF-map_dirs62] PASSED [ 44%] -tests/test_bsp.py::test_load_bsp[E:/Mod-SoF2-map_dirs63] PASSED [ 44%] -tests/test_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForce-map_dirs64] PASSED [ 45%] -tests/test_bsp.py::test_load_bsp[E:/Mod-Quake-map_dirs65] PASSED [ 46%] -tests/test_bsp.py::test_load_bsp[E:/Mod-QuakeII-map_dirs66] PASSED [ 46%] -tests/test_bsp.py::test_load_bsp[E:/Mod-QuakeIII-map_dirs67] PASSED [ 47%] -tests/test_bsp.py::test_load_bsp[E:/Mod-QuakeLive-map_dirs68] PASSED [ 48%] -tests/test_bsp.py::test_load_bsp[E:/Mod-CoD1-map_dirs69] PASSED [ 48%] -tests/test_bsp.py::test_load_bsp[E:/Mod-CoD2-map_dirs70] PASSED [ 49%] -tests/test_bsp.py::test_load_bsp[E:/Mod-CoD4-map_dirs71] PASSED [ 50%] -tests/test_bsp.py::test_load_bsp[E:/Mod-BlackMesa-map_dirs72] PASSED [ 51%] -tests/test_bsp.py::test_load_bsp[E:/Mod-CSMalvinas-map_dirs73] PASSED [ 51%] -tests/test_bsp.py::test_load_bsp[E:/Mod-CSO2-map_dirs74] FAILED [ 52%] -tests/test_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs75] FAILED [ 53%] -tests/test_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs76] FAILED [ 53%] -tests/test_bsp.py::test_load_bsp[E:/Mod-Nightfire-map_dirs77] PASSED [ 54%] -tests/test_bsp.py::test_load_bsp[E:/Mod-TacticalIntervention-map_dirs78] PASSED [ 55%] -tests/test_bsp.py::test_load_bsp[E:/Mod-TeamFortressQuake-map_dirs79] PASSED [ 55%] -tests/test_bsp.py::test_load_bsp[E:/Mod-Vindictus-map_dirs80] FAILED [ 56%] -tests/test_bsp.py::test_load_bsp[E:/Mod-Titanfall-map_dirs81] PASSED [ 57%] -tests/test_bsp.py::test_load_bsp[E:/Mod-TitanfallOnline-map_dirs82] PASSED [ 58%] -tests/test_bsp.py::test_load_bsp[E:/Mod-Titanfall2-map_dirs83] PASSED [ 58%] -tests/test_bsp.py::test_load_bsp[E:/Mod-ApexLegends-map_dirs84] PASSED [ 59%] -tests/test_bsp.py::test_load_bsp[E:/Mod-FAKK2-map_dirs85] PASSED [ 60%] -tests/test_bsp.py::test_load_bsp[E:/Mod-Alice-map_dirs86] PASSED [ 60%] -tests/test_bsp.py::test_load_bsp[E:/Mod-MoHAA-map_dirs87] PASSED [ 61%] -tests/test_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForceII-map_dirs88] PASSED [ 62%] -tests/test_bsp.py::test_load_bsp[E:/Mod-StarWarsJediKnight-map_dirs89] PASSED [ 62%] -tests/test_bsp.py::test_load_bsp[E:/Mod-StarWarsJediKnightII-map_dirs90] PASSED [ 63%] -tests/test_bsplump.py::TestRawBspLump::test_its_raw PASSED [ 64%] -tests/test_bsplump.py::TestRawBspLump::test_list_conversion PASSED [ 65%] -tests/test_bsplump.py::TestRawBspLump::test_indexing PASSED [ 65%] -tests/test_bsplump.py::TestBspLump::test_list_conversion PASSED [ 66%] -tests/test_bsplump.py::TestBspLump::test_indexing PASSED [ 67%] -tests/test_bsplump.py::TestBspLump::test_del PASSED [ 67%] -tests/test_bsplump.py::TestBspLump::test_setitem FAILED [ 68%] -tests/test_bsplump.py::TestBasicBspLump::test_its_basic PASSED [ 69%] -tests/test_bsplump.py::TestBasicBspLump::test_list_conversion PASSED [ 69%] -tests/test_bsplump.py::TestBasicBspLump::test_indexing PASSED [ 70%] -tests/test_d3d_bsp.py::test_no_errors[d3dbsp0] SKIPPED (got empty pa...) [ 71%] -tests/test_d3d_bsp.py::test_entites_loaded[d3dbsp0] SKIPPED (got emp...) [ 72%] -tests/test_idtech_bsp.py::test_no_errors[bsp0] SKIPPED (got empty pa...) [ 72%] -tests/test_idtech_bsp.py::test_entities_loaded[bsp0] SKIPPED (got em...) [ 73%] -tests/test_idtech_bsp.py::test_face_struct[bsp0] SKIPPED (got empty ...) [ 74%] -tests/test_valve_bsp.py::test_no_errors[bsp0] SKIPPED (got empty par...) [ 74%] -tests/test_valve_bsp.py::test_entities_loaded[bsp0] SKIPPED (got emp...) [ 75%] -tests/branches/test_base.py::TestStruct::test_unpack PASSED [ 76%] -tests/branches/test_base.py::TestStruct::test_pack PASSED [ 76%] -tests/branches/test_base.py::TestMappedArray::test_init PASSED [ 77%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.id_software.quake] PASSED [ 78%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.id_software.quake2] PASSED [ 79%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.id_software.quake3] PASSED [ 79%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty1] PASSED [ 80%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty2] PASSED [ 81%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty4] PASSED [ 81%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ion_storm.daikatana] PASSED [ 82%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.gearbox.blue_shift] PASSED [ 83%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.gearbox.nightfire] PASSED [ 83%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.raven.hexen2] PASSED [ 84%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.raven.soldier_of_fortune] PASSED [ 85%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.raven.soldier_of_fortune2] PASSED [ 86%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ritual.fakk2] PASSED [ 86%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ritual.moh_allied_assault] PASSED [ 87%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ritual.sin] PASSED [ 88%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ritual.star_trek_elite_force2] PASSED [ 88%] -tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.valve.goldsrc] PASSED [ 89%] +tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-halloweenhorror4-map_dirs14] PASSED [ 9%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Cry of Fear-map_dirs15] PASSED [ 10%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/cstrike-map_dirs16] PASSED [ 10%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/czero-map_dirs17] PASSED [ 11%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/czeror-map_dirs18] PASSED [ 12%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/dmc-map_dirs19] PASSED [ 12%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/dod-map_dirs20] PASSED [ 13%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/gearbox-map_dirs21] PASSED [ 14%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/ricochet-map_dirs22] PASSED [ 14%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/tfc-map_dirs23] PASSED [ 15%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/valve-map_dirs24] PASSED [ 16%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Halfquake Trilogy-map_dirs25] PASSED [ 16%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Sven Co-op-map_dirs26] PASSED [ 17%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Alien Swarm-map_dirs27] PASSED [ 18%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Alien Swarm Reactive Drop-map_dirs28] PASSED [ 18%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Blade Symphony-map_dirs29] PASSED [ 19%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Counter-Strike Global Offensive-map_dirs30] PASSED [ 20%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-counter-strike source-map_dirs31] PASSED [ 20%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-day of defeat source-map_dirs32] PASSED [ 21%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Fortress Forever-map_dirs33] PASSED [ 21%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-G String-map_dirs34] PASSED [ 22%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-GarrysMod-map_dirs35] PASSED [ 23%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 1 Source Deathmatch-map_dirs36] PASSED [ 23%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/ep2-map_dirs37] PASSED [ 24%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/episodic-map_dirs38] PASSED [ 25%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/hl1-map_dirs39] PASSED [ 25%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/hl2-map_dirs40] PASSED [ 26%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/lostcoast-map_dirs41] PASSED [ 27%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2 deathmatch-map_dirs42] PASSED [ 27%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 2 Update-map_dirs43] PASSED [ 28%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-left 4 dead-map_dirs44] PASSED [ 29%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Left 4 Dead 2-map_dirs45] PASSED [ 29%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-MINERVA-map_dirs46] PASSED [ 30%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-NEOTOKYO-map_dirs47] PASSED [ 30%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal-map_dirs48] PASSED [ 31%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal 2-map_dirs49] PASSED [ 32%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal Reloaded-map_dirs50] PASSED [ 32%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-SourceFilmmaker-map_dirs51] PASSED [ 33%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Synergy-map_dirs52] PASSED [ 34%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Team Fortress 2-map_dirs53] FAILED [ 34%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Transmissions Element 120-map_dirs54] PASSED [ 35%] +tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Vampire The Masquerade - Bloodlines-map_dirs55] PASSED [ 36%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Anachronox-map_dirs56] PASSED [ 36%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Daikatana-map_dirs57] PASSED [ 37%] +tests/test_bsp.py::test_load_bsp[E:/Mod-HereticII-map_dirs58] PASSED [ 38%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Hexen2-map_dirs59] PASSED [ 38%] +tests/test_bsp.py::test_load_bsp[E:/Mod-RTCW-map_dirs60] PASSED [ 39%] +tests/test_bsp.py::test_load_bsp[E:/Mod-SiN-map_dirs61] PASSED [ 40%] +tests/test_bsp.py::test_load_bsp[E:/Mod-SoF-map_dirs62] PASSED [ 40%] +tests/test_bsp.py::test_load_bsp[E:/Mod-SoF2-map_dirs63] PASSED [ 41%] +tests/test_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForce-map_dirs64] PASSED [ 41%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Quake-map_dirs65] PASSED [ 42%] +tests/test_bsp.py::test_load_bsp[E:/Mod-QuakeII-map_dirs66] PASSED [ 43%] +tests/test_bsp.py::test_load_bsp[E:/Mod-QuakeIII-map_dirs67] PASSED [ 43%] +tests/test_bsp.py::test_load_bsp[E:/Mod-QuakeLive-map_dirs68] PASSED [ 44%] +tests/test_bsp.py::test_load_bsp[E:/Mod-WolfET-map_dirs69] PASSED [ 45%] +tests/test_bsp.py::test_load_bsp[E:/Mod-CoD1-map_dirs70] PASSED [ 45%] +tests/test_bsp.py::test_load_bsp[E:/Mod-CoD2-map_dirs71] PASSED [ 46%] +tests/test_bsp.py::test_load_bsp[E:/Mod-CoD4-map_dirs72] PASSED [ 47%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Nightfire-map_dirs73] PASSED [ 47%] +tests/test_bsp.py::test_load_bsp[E:/Mod-BlackMesa-map_dirs74] PASSED [ 48%] +tests/test_bsp.py::test_load_bsp[E:/Mod-CSMalvinas-map_dirs75] PASSED [ 49%] +tests/test_bsp.py::test_load_bsp[E:/Mod-CSO2-map_dirs76] FAILED [ 49%] +tests/test_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs77] FAILED [ 50%] +tests/test_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs78] FAILED [ 50%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Infra-map_dirs79] PASSED [ 51%] +tests/test_bsp.py::test_load_bsp[E:/Mod-TacticalIntervention-map_dirs80] PASSED [ 52%] +tests/test_bsp.py::test_load_bsp[E:/Mod-TeamFortressQuake-map_dirs81] PASSED [ 52%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Vindictus-map_dirs82] FAILED [ 53%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Titanfall-map_dirs83] PASSED [ 54%] +tests/test_bsp.py::test_load_bsp[E:/Mod-TitanfallOnline-map_dirs84] PASSED [ 54%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Titanfall2-map_dirs85] PASSED [ 55%] +tests/test_bsp.py::test_load_bsp[E:/Mod-ApexLegends-map_dirs86] PASSED [ 56%] +tests/test_bsp.py::test_load_bsp[E:/Mod-FAKK2-map_dirs87] PASSED [ 56%] +tests/test_bsp.py::test_load_bsp[E:/Mod-Alice-map_dirs88] PASSED [ 57%] +tests/test_bsp.py::test_load_bsp[E:/Mod-MoHAA-map_dirs89] PASSED [ 58%] +tests/test_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForceII-map_dirs90] PASSED [ 58%] +tests/test_bsp.py::test_load_bsp[E:/Mod-StarWarsJediKnight-map_dirs91] PASSED [ 59%] +tests/test_bsp.py::test_load_bsp[E:/Mod-StarWarsJediKnightII-map_dirs92] PASSED [ 60%] +tests/test_bsplump.py::TestRawBspLump::test_its_raw PASSED [ 60%] +tests/test_bsplump.py::TestRawBspLump::test_list_conversion PASSED [ 61%] +tests/test_bsplump.py::TestRawBspLump::test_indexing PASSED [ 61%] +tests/test_bsplump.py::TestBspLump::test_list_conversion PASSED [ 62%] +tests/test_bsplump.py::TestBspLump::test_indexing PASSED [ 63%] +tests/test_bsplump.py::TestBspLump::test_del PASSED [ 63%] +tests/test_bsplump.py::TestBspLump::test_setitem FAILED [ 64%] +tests/test_bsplump.py::TestBasicBspLump::test_its_basic PASSED [ 65%] +tests/test_bsplump.py::TestBasicBspLump::test_list_conversion PASSED [ 65%] +tests/test_bsplump.py::TestBasicBspLump::test_indexing PASSED [ 66%] +tests/test_d3d_bsp.py::test_no_errors[d3dbsp0] PASSED [ 67%] +tests/test_d3d_bsp.py::test_no_errors[d3dbsp1] PASSED [ 67%] +tests/test_d3d_bsp.py::test_no_errors[d3dbsp2] PASSED [ 68%] +tests/test_d3d_bsp.py::test_no_errors[d3dbsp3] PASSED [ 69%] +tests/test_d3d_bsp.py::test_entites_loaded[d3dbsp0] PASSED [ 69%] +tests/test_d3d_bsp.py::test_entites_loaded[d3dbsp1] PASSED [ 70%] +tests/test_d3d_bsp.py::test_entites_loaded[d3dbsp2] PASSED [ 70%] +tests/test_d3d_bsp.py::test_entites_loaded[d3dbsp3] PASSED [ 71%] +tests/test_idtech_bsp.py::test_no_errors[bsp0] PASSED [ 72%] +tests/test_idtech_bsp.py::test_entities_loaded[bsp0] PASSED [ 72%] +tests/test_idtech_bsp.py::test_face_struct[bsp0] PASSED [ 73%] +tests/test_valve_bsp.py::test_no_errors[bsp0] PASSED [ 74%] +tests/test_valve_bsp.py::test_no_errors[bsp1] PASSED [ 74%] +tests/test_valve_bsp.py::test_no_errors[bsp2] PASSED [ 75%] +tests/test_valve_bsp.py::test_entities_loaded[bsp0] PASSED [ 76%] +tests/test_valve_bsp.py::test_entities_loaded[bsp1] PASSED [ 76%] +tests/test_valve_bsp.py::test_entities_loaded[bsp2] PASSED [ 77%] +tests/branches/test_base.py::TestStruct::test_unpack PASSED [ 78%] +tests/branches/test_base.py::TestStruct::test_pack PASSED [ 78%] +tests/branches/test_base.py::TestMappedArray::test_init PASSED [ 79%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.id_software.quake] PASSED [ 80%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.id_software.quake2] PASSED [ 80%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.id_software.quake3] PASSED [ 81%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty1] PASSED [ 81%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty2] PASSED [ 82%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty4] PASSED [ 83%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ion_storm.daikatana] PASSED [ 83%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.gearbox.blue_shift] PASSED [ 84%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.gearbox.nightfire] PASSED [ 85%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.raven.hexen2] PASSED [ 85%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.raven.soldier_of_fortune] PASSED [ 86%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.raven.soldier_of_fortune2] PASSED [ 87%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ritual.fakk2] PASSED [ 87%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ritual.moh_allied_assault] PASSED [ 88%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ritual.sin] PASSED [ 89%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.ritual.star_trek_elite_force2] PASSED [ 89%] +tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.valve.goldsrc] PASSED [ 90%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.arkane.dark_messiah_multiplayer] PASSED [ 90%] -tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.arkane.dark_messiah_singleplayer] PASSED [ 90%] -tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.nexon.cso2] PASSED [ 91%] +tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.arkane.dark_messiah_singleplayer] PASSED [ 91%] +tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.nexon.cso2] PASSED [ 92%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.nexon.cso2_2018] PASSED [ 92%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.nexon.vindictus] PASSED [ 93%] -tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.respawn.apex_legends] PASSED [ 93%] +tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.respawn.apex_legends] PASSED [ 94%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.respawn.titanfall] PASSED [ 94%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.respawn.titanfall2] PASSED [ 95%] -tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.troika.vampire] PASSED [ 95%] +tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.troika.vampire] PASSED [ 96%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.valve.alien_swarm] PASSED [ 96%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.valve.left4dead] PASSED [ 97%] -tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.valve.left4dead2] PASSED [ 97%] +tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.valve.left4dead2] PASSED [ 98%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.valve.orange_box] PASSED [ 98%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.valve.sdk_2013] PASSED [ 99%] tests/branches/test_branch_script.py::test_branch_script[bsp_tool.branches.valve.source] PASSED [100%] @@ -278,7 +290,7 @@ ERROR LOADING ENTITIES: Line 04307: "message" "Players can get rid of their jit ERROR LOADING ENTITIES: Line 04308: in return for a slight increase in move speed, by shooting the Anti-Jitter button." ERROR LOADING ENTITIES: Line 04326: "message" "Players in Anti-Jitter Mode will retain their increased jump height. ERROR LOADING ENTITIES: Line 04327: This option is per-player; your setting does not affect other players." -____________________ test_load_bsp[E:/Mod-CSO2-map_dirs74] ____________________ +____________________ test_load_bsp[E:/Mod-CSO2-map_dirs76] ____________________ group_path = 'E:/Mod', game_name = 'CSO2', map_dirs = ['maps'] @@ -525,7 +537,7 @@ E + 'maps/zz_prodigy.bsp': AssertionError('GAME_LUMP\nassert 1 == 0\n E } tests\test_bsp.py:71: AssertionError -__________ test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs75] __________ +__________ test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs77] __________ group_path = 'E:/Mod', game_name = 'DarkMessiah/singleplayer' map_dirs = ['maps'] @@ -649,7 +661,7 @@ E + 'maps/menu_3d_credits.bsp': AssertionError('GAME_LUMP\nassert 1 == E } tests\test_bsp.py:71: AssertionError -__________ test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs76] ___________ +__________ test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs78] ___________ group_path = 'E:/Mod', game_name = 'DarkMessiah/multiplayer' map_dirs = ['maps'] @@ -725,7 +737,7 @@ E + 'maps/l_mp5.bsp': AssertionError('sprp\nassert 1 == 0\n +1\n -0') E } tests\test_bsp.py:71: AssertionError -_________________ test_load_bsp[E:/Mod-Vindictus-map_dirs80] __________________ +_________________ test_load_bsp[E:/Mod-Vindictus-map_dirs82] __________________ group_path = 'E:/Mod', game_name = 'Vindictus', map_dirs = ['maps'] @@ -1730,7 +1742,7 @@ tests\test_bsp.py:71: AssertionError ERROR LOADING ENTITIES: Line 00000: VBSP\x14\x00\x00\x00p\t\x02"\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\nERROR LOADING ENTITIES: Line 00000: VBSP\x14\x00\x00\x00T"\x02_\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\nERROR LOADING ENTITIES: Line 00000: VBSP\x14\x00\x00\x00\x00a"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\nERROR LOADING ENTITIES: Line 00000: VBSP\x14\x00\x00\x00\x18"\x00Y\x14\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\nERROR LOADING ENTITIES: Line 00001: \x04\x00\x00A\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00(]\x03\x00@\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\u033a\x01\x004\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x02\x00`9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00d\x01\x00\x02\x00\x00\x00\x00\x00\x00\x00\x1f\nERROR LOADING ENTITIES: Line 00000: VBSP\x14\x00\x00\x00"\x00]\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\nERROR LOADING ENTITIES: Line 00001: \x04\x00\x00p\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00L \x02\x00`\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x007\x01\x00\x18<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x01\x00 C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nERROR LOADING ENTITIES: Line 00000: VBSP\x14\x00\x00\x00 \x13\x00"m\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00 __________________________ TestBspLump.test_setitem ___________________________ -self = +self = def test_setitem(self): for map_name in bsps: @@ -1745,7 +1757,7 @@ bsp_tool\branches\base.py:37: in __eq__ return self.flat() == other.flat() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ -self = <[AttributeError('position') raised in repr()] Vertex object at 0x1f695329780> +self = <[AttributeError('position') raised in repr()] Vertex object at 0x1891872a540> def flat(self) -> list: """recreates the _tuple this instance was initialised from""" @@ -1763,23 +1775,23 @@ tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty1] C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_script.py:41: UserWarning: Unused LumpClasses in branch script: - CullGroup - Occluder - AxisAlignedBoundingBox - PatchCollision - Node Model - Light + Portal DrawVertex - Brush + AxisAlignedBoundingBox Cell - Portal + Brush + Light + PatchCollision + Node + CullGroup + Occluder warnings.warn(UserWarning(warning_text)) tests/branches/test_branch_script.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty2] C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_script.py:41: UserWarning: Unused LumpClasses in branch script: - Model CollisionTriangle + Model CollisionEdge warnings.warn(UserWarning(warning_text)) @@ -1806,7 +1818,7 @@ bsp_tool\branches\__init__.py 28 0 100% bsp_tool\branches\arkane\__init__.py 3 0 100% bsp_tool\branches\arkane\dark_messiah_multiplayer.py 23 0 100% bsp_tool\branches\arkane\dark_messiah_singleplayer.py 55 0 100% -bsp_tool\branches\base.py 170 46 73% +bsp_tool\branches\base.py 170 34 80% bsp_tool\branches\gearbox\__init__.py 3 0 100% bsp_tool\branches\gearbox\blue_shift.py 27 0 100% bsp_tool\branches\gearbox\nightfire.py 72 0 100% @@ -1817,7 +1829,7 @@ bsp_tool\branches\id_software\quake3.py 140 8 94% bsp_tool\branches\infinity_ward\__init__.py 4 0 100% bsp_tool\branches\infinity_ward\call_of_duty1.py 141 4 97% bsp_tool\branches\infinity_ward\call_of_duty2.py 133 1 99% -bsp_tool\branches\infinity_ward\call_of_duty4.py 52 0 100% +bsp_tool\branches\infinity_ward\call_of_duty4.py 55 0 100% bsp_tool\branches\ion_storm\__init__.py 2 0 100% bsp_tool\branches\ion_storm\daikatana.py 12 0 100% bsp_tool\branches\nexon\__init__.py 5 0 100% @@ -1848,7 +1860,7 @@ bsp_tool\branches\valve\goldsrc.py 67 0 100% bsp_tool\branches\valve\left4dead.py 90 0 100% bsp_tool\branches\valve\left4dead2.py 88 0 100% bsp_tool\branches\valve\orange_box.py 134 10 93% -bsp_tool\branches\valve\sdk_2013.py 24 0 100% +bsp_tool\branches\valve\sdk_2013.py 88 0 100% bsp_tool\branches\valve\source.py 585 111 81% bsp_tool\branches\vector.py 175 121 31% bsp_tool\extensions\__init__.py 0 0 100% @@ -1857,21 +1869,21 @@ bsp_tool\extensions\decrypt_xor.py 11 11 0% bsp_tool\extensions\diff.py 106 106 0% bsp_tool\extensions\lightmaps.py 133 133 0% bsp_tool\id_software.py 95 13 86% -bsp_tool\infinity_ward.py 130 19 85% +bsp_tool\infinity_ward.py 130 17 87% bsp_tool\lumps\__init__.py 272 49 82% bsp_tool\raven.py 3 0 100% bsp_tool\respawn.py 146 69 53% bsp_tool\ritual.py 44 3 93% bsp_tool\valve.py 58 10 83% --------------------------------------------------------------------------- -TOTAL 5608 1178 79% +TOTAL 5675 1164 79% =========================== short test summary info =========================== FAILED tests/test_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-tunetwo-map_dirs11] FAILED tests/test_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Team Fortress 2-map_dirs53] -FAILED tests/test_bsp.py::test_load_bsp[E:/Mod-CSO2-map_dirs74] - AssertionEr... -FAILED tests/test_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs75] -FAILED tests/test_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs76] -FAILED tests/test_bsp.py::test_load_bsp[E:/Mod-Vindictus-map_dirs80] - Assert... +FAILED tests/test_bsp.py::test_load_bsp[E:/Mod-CSO2-map_dirs76] - AssertionEr... +FAILED tests/test_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs77] +FAILED tests/test_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs78] +FAILED tests/test_bsp.py::test_load_bsp[E:/Mod-Vindictus-map_dirs82] - Assert... FAILED tests/test_bsplump.py::TestBspLump::test_setitem - AttributeError: pos... -====== 7 failed, 129 passed, 7 skipped, 5 warnings in 2067.00s (0:34:27) ====== +=========== 7 failed, 148 passed, 5 warnings in 2150.37s (0:35:50) ============ diff --git a/tests/maplist.py b/tests/maplist.py index 9aa57af6..49c934c8 100644 --- a/tests/maplist.py +++ b/tests/maplist.py @@ -131,6 +131,8 @@ "QuakeIII": ["maps"], # 31 maps | 116 MB | .pk3 # TODO: Quake Champions .pak (Saber3D) "QuakeLive": ["pak00/maps"], # 149 maps | 764 MB | .pk3 + # https://www.splashdamage.com/games/wolfenstein-enemy-territory/ + "WolfET": ["pak0.pk3/maps"], # 6 maps | 86 MB | .pk3 # InfinityWardBsp "CoD1": ["maps", # 33 maps | 488 MB | .pk3 "maps/MP"], # 16 maps | 229 MB | .pk3 @@ -145,6 +147,9 @@ # "CoD4": ["devraw/maps", # 1 map | 17 MB | .d3dbsp (v17 InfinityWardBsp; not a CoD4 .d3dbsp?) "CoD4": ["maps", # 3 maps | 7 MB | .d3dbsp "maps/mp"], # 1 map | 4 MB | .d3dbsp + # GoldSrcBsp + # https://www.moddb.com/games/james-bond-007-nightfire/downloads/alura-zoe + "Nightfire": ["ROOT/maps"], # 53 maps | 405 MB | .007 # ValveBsp "BlackMesa": ["maps"], # 109 maps | 5.5 GB | .vpk "CSMalvinas": ["maps"], # 1 map | 13 MB | Counter-Strike: Malvinas @@ -152,8 +157,7 @@ "CSO2": ["maps"], # 97 maps | 902 MB | Counter-Strike: Online 2 | .pkg "DarkMessiah/singleplayer": ["maps"], # 35 maps | 1.4 GB | .vpk "DarkMessiah/multiplayer": ["maps"], # 11 maps | 564 MB | .vpk - # https://www.moddb.com/games/james-bond-007-nightfire/downloads/alura-zoe - "Nightfire": ["ROOT/maps"], # 53 maps | 405 MB | .007 + "Infra": ["maps"], # 49 maps | 5.5 GB | .vpk "TacticalIntervention": ["maps"], # 26 maps | 3.5 GB | Tactical Intervention # https://www.moddb.com/mods/team-fortress/downloads "TeamFortressQuake": ["tf25rel/maps", # 1 map | 1.88 MB | v2.5 diff --git a/tests/test_d3d_bsp.py b/tests/test_d3d_bsp.py index c86c22c0..8c2256b2 100644 --- a/tests/test_d3d_bsp.py +++ b/tests/test_d3d_bsp.py @@ -9,19 +9,20 @@ d3dbsps = [] # TODO: add more Call of Duty 4 dirs from maplist.installed_games & make it optional -for map_dir in ["./tests/maps/Call of Duty 4", "./tests/maps/Call of Duty 4/mp"]: - for map_name in fnmatch.filter(os.listdir(map_dir), ".d3dbsp"): +for map_dir in ["tests/maps/Call of Duty 4", "tests/maps/Call of Duty 4/mp"]: + map_dir = os.path.join(os.getcwd(), map_dir) + for map_name in fnmatch.filter(os.listdir(map_dir), "*[Bb][Ss][Pp]"): d3dbsps.append(D3DBsp(call_of_duty4, os.path.join(map_dir, map_name))) @pytest.mark.parametrize("d3dbsp", d3dbsps) def test_no_errors(d3dbsp): - assert len(d3dbsp.loading_errors) == 0 + assert len(d3dbsp.loading_errors) == 0, d3dbsp.filename @pytest.mark.parametrize("d3dbsp", d3dbsps) def test_entites_loaded(d3dbsp): - assert d3dbsp.ENTITIES[0]["classname"] == "worldspawn" + assert d3dbsp.ENTITIES[0]["classname"] == "worldspawn", d3dbsp.filename # TODO: implement .save_as method and test that uneditted saves match EXACTLY diff --git a/tests/test_idtech_bsp.py b/tests/test_idtech_bsp.py index 94df2fd4..202045f4 100644 --- a/tests/test_idtech_bsp.py +++ b/tests/test_idtech_bsp.py @@ -8,9 +8,9 @@ from bsp_tool.branches.id_software import quake3 bsps = [] -map_dir = "./tests/maps/Quake 3 Arena" +map_dir = os.path.join(os.getcwd(), "tests/maps/Quake 3 Arena") # TODO: add more Quake 3 Arena dirs from maplist.installed_games & make it optional -for map_name in fnmatch.filter(os.listdir(map_dir), ".d3dbsp"): +for map_name in fnmatch.filter(os.listdir(map_dir), "*[Bb][Ss][Pp]"): bsps.append(IdTechBsp(quake3, os.path.join(map_dir, map_name))) @@ -21,7 +21,7 @@ def test_no_errors(bsp: IdTechBsp): @pytest.mark.parametrize("bsp", bsps) def test_entities_loaded(bsp: IdTechBsp): - assert bsp.ENTITIES[0]["classname"] == "worldspawn" + assert bsp.ENTITIES[0]["classname"] == "worldspawn", bsp.filename # NOTE: WIP @@ -29,7 +29,7 @@ def test_entities_loaded(bsp: IdTechBsp): def test_face_struct(bsp: IdTechBsp): # the most complex MappedArray # TODO: add more asserts, be thorough header = bsp.headers["FACES"] - assert header.length % struct.calcsize(quake3.Face._format) == 0 + assert header.length % struct.calcsize(quake3.Face._format) == 0, bsp.filename with open(bsp.file.name, "rb") as file: file.seek(header.offset) raw_faces = file.read(header.length) diff --git a/tests/test_valve_bsp.py b/tests/test_valve_bsp.py index 4dbc62b8..3c1c1ae9 100644 --- a/tests/test_valve_bsp.py +++ b/tests/test_valve_bsp.py @@ -8,21 +8,21 @@ bsps = [] -map_dir = "./tests/maps/Team Fortress 2" +map_dir = os.path.join(os.getcwd(), "tests/maps/Team Fortress 2") # TODO: add more Team Fortress 2 dirs from maplist.installed_games & make it optional -for map_name in fnmatch.filter(os.listdir(map_dir), ".d3dbsp"): +for map_name in fnmatch.filter(os.listdir(map_dir), "*[Bb][Ss][Pp]"): bsps.append(ValveBsp(orange_box, os.path.join(map_dir, map_name))) @pytest.mark.parametrize("bsp", bsps) def test_no_errors(bsp: ValveBsp): # NOTE: covered by test_bsp.py - assert len(bsp.loading_errors) == 0 - assert len(bsp.GAME_LUMP.loading_errors) == 0 + assert len(bsp.loading_errors) == 0, bsp.filename + assert len(bsp.GAME_LUMP.loading_errors) == 0, bsp.filename @pytest.mark.parametrize("bsp", bsps) def test_entities_loaded(bsp: ValveBsp): - assert bsp.ENTITIES[0]["classname"] == "worldspawn" + assert bsp.ENTITIES[0]["classname"] == "worldspawn", bsp.filename # TODO: implement .save_as method and test that uneditted saves match EXACTLY