Skip to content

Conversation

@rfortier
Copy link
Contributor

@rfortier rfortier commented Nov 13, 2025

Update: TiltedCore v0.2.8 release has now been cut, so updated with that version.
PR, although complete barring more comments, will remain draft until prerequisites met:

  1. xmake_repo accepts the PR for the new version of TiltedCore.
  2. PRs to update other modules can then be submitted. TiltedHooks, TiltedReverse, and TiltedUI need a version pin update.
  3. Those PRs merged.
  4. Then, finally, this PR can be moved converted from Draft to Submitted and merged.

It was depending on figuring out where it was called from, but the logic was unreliable and there is no apparent way to fix it. Multiple attempts using more sophisticated FOSS stack crawlers all failed.

Fixes: now, it switches spoofing on just before loading SkyrimSE.exe (so the loaded DLLs see the path they expect).

The required companion fix in TIltedCore:TiltedPhoques::GetPath() persists the value found originally, so it doesn't change out from under with late callers. If your code has only late callers, just add a call before loading your game binary.

@rfortier rfortier force-pushed the fix/TiltedCore-TiltedPhoques-GetPath branch from 3e63256 to 6f4ab19 Compare November 21, 2025 22:18
LC.Version = QueryFileVersion(LC.exePath.c_str());
if (LC.Version.empty())
DIE_NOW(L"Failed to query game version");
LC.SetLoaded();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not after the if (!loader.Load(reinterpret_cast<uint8_t*>(content.data()))) call?

Copy link
Contributor Author

@rfortier rfortier Nov 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Slightly subtle. The goal is for the custom loader to load SkyrimSE.exe with spoofing enabled so any DLLs, in particular any preload DLLs like SSE EngineFixes.dll, experience what looks like SkyrimSE.exe is loading rather than experiencing SkyrimTogether.exe as loaded.

In particular, attempts to evaluate the directory of the running executable have to return the GamePath, not the SkyrimTogether.exe path.

So the switch must be thrown before loading the executable.

It was depending on figuring out where it was called from, but the logic was unreliable and there is no apparent way to fix it. Now, it switches spoofing on just before loading SkyrimSE.exe (so the loaded DLLs see the path they expect).

Requires a companion fix in TIltedCore:TiltedPhoques::GetPath() to persist the value found originally, so it doesn't change out from under with late callers. If you code has only late callers, just add a call before loading your game binary.
This meant also removing and extraneous TiltedCore pin in Code\Client\xmake.lua so it would inherit properly.

Fixing the several submodules will need to be their own PRs.
@rfortier rfortier force-pushed the fix/TiltedCore-TiltedPhoques-GetPath branch from 6f4ab19 to 735d2f5 Compare November 29, 2025 21:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants