3505 Commits

Author SHA1 Message Date
Kawe Mazidjatari
8f09ac1b86 ImGui: cleanup and improvement to surface implementation
* Properly run fade in-out animations
* Make common methods/members shared
* Remove extraneous SDK thread
2024-02-29 13:18:18 +01:00
Kawe Mazidjatari
e311051148 ImGui: use Dear ImGui API for the cursor render blinker 2024-02-29 02:16:05 +01:00
Kawe Mazidjatari
79d82794ae ImGui: fix regression in logger after improving cursor selections
If you triple click a line in the logger, the selection mode will be set to SelectionMode::Line, however, when we drag with the mouse, the selection remain on SelectionMode::Line, causing the cursor to be stuck, which breaks the ability to scroll select. Mode must be set to normal during dragging.
2024-02-29 02:01:41 +01:00
Kawe Mazidjatari
0c46b15139 ImGui: initialize newly added member vars and fix scrolling regression
The types should be floats instead of ints, the compiler actually compiled it as ints after changing to ImCeil. Made vars of correct type and removed extraneous casts.
2024-02-29 01:32:45 +01:00
Kawe Mazidjatari
f9ed276cbd ImGui: reset horizontal scroll position when command has been submitted
Small UX improvement.
2024-02-29 01:00:24 +01:00
Kawe Mazidjatari
79e457fcf8 ImGui: add ability to reset horizontal scroll position
This allows us to reset the horizontal position only when an user submitted a console command in the text box. We don't want to reset the horizontal position if new lines are added since user could still be reading text that is otherwise clipped away.
2024-02-29 00:59:55 +01:00
Kawe Mazidjatari
476609c06f ImGui: fix bug in CTextEditor::IsHandleMouseInputsEnabled
Returned the incorrect value, should've returned m_bHandleMouseInputs.
2024-02-28 23:55:09 +01:00
Kawe Mazidjatari
88c8727af1 ImGui: add 'ImGuiWindowFlags_NoNavInputs' to console logger
Prevent the logging view area from moving within the console window.
2024-02-28 23:54:10 +01:00
Kawe Mazidjatari
117bc7a058 ImGui: add multiple fixes and improvements
Add some selection improvements from maintained version at https://github.com/santaclose/ImGuiColorTextEdit.

patch contains:
* advance cursor to end of selection
* add shift + mouse select
2024-02-28 23:49:48 +01:00
Kawe Mazidjatari
3a0131e418 ImGui: fix right move
Ctrl + arrow should move to word end, not next word. This also fixes a bug where it would index into into the second character when the line end gets reached.
2024-02-28 20:48:35 +01:00
Kawe Mazidjatari
267ddf4193 ImGui: fix logger not showing horizontal scrollbar when text clips 2024-02-28 20:28:11 +01:00
Kawe Mazidjatari
3f74b4a2b6 ImGui: heavy optimizations to text logger (WIP)
This code originated from an imgui code editor, where it would make sense to have per-character colors. But for the console, we only ever do 1 color per line. Just store the string and one color instance, this also allows us to just take the string instead of manually reconstructing it which is very slow. The code now also only stores 32bits for color (per line) instead of 128 bits (ImVec4) as we only ever need to convert it once.

As a result, a bunch of rendering code could be dropped, and the pass filter is now also very fast as we don't need to reconstruct the string to check for the filter, we just pass a char* in which doesn't cost any perf.
2024-02-28 19:16:31 +01:00
Kawe Mazidjatari
420cb7a68d Engine: make task queue singleton static
Compile it as static object & renamed to more correct names. Also made the integral type for frame delay an unsigned int instead
2024-02-28 00:43:57 +01:00
Kawe Mazidjatari
3e3bc79adf ImguiSystem: properly implement ImGui and fix several bugs
Moved implementation to dedicated class 'CImguiSystem' with the following changes:

* Added mutex for ImGui_ImplWin32_WndProcHandler(), the window proc is ran from a different thread than CImguiSystem::SampleFrame() is being called from. Needs a mutex as both functions interact with the input queue list.

* Added init stages for debugging and preventing the system from running certain parts of the code if a certain stage hasn't been reached yet.

