3364 Commits

Author SHA1 Message Date
Kawe Mazidjatari
cb8f0902a4 Netconsole: don't process empty input strings
Caught by assert in CUtlBuffer ctor when tokenizing the input.
2024-04-05 17:46:55 +02:00
Kawe Mazidjatari
3c10bf0e8d Netconsole: refactor & improvements
* Fix multiple issues related to threading, such as not locking the mutex when using thread-unsafe members or methods.
* Netconsole now logs its output to a file on the disk.
* Properly handle close events, to allow netconsole to shutdown properly, so stuff like log buffers could flush properly. Input is now ran in a separate thread so main thread could check if we need to shutdown, and do so if needed. This was needed as previously input was ran in the main thread and the issue is that its blocking until an input is given.
2024-04-05 17:46:55 +02:00
Kawe Mazidjatari
43d771e3cd System: handle other close events as well
Give the engine and SDK time to shutdown properly.
2024-04-05 17:46:55 +02:00
Kawe Mazidjatari
974a5b2c24 SpdLog: flush the tools logger
Must manually kill the pointer on shutdown to flush it since this one is allocated by us and thus not managed by SpdLog.
2024-04-05 17:46:55 +02:00
Kawe Mazidjatari
cdcd7b8272 SpdLog: add truncate option for tools file logger, and default it on
By default spdlog will append on top of existing logs, but for ReVPK we want to truncate the old ones and start over again.
2024-04-05 17:46:55 +02:00
Kawe Mazidjatari
19e67499e6 SpdLog: fix warning for tools code
Static linkage and not used for tools; idfed'd out.
2024-04-05 17:46:55 +02:00
Kawe Mazidjatari
22bb9eef4f Engine: fix compiler warning caused by empty control statement
Remove trailing ';', else this branch wouldn't even be compiled in.
2024-04-05 17:46:55 +02:00
Kawe Mazidjatari
92323b7ba7 SpdLog: fix compile error caused by undeclared function
SpdLog_Create() is no longer externed through its header as its a static internal function. Moved SpdLog_Create() above SpdLog_Init() to fix the compile error and rename it to SpdLog_CreateRotatingLoggers(), which is a more suitable name.
2024-04-05 17:46:54 +02:00
Kawe Mazidjatari
21758f5c9c Sync ReVPK fixes to packedstore concommand
* Check if workspace directory exists.
* Check if VPK directory tree file was successfully parsed.
2024-04-05 17:46:54 +02:00
Kawe Mazidjatari
bf59f6c2c5 ReVPK: bug fixes & improvements
* Make sure the workspace path actually exists before attempting to pack it.
* Make sure the VPK directory tree file was parsed correctly before unpacking store.
* Log debug output for each pack operation to a file.
* Fix bug in s_DirFileRegex regex pattern, which would include a trailing '_' in the context part of the directory tree file name.
* Fix bug in 'GetLevelName()' and 'GetDirNameParts()' causing it to parse the path as well, prune the path before running the regex.
* Renamed 'GetLevelName()' to 'PackedStore_GetDirLevelName()'.
* Renamed 'GetDirNameParts()' to 'PackedStore_GetDirNameParts()'.
* Write a front-end enable file when building client VPK's.
2024-04-05 17:46:54 +02:00
Kawe Mazidjatari
8ff1404c4d VpkLib: move header check to dir construction and flag error on failure
Moved the construction as otherwise we would iterate over potentially bad or incompatible data.
2024-04-05 17:46:54 +02:00
Kawe Mazidjatari
6f0fdd56ce VpkLib: add comments to name sanitizer
Make it clear what it does.
2024-04-05 17:46:54 +02:00
Kawe Mazidjatari
7304c3782d VpkLib: fix bug in dir tree file name sanitizer
The sanitizer never worked as we never replaced the corresponding string.
2024-04-05 17:46:54 +02:00
Kawe Mazidjatari
465d905056 VpkLib: fix bug in GetManifest()
Check if the parsing was actually successful, else free and return nullptr. The null check at call site never worked since we never return null on failure.
2024-04-05 17:46:53 +02:00
Kawe Mazidjatari
5f554867a1 VpkLib: check for manifest file first before opening the pack file
We do this as if we happen to not have any manifest whatsoever, but already opened the block file, and the block file already existed and was still valid, it would be emptied out. Only open it if we are actually going to write into it!
2024-04-05 17:46:53 +02:00
Kawe Mazidjatari
be9d5c6e24 FileSystem: implement IsDirectory in STD implementation 2024-04-05 17:46:53 +02:00
Kawe Mazidjatari
e6ba904f96 VokLib: rename pack/unpack methods
More correct names.
2024-04-05 17:46:53 +02:00
Kawe Mazidjatari
28cc532e9c ReVPK: add option for num helper threads and compress levels
Allow the user to set the # amount of helper threads and the compress level of the VPK's.
2024-04-05 17:46:53 +02:00
Kawe Mazidjatari
c8fff61696 ReVPK: add documentation and options for custom paths 2024-04-05 17:46:53 +02:00
Kawe Mazidjatari
2b0837fa93 VpkLib: allow directory recursion
This is offline tools code, no security risks here.
2024-04-05 17:46:53 +02:00
Kawe Mazidjatari
ff7c3b1435 Tier1: feature proper size types for CFmtStrN
Promote to 64bit for target platform.
2024-04-05 17:46:53 +02:00
Kawe Mazidjatari
abbed191c2 Tools: check CPU for SSE2
SSE and SSE2 instructions are being used, check for them instead of crashing somewhere in the program.
2024-04-05 17:46:52 +02:00
Kawe Mazidjatari
9b9aad8bee RTech: fix bug in pakfile decompress callback
* Fix decompress size check.
* Fix incorrect decompress buffer allocation size.
2024-04-05 17:46:52 +02:00
Kawe Mazidjatari
9b3dd97792 VpkLib: rename CPackedStore to CPackedStoreBuilder
Avoid confusion with the game's CPackedStore class.
2024-04-05 17:46:52 +02:00
Kawe Mazidjatari
6841f5bb19 VpkLib: cleanup packed store class
Make the utility methods statics within the implementation so it could be used by other structs/classes of the VPK builder as well, these utility functions weren't useful outside the class. This also allowed for the removal of the singleton which had no purpose whatsoever.
2024-04-05 17:46:52 +02:00
Kawe Mazidjatari
195df6d0e8 FileSystem: fix bug in tools implementation
Should read element count of bytes instead of element count of file size, else this always returns 1 instead of the actual number of bytes read/written.
2024-04-05 17:46:52 +02:00
Kawe Mazidjatari
7cbb8a994d KeyValues: fix bug when loading from file
Read file as binary, and check if the file we're opening has a size.
2024-04-05 17:46:52 +02:00
Kawe Mazidjatari
6f11fffe63 Tier0: fix netconsole and revpk compile error in debug
CCommandLine isn't implemented in tools, thus unresolved external symbol errors will be thrown. HushAsserts() was unused and therefore removed which fixes these errors.
2024-04-05 17:46:52 +02:00
Kawe Mazidjatari
89bb7f35c8 KeyValues: fix singleton accessor compile errors
Make each instance implement the accessor instead of the KeyValues system itself.
2024-04-05 17:46:51 +02:00
Kawe Mazidjatari
ab58decd9b CMake: add ReVPK project, standalone VPK tool
Standalone VPK tool that does everything the VPK tool implemented in the dedicated server does (pack, unpack), but independent from the game's runtime.
2024-04-05 17:44:07 +02:00
Kawe Mazidjatari
5eb784a882 FileSystem: add standalone implementation
Standalone FileSystem implementation, allowing SDK code to be used in tools without adjusting them as the vtables remain identical. NOTE that this reimplementation is partial and only contains the reading and writing of files to/from buffers or disk as that's what we are mainly interested at. We can always implement the other methods when needed.

NOTE: the filesystem singleton accessor (CFileSystem_Stdio* FileSystem()) has been moved to an implementation file instead of being inline as this would allow existing code to link to the tools implementation instead.
2024-04-05 17:42:55 +02:00
Kawe Mazidjatari
891a7439f4 AppSystem: implement destructors
Need to be implemented when these are subclassed and implemented (not declared) in the SDK or tools.
2024-04-05 17:42:54 +02:00
Kawe Mazidjatari
faa359183e FileSystem: fix subclassing
Should use CTier1AppSystem.
2024-04-05 17:42:54 +02:00
Kawe Mazidjatari
ee82d5d8e0 Tier1: move KeyValues class to Tier1
The KeyValues class belongs here. Also reimplemented most loading methods for KeyValues, and adjusted the VPK building code to account for it. Pointers to the engine's implementation of KeyValues have been moved to a separate header ('keyvalues_iface.h'), as this allows external tools code to utilize the standalone KeyValues class implementation. Playlist utilities are completely separated from the KeyValues header; these have nothing to do with KeyValues other than manipulating a global KeyValues object for the playlists, and thus have been named as such and moved to rtech/playlists.
2024-04-05 17:42:05 +02:00
Kawe Mazidjatari
51986ec1c6 VstdLib: reimplement CKeyValuesSystem
NOTE: reimplementation is for tools only, the game and SDK still uses the engine's implementation.
2024-04-05 17:36:37 +02:00
Kawe Mazidjatari
b2ce189ba1 Tools: rename NETCONSOLE define to _TOOLS
Rename since this would actually be used for all tools. Also moved 'plat_time.cpp' to tier0 so anything could compile it.
2024-04-05 17:35:10 +02:00
Kawe Mazidjatari
07cc5420bc Tier1: enable CUtlBuffer char conversion
Changed types to const char* instead of char*.
2024-04-05 17:31:35 +02:00
Kawe Mazidjatari
654da2c816 Tier1: fix CUtlMemoryPool::CBlob structure
Only contains the 'previous' pointer, freeing memory now works.
2024-04-05 17:31:35 +02:00
Kawe Mazidjatari
f5854cccb5 Tier1: update memstack implementation
CMemoryStack::m_unkSize is always initialized to 0x100000 in apex.
2024-04-05 17:31:35 +02:00
Kawe Mazidjatari
ae681fc118 Tier1: enable CMemoryStack and fix compile errors in debug
Define missing MemAlloc_* inlines.
2024-04-05 17:31:35 +02:00
Kawe Mazidjatari
5721ffd22b Tier1: reimplement CUtlMemoryPool
Class is slightly modified; it uses 2 CBlob pointers instead of a single CBlob member. CUtlMemoryPool::m_pHeadOfFreeList is also replaced with the new CUtlMemoryPool::m_pPrev pointer. Code has been modified to accommodate this change and aligns with the assembly code of r5.
2024-04-05 17:29:12 +02:00
Kawe Mazidjatari
bd230506fb Pylon: fix bulkCheck request body
Array should be in "players".
2024-04-05 17:29:12 +02:00
Kawe Mazidjatari
a8074b4c99 VPhysics: add CPhysicsCollision singleton
Used for CStudioVCollide::~CStudioVCollide().
2024-04-05 17:26:16 +02:00
Kawe Mazidjatari
82b56fed5c DataCache: enable old gather props in proper location
Fix hack and handle this properly.
2024-04-05 17:26:16 +02:00
Kawe Mazidjatari
3d207d30a2 DataCache: rework datacache invalid data handling
This is a more reliable solution as pretty much all code patch in CMDLCache checks the ptr for NULL, but none of them do for 0xDEADFEEDDEADFEED (probably a debug only thing that somehow made it into this build). Patched out so the engine could deal with it properly. Anything interesting already gets logged from the SDK so we won't miss out on anything patching this out.
2024-04-05 17:26:16 +02:00
Kawe Mazidjatari
9755804031 DataCache: rework FindUncachedMDL error handling
Remove unnecessary/duplicate code.
2024-04-05 17:26:16 +02:00
Kawe Mazidjatari
22a0124a4f DataCache: rename studiodata_t member 2024-04-05 17:26:16 +02:00
Kawe Mazidjatari
1fe426fb65 DataCache: improve FindUncachedMDL error handling
Just use a single branch.
2024-04-05 17:26:16 +02:00
Kawe Mazidjatari
0578ba6bba DataCache: rename studiodata_t::GetStudioCache()
Rename studiodata_t::GetStudioCache() to studiodata_t::GetModelCache().
2024-04-05 17:26:16 +02:00
Kawe Mazidjatari
76240c5064 DataCache: add missing check
Must check on this animrig cache handle as well.
2024-04-05 17:26:15 +02:00