Repository navigation
Add multiple crossover versions and add the ability to find and add multiple d3dmetal versions and allow to have multiple runners - #28
Conversation
8af107f to
81a0588
Compare
Two things kept a copy of CrossOver from being offered as a runner source: - Discovery only looked at bundles whose name starts with "CrossOver". Copies made by other tools are named whatever those tools name them, so a bundle is now recognised by what it carries (its CrossOver tree with lib/wine), which looksLikeCrossOver already checked. - "Already listed" compared builds, so picking a second copy of a build that was already listed was refused. It now compares bundles: only the same bundle is already listed, and another copy is added by hand, which also makes it the preferred source for that build.
A runner was identified only by its build, so a modified copy of CrossOver could not be installed next to the original. A copy can now name itself with a notproton-variant file in its CrossOver directory. It then becomes the runner <build>-<name>, with its own tools, and is checked and ntdll-patched like the build it copies. Without the file nothing changes.
Some games need a specific D3DMetal. A copy of CrossOver 26 can carry more than one toolkit (lib64/apple_gptk next to apple_gptk_3, apple_gptk_4, ...), but it only loads apple_gptk. Each other toolkit with a D3DMetal major that apple_gptk lacks is now offered as its own runner, <build>-d3dm<N>. Making that runner copies the toolkit over apple_gptk in the runner's copy; the source is not touched. CrossOver 27 already picks a D3DMetal per game with CX_GRAPHICS_BACKEND_VERSION, so only lib64 is looked at.
A rebuild ties the prefix to the chosen tool, but Steam keeps launching the game with the tool it has for it. When the two differ the next launch is refused, and the alert points back at the rebuild. After a rebuild the app reads the game's tool from Steam's config.vdf and, if it is another one, says which tool to choose in the game's Properties. The file is only read, never written.
|
Added Rebased on 1.1.3: modified copies and toolkit runners also work on top of a rebuilt CrossOver such as the Crossoverchina.com 26.3. |
The CrossOver row did not say which D3DMetal its runner gets, and the toolkit rows only said it by name. The row now shows the D3DMetal in lib64/apple_gptk, read from the runner's copy once it is set up, since the source can switch toolkits afterwards. Setting up a toolkit runner now checks that its copy runs the D3DMetal in its name, and stops with a reinstall hint if it does not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A toolkit runner's tools said which D3DMetal they run and the runner next to them did not, so Steam's compatibility list showed "CrossOver 26.3" beside "CrossOver 26.3 · D3DMetal 3". Each tool now names the D3DMetal its runner's copy runs, read from lib64/apple_gptk in that copy. A toolkit runner already names it, so it is not repeated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
81a0588 to
1c5db53
Compare
|
This is being reviewed. I intend to merge it tonight/tomorrow. |
Nice let me know if you need anything |
It looks very good, just busy with reviewing other PRs and fixing unrelated bugs. This will get merged, I swear :) |
no issues, I have another project where I did some fixes to games, I took what met did for Spiderman 2 and I fixed some other games that only replace a internal dll So now I'm working on how make that app working into any way to play windows games. I maybe help you releasing a plugs directory for games fixes like patches or mods, we can discuss later that too |
I plan to introduce a system in the Compatibility tab for a user to select per-game fixes. I'd also like to do a 'database' system where the compatibility tab/Steam will be aware that a given game needs a per-game fix and will tell the user/expose a way to download it, but that's much more work. |
This lets NotProton use modified copies of supported CrossOver builds as separate runners alongside the stock one. It also adds runners for any extra D3DMetal toolkits those copies include. Stock installs work as before.
The changes are split into six self-contained commits:
Find CrossOver copies regardless of their name. Discovery previously only found bundles named “CrossOver…”. It now checks the bundle’s CrossOver directory structure, using the existing
looksLikeCrossOvercheck. You can also add multiple copies of the same build; only adding the exact same bundle twice is rejected.Give modified copies their own runners. A copy can provide a name through a
notproton-variantfile in its CrossOver directory. It then appears as<build>-<name>, with its own tools and runner directory. It goes through the same pinned-loader validation and receives the same ntdll hooks as the original build. Copies without the marker file behave as before.Expose the extra D3DMetal toolkits included in a copy. CrossOver 26 only loads
lib64/apple_gptk. If a sibling directory such asapple_gptk_3orapple_gptk_4contains a D3DMetal major version thatapple_gptkdoesn’t have, NotProton offers it as<build>-d3dm<N>. During setup, that toolkit is copied overapple_gptkinside the runner’s copy, leaving the source bundle untouched. CrossOver 27 selects D3DMetal per game throughCX_GRAPHICS_BACKEND_VERSION, so discovery only checkslib64.Explain what to select in Steam after rebuilding a game. Rebuilding ties the prefix to the selected tool, but Steam keeps its own compatibility-tool mapping. If the two didn’t match, the next launch was refused. After a rebuild, NotProton now reads the game’s selection from
config.vdfand tells you which tool to choose under Properties > Compatibility. It never writes to that file.Show the D3DMetal version a runner actually uses. Once a runner is set up, its row shows the version found in
apple_gptkinside the runner’s copy. If a toolkit runner’s actual major version doesn’t match its name, setup stops and asks you to reinstall it.Name the D3DMetal version on every tool. Toolkit runners already showed it in Steam’s compatibility list, but the runner next to them didn’t, so “CrossOver 26.3” appeared beside “CrossOver 26.3 · D3DMetal 3”. Every tool now shows the version its runner’s copy uses; toolkit runners don’t repeat it.
Tested on macOS 27.0.1 with an M4 Max:
apple_gptk_4. A modified 26.3 copy containing D3DMetal 3.0 and 4.0b2 lists its own runner plus a D3DMetal 3 one. CrossOver 27 Preview produces no extra rows.make,swift testran 491 tests and all of them pass, and each commit builds on its own. The changes are limited to the app; the dylib and run script are untouched.I’m happy to split this up or adjust the approach. In particular, the
notproton-variantfilename andd3dm<N>suffix are open to discussion; they were simply the most straightforward choices.