The sizes were correct, but some of the field offsets weren't. CBaseCombatCharacter also contained fields specific to CPlayer, these have been moved to CPlayer. CBaseCombatCharacter now aligns on all classes deriving from it (CAI_BaseNPC, etc..). Classes now align properly in the disassembler. Also added more static assertions to prevent mistakes.
A mistake was made thinking this was part of the struct, but the real change is that m_queryFilter is static in r5 rather than a pointer. Changing this in Recast is a big change however; reverted changes made in 1255629fcf5a0b0ca2140309ca891c79e2f24738 and 9049e61d34cb3f52627b8ca10f1b7da21e147ad9.
pointers were also nulled during the memset after the move to the dtQueryStruct in commit 9049e61d34cb3f52627b8ca10f1b7da21e147ad9. Created dedicated 'Reset' method.
Make it more obvious what we are loading and what not (instead of checking if its client only, check if the server should load it since the client needs everything). This will also make sure that we never load other lumps even if they are present in the VPK or disk (they aren't for dedi builds).
The 2 fields are actually a CBitVec of 64 bits, which under the hood is split into 2 32bit unsigned integers. Type reversed from abstracted script functions 'NavMeshNode_GetBooleanData' and 'NavMeshNode_GetBooleanData'.
Reverse engineered as part of reverse engineering class 'CInput' which is for a future commit. Singleton pointer has been exposed to SDK through the pointer 'g_pInputStackSystem'.
During port to new performant JSON utils system in commit a5e05d3996ae95876fcac09affeaa043a768e749, the typo was made causing EULA not to display during tests. Fix field name typo.
Should be chunk buffer, not block buffer; chunk is a part of a file (who's buffer is getting allocated here), block refers to the entire VPK data file.
Now uses new JSON member lookup utilities implemented in commit f6e93ee457876ce869ce04067fe9344ff81083ca. All lookups (typically 3 per member) have been reduced to 1 by caching and reusing all value pointers or iterators. Also added error strings for 2 missing error cases in CPylon::GetEULA(), previously it would only set the error string during fetch error, but not when the data is missing or the schema is incorrect.
This will be used to improve performance on the current RapidJSON implementation in the SDK by cutting out a lot of common operations (such as checking if a var exists and then getting it by name, automatically creating 2 expensive lookups).
New images are remade with vector assets to improve the quality on all resolutions of the icons. Previous ones reportedly looked pixelated/distorted on lower DPI's. Icon's contain resolutions for all Windows editions starting from Windows 7 until Windows 11.
Some users complained about not being able to practically retrieve the installed netkey from the application's console as it bets buried under newer logs (and eventually cleared). This ConCommand allows the user to query the installed key without having to look through session logs.
Regression was caused in commit 3bb4ee625863c1dd503f07e0d480f4b3fd302c48. The new sound engine has breaking changes in its exports. Added shim layer to fix incompatibilities on the export 'MilesSampleSetSourceRaw'.
The new scripts now show a dedicated FPS limit option in the video settings, there is also a demand for having this cvar to persist its value. Marked as FCVAR_ARCHIVE so it gets saved to user profile settings.
The field 'void* unk0' is actually 'CNetMessage::m_pMessageHandler'. Since this type was taken from the IDB (in which this field is actually part of the netmessage implementation itself, since SVC messages use a different vtable and its the only way to have it show correctly in the output), an extra 8 bytes shift occurred rendering the system defective. Removed the field and the structure now matches that of the game executable.
Internal structure 'IntProjectData_t' has changed, padding size adjusted to accommodate changes.
Sound engine taken from retail build R5pc_r5-61_J318_CL651503_2020_10_14_18_51.
- Member CPlayer::m_lastUCmdSimulationRemainderTime is set and checked as an int in compiled code, change type from float to int.
- Simulation time was calculated incorrectly; brough expression 'CPlayer::m_lastUCmdSimulationRemainderTime * TICK_INTERVAL' into parentheses.
- Call to CPlayer::SetTotalExtraClientCmdTimeAttempted() took incorrect parameter value if flSimulationTime < 0.0f, it was supposed to be clamped to 0.0f, but instead, took the value of 'TIME_TO_TICKS( flTimeBase )'.
Unbind the game from the platform system, which is useful when developing for or debugging the game. This was supposed to make it into the SDK back in 2021, but wasn't due to the ability to spoof usernames. This is no longer possible on servers requiring authentication as the player's name is actually checked along with the Nucleus ID.
The flags were originally removed in commit 1bdc3b893e59f208dbeadd78b978096dcdd8e8f9, but this caused a regression in the dev menu. Restored flags (this also doesn't cause security issues as these commands are flagged devonly and cheats anyways).
The code originally fetches available and selected languages from Origin/EADesktop. The issue however is that its hard to change the language through the Origin/EADesktop app. The second issue is that the languages returned by Origin/EADesktop isn't necvesarily supported by our version of the game, for example, the original implementation of EbisuSDK_GetLanguage() also returns ar_SA, which is supported by the retail version of the game, but our version doesn't have the code to render this language. The code has been rewritten to allow the user to easily change the language using the command line '-language' parameter. The miles code has also been slightly adjusted to fetch the language directly from HEbisuSDK_GetLanguage() instead of miles_language since otherwise we would still error out in engine code as miles_language will be out of sync.