Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
*.md linguist-detectable

# Compressonator
*.a binary
*.a binary
*.lib binary

# dmxpp
Expand All @@ -22,6 +22,9 @@
*.phy binary
*.vta binary

# toolpp
*.wc binary

# vicepp
*.dec binary
*.enc binary
Expand Down
7 changes: 5 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Options
option(SOURCEPP_USE_BSPPP "Build bsppp library" ON)
option(SOURCEPP_USE_DMXPP "Build dmxpp library" ON)
option(SOURCEPP_USE_FGDPP "Build fgdpp library" ON)
option(SOURCEPP_USE_GAMEPP "Build gamepp library" ON)
option(SOURCEPP_USE_KVPP "Build kvpp library" ON)
option(SOURCEPP_USE_MDLPP "Build mdlpp library" ON)
option(SOURCEPP_USE_STEAMPP "Build steampp library" ON)
option(SOURCEPP_USE_TOOLPP "Build toolpp library" ON)
option(SOURCEPP_USE_VICEPP "Build vicepp library" ON)
option(SOURCEPP_USE_VPKPP "Build vpkpp library" ON)
option(SOURCEPP_USE_VTFPP "Build vtfpp library" ON)
Expand All @@ -34,6 +34,9 @@ option(SOURCEPP_LINK_STATIC_MSVC_RUNTIME "Link to static MSVC runtime library"
if(SOURCEPP_USE_STEAMPP)
set(SOURCEPP_USE_KVPP ON CACHE INTERNAL "")
endif()
if(SOURCEPP_USE_TOOLPP)
set(SOURCEPP_USE_KVPP ON CACHE INTERNAL "")
endif()
if(SOURCEPP_USE_VPKPP)
set(SOURCEPP_USE_BSPPP ON CACHE INTERNAL "")
set(SOURCEPP_USE_KVPP ON CACHE INTERNAL "")
Expand Down Expand Up @@ -89,11 +92,11 @@ endif()
# Add libraries
add_sourcepp_library(bsppp NO_TEST) # sourcepp::bsppp
add_sourcepp_library(dmxpp) # sourcepp::dmxpp
add_sourcepp_library(fgdpp) # sourcepp::fgdpp
add_sourcepp_library(gamepp) # sourcepp::gamepp
add_sourcepp_library(kvpp) # sourcepp::kvpp
add_sourcepp_library(mdlpp) # sourcepp::mdlpp
add_sourcepp_library(steampp C) # sourcepp::steampp
add_sourcepp_library(toolpp) # sourcepp::toolpp
add_sourcepp_library(vicepp C CSHARP) # sourcepp::vicepp
add_sourcepp_library(vpkpp C CSHARP NO_TEST) # sourcepp::vpkpp
add_sourcepp_library(vtfpp) # sourcepp::vtfpp
Expand Down
7 changes: 2 additions & 5 deletions FUTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,18 @@
- Add support for v9+ DMX files
- Add support for keyvalues2 and keyvalues2_flat formats
- Add write support
- `fgdpp`
- Perhaps add the ability to parse TeamSpen's additions to the format?
- `gamepp`
- Add a function to create instances of a game rather than just finding existing ones
- When creating an instance of the game, attaching a console might be easier, or enabling -condebug,
which would then allow reading output from the console
- Add a method to take a screenshot of the game and move the file to a user-specified location
- `kvpp`
- Add write support
- `mdlpp`
- Parse animations/sequences
- Make something to construct StudioModel objects from a given model file like obj/glTF?
- Add a save method to write the constituent parts of a StudioModel to disk
- `toolpp`
- Perhaps add the ability to parse TeamSpen's additions to the FGD format?
- `vpkpp`
- Read/write LZMA-compressed zip files, and make sure it works correctly as a BSP paklump
- Cache file handles so they're not constantly getting closed/opened
- `vtfpp`
- Improve conversion speeds between formats that use handrolled per-pixel converters (SIMD? Compute shader?)
Expand Down
230 changes: 143 additions & 87 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,132 +20,188 @@ Several modern C++20 libraries for sanely parsing Valve formats, rolled into one
<th>Write</th>
<th>Wrappers</th>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>bsppp</code></td>
<td>
<ul>
<li><a href="https://developer.valvesoftware.com/wiki/BSP_(Source)">BSP</a> v17-27</li>
</ul>
</td>
<td rowspan="1"><code>bsppp</code></td>
<td><a href="https://developer.valvesoftware.com/wiki/BSP_(Source)">BSP</a> v17-27</td>
<td align="center">✅</td>
<td align="center">✅</td>
<td align="center"></td>
<td rowspan="1" align="center"></td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>dmxpp</code></td>
<td>
<ul>
<li><a href="https://developer.valvesoftware.com/wiki/DMX">DMX</a> Binary v1-5</li>
</ul>
</td>
<td rowspan="1"><code>dmxpp</code></td>
<td><a href="https://developer.valvesoftware.com/wiki/DMX">DMX</a> Binary v1-5</td>
<td align="center">✅</td>
<td align="center">❌</td>
<td align="center"></td>
<td rowspan="1" align="center"></td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>fgdpp</code></td>
<td>
<ul>
<li><a href="https://developer.valvesoftware.com/wiki/FGD">FGD (Source 1)</a></li>
<li><a href="https://ficool2.github.io/HammerPlusPlus-Website">Hammer++</a> FGD modifications</li>
<li><a href="https://stratasource.org">Strata Source</a> FGD modifications</li>
</ul>
</td>
<td rowspan="3"><code>gamepp</code></td>
<td>Get Source engine instance window title/position/size</td>
<td align="center">✅</td>
<td align="center">❌</td>
<td rowspan="3" align="center"></td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td>Run commands in a Source engine instance remotely</td>
<td align="center">❌</td>
<td align="center">✅</td>
<td align="center"></td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>gamepp</code></td>
<td>
<ul>
<li>Get Source engine instance window title/position/size</li>
<li>Run commands in a Source engine instance remotely</li>
</ul>
</td>
<td align="center">n/a</td>
<td align="center">n/a</td>
<td align="center"></td>
<td rowspan="1"><code>kvpp</code></td>
<td><a href="https://developer.valvesoftware.com/wiki/KeyValues">KeyValues</a> v1<sup>*</sup></td>
<td align="center">✅</td>
<td align="center">✅</td>
<td rowspan="1" align="center"></td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>kvpp</code></td>
<td>
<ul>
<li><a href="https://developer.valvesoftware.com/wiki/KeyValues">KeyValues</a> v1<sup>*</sup></li>
</ul>
</td>
<td rowspan="5"><code>mdlpp</code></td>
<td><a href="https://developer.valvesoftware.com/wiki/MDL_(Source)">MDL</a> v44-49<sup>&dagger;</sup></td>
<td align="center">✅</td>
<td align="center">❌</td>
<td rowspan="5" align="center"></td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><a href="https://developer.valvesoftware.com/wiki/VTX">VTX</a> v7</td>
<td align="center">✅</td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>mdlpp</code></td>
<td>
<ul>
<li><a href="https://developer.valvesoftware.com/wiki/MDL_(Source)">MDL</a> v44-49<sup>&dagger;</sup></li>
<li><a href="https://developer.valvesoftware.com/wiki/VTX">VTX</a> v7</li>
<li><a href="https://developer.valvesoftware.com/wiki/VVD">VVD</a> v4</li>
</ul>
</td>
<td><a href="https://developer.valvesoftware.com/wiki/VVD">VVD</a> v4</td>
<td align="center">✅</td>
<td align="center">❌</td>
<td></td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>steampp</code></td>
<td>
<ul>
<li>Find Steam install folder</li>
<li>Find installed Steam games</li>
</ul>
</td>
<td align="center">n/a</td>
<td align="center">n/a</td>
<td align="center">C</td>
<td rowspan="3"><code>steampp</code></td>
<td>Find Steam install folder</td>
<td align="center">✅</td>
<td align="center">-</td>
<td rowspan="3" align="center">C</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td>Find installed Steam games</td>
<td align="center">✅</td>
<td align="center">-</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>vicepp</code></td>
<td rowspan="3"><code>toolpp</code></td>
<td>
<ul>
<li><a href="https://developer.valvesoftware.com/wiki/VICE">VICE</a> Encrypted Files</li>
</ul>
<a href="https://developer.valvesoftware.com/wiki/FGD">FGD (Source 1)</a>
<br> &bull; <a href="https://ficool2.github.io/HammerPlusPlus-Website">Hammer++</a> modifications
<br> &bull; <a href="https://stratasource.org">Strata Source</a> modifications
</td>
<td align="center">✅</td>
<td align="center">✅</td>
<td align="center">C<br>C#</td>
<td rowspan="3" align="center"></td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>vpkpp</code></td>
<td>
<ul>
<li><a href="https://developer.valvesoftware.com/wiki/Bonus_Maps">BMZ</a></li>
<li><a href="https://developer.valvesoftware.com/wiki/BSP_(Source)">BSP</a> v17-27</li>
<li>FPX v10 (Tactical Intervention)</li>
<li><a href="https://developer.valvesoftware.com/wiki/GCF_archive">GCF</a> v6</li>
<li>GMA v1-3 (Garry's Mod)</li>
<li><a href="https://quakewiki.org/wiki/.pak">PAK</a> (Quake, WON Half-Life)</li>
<li><a href="https://docs.godotengine.org/en/stable/tutorials/export/exporting_pcks.html">PCK</a> v1-2 (Godot Engine)</li>
<li><a href="https://doomwiki.org/wiki/PK3">PK3</a> (Quake III)</li>
<li><a href="https://doomwiki.org/wiki/PK4">PK4</a> (Quake IV, Doom 3)</li>
<li><a href="https://developer.valvesoftware.com/wiki/VPK">VPK</a> v1-2</li>
<li>VPK (Vampire: The Masquerade - Bloodlines)</li>
<li>ZIP</li>
</ul>
<a href="https://developer.valvesoftware.com/wiki/Command_Sequences">WC</a> (CmdSeq) v0.1-0.2
<br> &bull; <a href="https://stratasource.org">Strata Source</a> modifications
</td>
<td align="center">✅</td>
<td align="center">✅</td>
<td align="center">C<br>C#</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><code>vtfpp</code></td>
<td>
<ul>
<li><a href="https://developer.valvesoftware.com/wiki/VTF_(Valve_Texture_Format)">VTF</a> v7.0-7.6</li>
</ul>
</td>
<td rowspan="1"><code>vicepp</code></td>
<td><a href="https://developer.valvesoftware.com/wiki/VICE">VICE</a> Encrypted Files</td>
<td align="center">✅</td>
<td align="center">✅</td>
<td rowspan="1" align="center">C<br>C#</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td rowspan="23"><code>vpkpp</code></td>
<td><a href="https://developer.valvesoftware.com/wiki/Bonus_Maps">BMZ</a></td>
<td align="center">✅</td>
<td align="center">✅</td>
<td rowspan="23" align="center">C<br>C#</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><a href="https://developer.valvesoftware.com/wiki/BSP_(Source)">BSP</a> v17-27</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td>FPX v10 (Tactical Intervention)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><a href="https://developer.valvesoftware.com/wiki/GCF_archive">GCF</a> v6</td>
<td align="center">✅</td>
<td align="center">❌</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td>GMA v1-3 (Garry's Mod)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><a href="https://quakewiki.org/wiki/.pak">PAK</a> (Quake, WON Half-Life)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><a href="https://docs.godotengine.org/en/stable/tutorials/export/exporting_pcks.html">PCK</a> v1-2 (Godot Engine)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><a href="https://doomwiki.org/wiki/PK3">PK3</a> (Quake III)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><a href="https://doomwiki.org/wiki/PK4">PK4</a> (Quake IV, Doom 3)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td><a href="https://developer.valvesoftware.com/wiki/VPK">VPK</a> v1-2</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td>VPK (Vampire: The Masquerade - Bloodlines)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td>ZIP (and BZ2, GZ, XZ, ZSTD)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr><!-- empty row to disable github striped bg color --></tr>
<tr>
<td rowspan="1"><code>vtfpp</code></td>
<td><a href="https://developer.valvesoftware.com/wiki/VTF_(Valve_Texture_Format)">VTF</a> v7.0-7.6</td>
<td align="center">✅</td>
<td align="center">❌</td>
<td align="center"></td>
<td rowspan="1" align="center"></td>
</tr>
</table>

Expand Down
6 changes: 4 additions & 2 deletions include/sourcepp/String.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,13 @@ void normalizeSlashes(std::string& path, bool stripSlashPrefix = false, bool str

void denormalizeSlashes(std::string& path, bool stripSlashPrefix = false, bool stripSlashSuffix = true);

std::from_chars_result toInt(std::string_view number, std::integral auto& out, int base = 10) {
std::from_chars_result toBool(std::string_view number, bool& out, int base = 10);

inline std::from_chars_result toInt(std::string_view number, std::integral auto& out, int base = 10) {
return std::from_chars(number.data(), number.data() + number.size(), out, base);
}

std::from_chars_result toFloat(std::string_view number, std::floating_point auto& out) {
inline std::from_chars_result toFloat(std::string_view number, std::floating_point auto& out) {
#ifdef __APPLE__
// Piece of shit compiler
out = std::stof(std::string{number});
Expand Down
Loading