* NULL out ImGuiContext::ConfigNavWindowingKeyNext , we don't need any nav window shortcuts as users don't need then in-game, and it also interferes with certain key binds some users have.

* CImguiSystem::SampleFrame() (previously ImguiSystem_SampleFrame()), is now being called from CMaterialSystem::SwapBuffers(), as that function is called from the main thread while also getting updated during level loads/etc, so instead of switching between 2 static buffers for as long as the levels are being loaded, we imgui updates properly too and directly swap afterwards.

* Removed hack in CGame::WindowProc() where we would only run windowproc if we aren't shutting the game down. This was needed as there was a chance of a crash at some rare cases, but this was simply due to a missing mutex which has been addressed and fixed as of this commit.

* Lock mutex during init and shutdown.
2024-02-27 17:43:18 +01:00
Kawe Mazidjatari
1f1eb65bd5 Loader: link to Tier1
Needed for strtools.
2024-02-25 23:57:08 +01:00
Kawe Mazidjatari
006bec08f6 Pylon: mark convars 'FCVAR_ACCESSIBLE_FROM_THREADS' 2024-02-25 23:56:49 +01:00
Kawe Mazidjatari
48666e6bbc Update basefilesystem.cpp
Mark 'fs_showWarnings' FCVAR_ACCESSIBLE_FROM_THREADS.
2024-02-25 23:55:12 +01:00
Kawe Mazidjatari
0a3da6edcc Update sdk_dll.cpp
Mark 'sdk_fixedframe_tickinterval' FCVAR_ACCESSIBLE_FROM_THREADS.
2024-02-25 23:54:34 +01:00
Kawe Mazidjatari
afaa18d542 VGUI: CTextOverlay cleanup
- Mark 'con_drawnotify' FCVAR_MATERIAL_SYSTEM_THREAD
- Add assert for char* in CTextOverlay::AddLog()
- Make buffer stack based in CTextOverlay::DrawFormat()
- Make color var struct const in CTextOverlay::DrawCrosshairMaterial()
2024-02-25 23:53:19 +01:00
Kawe Mazidjatari
ea60151301 ImGui: set X scroll in console window as well
Previously only the Y would reset, making you not see the end if you were scrolled too far in the X.
2024-02-25 23:51:04 +01:00
Kawe Mazidjatari
c6e2d5e31a Mathlib: enable SIMD quaternions
Should match output code with the code in the game executable, as that has been compiled with SIMD enabled.
2024-02-25 23:41:38 +01:00
Kawe Mazidjatari
bd6ffaf226 RTech: mark cvars FCVAR_ACCESSIBLE_FROM_THREADS
Must be FCVAR_ACCESSIBLE_FROM_THREADS since they are used from different threads.
2024-02-25 21:16:39 +01:00
Kawe Mazidjatari
940cbe6430 ImGui: move initialization code to DX hook setups
Also removed unused global declaration 'g_bImGuiInitialized'.
2024-02-25 21:15:37 +01:00
Kawe Mazidjatari
94857cf783 Console: fix max console lines bug
We must check on con_max_lines + 1 since the first line is a dummy.
2024-02-25 20:21:17 +01:00
Kawe Mazidjatari
e967cb374b Engine: render ImGui in main thread and fix many threading bugs
ImGui drawing code now takes place in the main thread, a snapshot of the render data is created in CMaterialSystem::SwapBuffers(), and is being rendered in the render thread right before SpinPresent().

The reason why this was necessary, is because ConVar::GetString() isn't thread safe if its not marked FCVAR_MATERIAL_SYSTEM_THREAD or FCVAR_ACCESSIBLE_FROM_THREADS, and we used it for the console suggestions window, which iterates over every ConVar, accessible from threads or not.

This is overall also a better code architecture.

This change also forced changes in the ImGui server browser window, which contained a bunch of threading bugs too.

