697 Commits

Author SHA1 Message Date
Kawe Mazidjatari
72289f9f33 CMDLCache::GetStudioHardware improvements
Slightly mapped out the structure more.
The function should now be compatible with earlier game dll's.
CStudioHWDataRef::SetFlags has to be rebuild as these are declared inline for earlier game dll's.
2022-05-06 00:51:49 +02:00
PixieCore
66d122e192 Start of CEngineClient implementation.
* Rebuild SetRestrictedServerCommand and SetRestrictedClientCommands
* Implemented new CMemory Function to walk through a VTable.
* pDetours->GetCon() gets called first now.
*
2022-05-06 00:34:46 +02:00
Kawe Mazidjatari
31c4f36aa3 CMDLCache::FindUncachedMDL cleanup 2022-05-05 20:36:13 +02:00
Kawe Mazidjatari
ec7956622b Make CMDLCache::FindMDL and CMDLCache::FindCachedMDL backwards compatible
Mapped out some of the structs
2022-05-05 17:53:05 +02:00
Kawe Mazidjatari
4d2c819544 Fix statement not getting compiled into the resulting binary 2022-05-05 14:53:48 +02:00
Kawe Mazidjatari
13ff58efcf Fix crash during dereference of 'PSRWLOCK' pointer
Studio hardware ref crash
2022-05-05 14:52:03 +02:00
Kawe Mazidjatari
24dae59cb8 Improve CMDLCache::FindMDL 2022-05-05 02:54:17 +02:00
Kawe Mazidjatari
03a0546140 Reset level name when game is shut down 2022-05-05 02:46:15 +02:00
Kawe Mazidjatari
f851c29498 Optimize some CHLClient functions away for dedicated 2022-05-04 21:10:46 +02:00
Kawe Mazidjatari
ad6d299fe4 Fix dedicated compiling 2022-05-04 20:45:10 +02:00
Kawe Mazidjatari
93f634022a Get all available maps from VPK instead
Before we used the stbsp's, but we don't need to copy these for each maps (we could load existing ones to get working texture streaming for maps that don't have this)
2022-05-04 17:36:23 +02:00
Kawe Mazidjatari
ad08685e9b Remove hardcoded map names
We are not hardcoding them
2022-05-04 12:55:00 +02:00
Kawe Mazidjatari
325fee107b Some mdlcache error handling improvements 2022-05-04 12:44:01 +02:00
Kawe Mazidjatari
aedc722a8f Update thirdpartylegalnotices.txt 2022-05-04 03:10:56 +02:00
Kawe Mazidjatari
748bbf7dd1 Cleanup 2022-05-04 02:25:48 +02:00
Kawe Mazidjatari
c3f31d694a Improved mod RPak loading between changelevel
Note: this does not work reliably still.

The only way we could make this work 100% reliable would be to fully rebuild '0x140341D40' in the SDK and load our pak files among with the pre-existing g_pakLoadApi->AsyncLoad() call in this function, as this will ensure everything will be ran synchronously.

The current approach by taking some JT fifolock wrapper will only work reliably between one level change, unsure why the second and up fail.
2022-05-04 02:25:27 +02:00
Kawe Mazidjatari
713bafc416 See description
Fixed 'MOD_PreloadPak()' being called recursively.
Fixed wrong datatype for pak handle.
Use new and better method of parsing JSON files.
Don't unload pak files if user issued 'ChangeLevel' to the same level.

NOTE: This is still not complete and currently under development.
2022-05-03 17:36:42 +02:00
Kawe Mazidjatari
10474d07d7 Update JSON lib to version 3.10.5 2022-05-03 17:28:17 +02:00
Kawe Mazidjatari
26af720f7d Fill out cull map 2022-05-03 13:17:42 +02:00
Kawe Mazidjatari
6786d800cd More cleanup and slight performance boost 2022-05-03 03:40:47 +02:00
Kawe Mazidjatari
6bc638b7ce Little cleanup 2022-05-03 03:17:45 +02:00
Kawe Mazidjatari
84181f931c Remove redundant check 2022-05-03 03:10:55 +02:00
Kawe Mazidjatari
1d48574731 Refactored BuildPropStaticFrustumCullMap (see description)
Redacted most code to only perform operation to obtain studiohdr and staticprop material (read only operation, function does not modify memory used by the original 'v_BuildPropStaticFrustumCullMap()' implementation!)

The new function checks if pointer is within bounds (must stay within .data memory), if this isn't the case, the 'batch' is considered corrupt and function call to 'v_BuildPropStaticFrustumCullMap' won't proceed (note that the loop checks all bodygroups/LOD's of a model, it is possible that one doesn't have corrupt data, but a model where only one of its submeshes culls properly in the level is too much effort to fix as this function is based of disassembled output of the engine implementation, which in it self, comes with its own limitations).

For a better implementation we should proceed fully rebuilding the function (see commented function body).
The current and only problem with this is that it doesn't compute cull data properly (see bsplib.cpp line '222').
2022-05-03 02:37:37 +02:00
PixieCore
6ea81db14f ClientClass implementation and CHLClient::GetAllClasses.
* ClientClass is currently included in dedicated so it compiles for now. Please remove it at a later point it should not be compiled into dedicated.
2022-05-02 23:53:26 +02:00
Kawe Mazidjatari
9178068c55 Added note to root cause of BSP problem 2022-05-02 14:53:48 +02:00
Kawe Mazidjatari
c02214748b Small bsplib improvement 2022-05-02 14:14:07 +02:00
Kawe Mazidjatari
8b4df33151 Use 'sqrtf' for computing fade distance
This has to be debugged still as the computed data does not match the one computed from the engine (this is the reason the larger maps show artifacts!)
2022-05-02 03:40:07 +02:00
Kawe Mazidjatari
7df48151d4 Some 'BuildPropStaticFrustumCullMap' improvements
Artifact problem for large maps is still not solved.
2022-05-02 03:13:39 +02:00
PixieCore
096ecdd333 IClientEntityList and CUtlDict.
* IClientEntityList is the full virtual function table.
* CUtlDict "implementation" is temporary.
2022-05-01 23:03:20 +02:00
Kawe Mazidjatari
a23c0b1ba9 Merge branch 'indev' of https://github.com/Mauler125/r5sdk into indev 2022-05-01 21:09:06 +02:00
Kawe Mazidjatari
8ad4350f9f Improved BuildPropStaticFrustumCullMap
* Fixed bug where the address of g_pStaticPropMgr wasn't properly dereferenced and passed to function via its reference (engine addr).
* Fixed dword dereference.

Problems: engine still culls models improperly.
2022-05-01 21:09:05 +02:00
PixieCore
83048e856c Removed debug code. 2022-05-01 20:58:24 +02:00
PixieCore
51ace16074 Fix CBaseClientState pointer vars. 2022-05-01 20:57:08 +02:00
Kawe Mazidjatari
4877666fe9 Update bsplib.cpp 2022-05-01 18:00:15 +02:00
Kawe Mazidjatari
f036f2cc44 BuildPropStaticFrustumCullMap optimizations 2022-05-01 17:59:56 +02:00
Kawe Mazidjatari
a479b4ac78 See description
Fixed rare crash in CMDLCache when buffer itteration returns invalid pointer (not null!) for handle.

Made all variables and functions used by BuildPropStaticFrustumCullMap searched dynamically (these should also work on s0, s1 and s2, they are compared but at the moment untested).

TODO: Fix deref crash properly (see bsplib.cpp l291).
2022-05-01 05:38:51 +02:00
Kawe Mazidjatari
f8f2ce6fa4 Initial working implementation of frustum building in SDK 2022-05-01 01:32:23 +02:00
Kawe Mazidjatari
4ead3ab1c9 Fix rare crash
This crash happens when the BSP is missing a lot of shaders and materials.
The call originates from 'R_DrawWorldMeshesDepthOnly()', but it is unclear which missing shader is causing the nullptr.  checking for a nullptr here should be sufficient to deal with this kind of missing shader
2022-04-30 20:35:08 +02:00
Kawe Mazidjatari
a4314b1c37 Add to other project 2022-04-30 19:05:56 +02:00
Kawe Mazidjatari
7dd107916c Fix rare crash
Rare crash when the sqvm tries to look for an animation sequence on a missing prop_dynamic model (mdl/error.rmdl doesn't support animations), its purely to indicate there is a problem).
2022-04-30 18:59:55 +02:00
Kawe Mazidjatari
97fb3fd8d4 Also lock the upgrade error behind already known bad model handles
Reduce console verbosity
2022-04-30 05:06:59 +02:00
Kawe Mazidjatari
a496254b93 Add mutex for CMDLCache methods
Als fall back to old GatherProps when at least one model is replaced with mdl/error.rmdl as the new GatherProps function does not support this yet.
2022-04-30 03:30:16 +02:00
PixieCore
73dd49e8d1 Start processing of unknown commands print.
* UserMessages need to be properly read like in sub_14028E890
* Started building bf_read
* Clean up will follow later.
2022-04-30 03:00:24 +02:00
Kawe Mazidjatari
1bf7b96641 Only print out missing models once
Don't print duplicated
2022-04-29 22:46:37 +02:00
Kawe Mazidjatari
7441bf156b Return proper studio hardware for mdl/error.rmdl
Now mdl/error.rmdl draws properly
2022-04-29 22:11:35 +02:00
Kawe Mazidjatari
192f9b4a9b Fixup pattern for P_DrawWorldMeshes 2022-04-29 22:07:30 +02:00
Kawe Mazidjatari
d569d58378 Made missing model error handling more robust 2022-04-29 21:05:26 +02:00
Kawe Mazidjatari
30ce3e949f Add ConVar's and hooks for disabling the rendering of world brush entity
This is mainly for development only and in the event so many models/textures/shaders are missing, the engine would effectively crash otherwise (if some of these aren't disabled).
2022-04-29 20:12:54 +02:00
Kawe Mazidjatari
827641b9b1 Early working implementation of the 'mdl/error.rmdl' fallback
Only works for prop_static (for the time being)
Only works for the S3 game_dll.

In order to get this to work: you must set 'old_gather_props' to nun-null and (for certain maps) perform the patch to prevent the frustum culling code to deref a bad pointer (see command 'opcodes test').
2022-04-29 18:25:54 +02:00
Kawe Mazidjatari
3cb4976c23 Start or 'mdl/error.rmdl' fallback implementation (see description)
In 'datacache/mdlcache.cpp' the function 'CMDLCache::FindMDL' attempts to find 'mdl/error.rmdl' and assigns the studiohdr and handle to the members of CMDLFallback.

In 'CMDLCache::FindUncachedMDL' we check if a model exists, if a model does not exist, we replace the studiohdr with the one of error.rmdl we stored in the CMDLFallback structure.

This does actually work (on the dedicated server it doesn't crash at all!), but on the client it crashes when trying to gather props (right before rendering), setting the ConVar* 'old_gather_props' does interesting things (check IDA around this ConVar*). setting this to 1 causes it to crash in another CMDLCache method when trying to deref something in the global cache pool.

This method is easy to rebuild. I will do this soon and attempt to return error.rmdl parts from here as well if results are null (this might actually just work).

Leaving 'old_gather_props' to 0 causes it to crash in the middle of the function which is supposed to gather the props the 'new' way.

The gather props functions are kind of daunting

NOTE: Currently only confirmed to work somewhat properly on the dedicated server for prop_static. prop_dynamic is unconfirmed. And (almost?) works on the client.
2022-04-29 05:30:06 +02:00