Engine changes:
- g_pCVar is no longer exported, as this wasn't necessary in the end.
- g_ThreadMainThreadID and g_ThreadServerFrameThreadID are now exported from the game executable, as these are required as soon as the DLL is loaded.
2024-02-25 20:12:56 +01:00
Kawe Mazidjatari
a1e4500b98 Engine: reject connection is session ID hashing failed
If hashing failed, the other checks will fail regardless, return out early.
2024-02-25 19:57:45 +01:00
Kawe Mazidjatari
4ce38ba725 Engine: close RCON socket on password hashing failure
Must also be closed here
2024-02-25 19:56:58 +01:00
Kawe Mazidjatari
7f6846a315 Upgrade Dear ImGui to 1.90.4 2024-02-25 01:47:46 +01:00
Kawe Mazidjatari
0ea4988416 Tier1: fix crashes on some commands & fix assert
The supplemental callback always seems to be linked to a nullsub, probably a debug only feature. Linked all registered concommands to this as well.
2024-02-24 13:57:23 +01:00
Kawe Mazidjatari
e34f3ad3c5 Tier1: fix ConCommand::Dispatch()
Fix incorrect function prototype and add additional logic implemented in the engine. The code was crashing as the first parameter is the command target, but appears unused, the second parameter was actually the parameter that contained a pointer to the CCommand object which we needed.
2024-02-24 11:43:16 +01:00
Kawe Mazidjatari
6828901815 Tier1: static construction of ConVar objects during link time
Fully implemented ConVar class so we could statically construct all SDK convars, this avoids a level of indirection, and allows for creating ConVar's everywhere in the project.

This patch also removed the settings tab of the ImGui server browser, as it has threading issues, while it technically never caused a crash yet, it has been removed as there was no point keeping it vs the work required to make it thread save (it only managed 2 convars which are perfectly manageable through cfg's or the in-game console).

Also temporarily disabled the creation of ConVar's in the mod system due to a memory leak, we would allocate and register a convar based on details parsed out of a mod file definition, but never unregister and free it.
2024-02-24 02:15:09 +01:00
Kawe Mazidjatari
3d36c87b08 Statically construct all ConCommand
Properly implement the ConCommandBase and ConCommand classes so we could statically construct all ConCommand objects in the global scope of each translation unit, this way we don't need to put them in a global file and deal with preprocessor directives to compile then in/out for certain projects.
2024-02-23 00:12:06 +01:00
Kawe Mazidjatari
02087fef5e Engine: reduce reason buffer stack size
64 chars will cover all reasons returned by l8w8jwt_get_validation_result_desc.
2024-02-22 14:56:20 +01:00
Kawe Mazidjatari
79f8b46d62 RTech: major cleanup of pak globals and improvement
Add missing types to fully mapped out PakGlobals_s struct, which is a 13MiB+ structure! This covers the vast majority of the pakfile system which is why we had to change a bunch of stuff for this patch. This patch also comes with:

- Reversed 'JobFifoLock_s' structure
- Reversed 'PakTracker_s' structure
- Reversed 'PakAssetTracker_s' structure

Many globals have been dropped as they were covered by the large PakGlobals_s singleton.

The pak decoder logic has been changed up as well, we now use a decode mode enumerant which will make it easier to add in more decoders for the pak files in the future.
2024-02-22 02:09:28 +01:00
Kawe Mazidjatari
6e23c39d40 Netconsole: fix race condition caused by misplaced mutex
Mutex should be locked before IsConnected(), as IsConnected() accesses CSocketCreator which checks a vector (not thread safe), lock the mutex in the correct place.
2024-02-22 02:00:09 +01:00
Kawe Mazidjatari
b1493215f1 Mathlib: remove unused SHA256 implementation
No longer used, SDK uses the MbedTLS implementation now.
2024-02-22 01:57:59 +01:00
Kawe Mazidjatari
acbe43a210 Engine: fix RCON bugs and improve security
- Upgraded hashing algorithm to SHA-512, and store the raw hash instead of a string copy, which is way cheaper to compute and compare.
- Only ever close sockets once in CRConServer::SetPassword().
- Made the game server & game client RCON singletons static.
- Added calls to gracefully shutdown RCON server and RCON client on Engine/SDK shutdown.
- Added more prints so RCON user knows when its shutdown, or when their password change is in effect, etc.
- Fixed bug where we could tokenize an empty string when we dispatch a console command.
2024-02-22 01:55:08 +01:00
Kawe Mazidjatari
6afb5fe593 Engine: improve CClient::Authenticate performance
- Removed 2 std::string copy constructions
- Removed 32 sprintf calls per token auth request.
- Fixed a bug where we format the NucleusID as s64 instead of u64.
- Added additional hardening for when token/sessionId stitching fails, this will now always reject the connection.
- Improved the macro to make sure we always free the JWT claims if it has been allocated.
2024-02-22 00:59:00 +01:00
Kawe Mazidjatari
bc5e14643c Engine: print COM_ExplainDisconnection() text as CLIENT
Only used on the client, print it as client.
2024-02-21 01:18:43 +01:00
Kawe Mazidjatari
77c8e3a994 Engine: remove deprecated cvar 'cl_move_use_dt'
No longer used, the vftable call made when this was false is stubbed and thus will cause movement to bug when unset; removed.
2024-02-21 01:17:48 +01:00
Kawe Mazidjatari
4ae9852291 Engine: cleanup data block sender/receiver and add types
* Move member vars to correct place, to match it with the engine.
* Added out-of-band network message ID's for the R5 engine.

Also implemented 'ServerDataBlockSender::SendDataBlock()' and 'ClientDataBlockReceiver::AcknowledgeTransmission()'. NOTE that these are currently not tested, and also not in use! The code uses the version stored in the vftable which is what the engine itself provides. These have been implemented for reference only. If they need to be used, they need to be thoroughly tested first!
2024-02-21 01:16:10 +01:00
Kawe Mazidjatari
51ba4c9dff Tier1: fully implement bitbuf classes
All routines are now fully implemented. This was delayed on purpose as some bit buffer functions have changed due to the use of 64bit integers for sizes, and also the coord types. The porting of this has to be done carefully; all
reimplemented functions have been changed to feature 64bit integers (where necessary) for syze types, and all values in coordsize.h have been tweaked to reflect the changes in the R5 engine 1:1, allowing us to properly implement the coord bit buffer functions as well.
2024-02-21 01:10:14 +01:00
Kawe Mazidjatari
5b0b386ea7 Tier1: assert on LZSS window size being a power of 2 2024-02-19 21:24:01 +01:00
Kawe Mazidjatari
e72f13ee0f Tier1: optimize V_GetFileExtension()
If we are going to do a strlen to do a reverse check, then just check from the start and avoid another loop.
2024-02-19 21:24:01 +01:00
Kawe Mazidjatari
9937e0b26a Tier1: add CUtlHashTable 2024-02-19 21:24:01 +01:00
Kawe Mazidjatari
0fbbae3732 Engine: fix bug regarding packet compression override
Only encrypt and decrypt packets if the initial argument tells it to do so. Some connectionless packets aren't supposed to be encrypted
2024-02-19 21:24:01 +01:00
Kawe Mazidjatari
21a383a20e Tier1: light cleanup on low level types
CCommand: use 'V_isdigit()' since that is faster, we don't need it to be locale aware.
CMemoryStack: move 'highest' var to string format directly to avoid compile warnings (unused loval variables) on more recent visual studio compilers when compiling the DLL in cert mode.
2024-02-19 21:24:01 +01:00
Kawe Mazidjatari
155c221a70 Engine: rebuild CClientState::ProcessCreateStringTable()
Rebuild CClientState::ProcessCreateStringTable() and add notes for multiple 'potential' exploit vectors that are currently in place. Also add wrappers for compressing/decompressing net packets.
2024-02-19 21:24:00 +01:00
Kawe Mazidjatari
def6d4da68 Tier0: emit text to debug console if debugger is attached
Small quality of life improvement while debugging the application.
2024-02-19 21:24:00 +01:00
Kawe Mazidjatari
802e1f42eb Engine: partial rebuild for data block sender/receiver
This patch partially rebuilds the data block sender/receiver. The receiver leaks memory if the sender sends a bogus LZ4 packet, it would allocate memory to copy the encoded data into, from which it would decode it to the scratch buffer, but it would never deallocate this temporary buffer is the LZ4 decoder failed. This has been fixed. The second reason to rebuild these was to look into potential compression optimization. The data block rebuild now also features the latest LZ4 codec.
2024-02-19 21:24:00 +01:00