Ododo / scc-lan-restore

Restores LAN mode on Splinter Cell Conviction (PC) after servers shutdown.
35 stars 0 forks source link

Fix for Windows 10 General Protection Fault #2

Closed MisterCalvin closed 4 months ago

MisterCalvin commented 4 months ago

I was testing this project using two VM's today, one Windows 11, one Windows 10, and was getting the General Protection Fault on only the Windows 10 host whenever I left a co-op match. It didn't happen on my Windows 11 VM at all, at which point I realized I had Virtual Audio Cable installed on the Windows 11 VM and not the Windows 10 VM. I installed it on the Windows 10 VM and the problem went away. If you want to test this and confirm it also works for you it may be helpful to include a section in the README.

Virtual Audio Cable

Great project, thanks for your work! I actually dockerized the Python app and modified Conviction_game.exe to replace gconnect.ubi.com with my own domain name pointing towards the scc-lan-restore container. I didn't want to potentially affect any other Ubisoft titles by editing my hosts file (I'm not sure if they use gconnect.ubi.com for any of their recent titles but wanted to be safe). If you or anyone is interested in doing this you can find gconnect.ubi.com in Conviction_game.exe at addresses 0x00D78270 and 0x00D78280.

I also stripped out the pydivert package, the header, and packet_hook function, opting to run just the MatchMakingConfig web server. If UDP port 46000 is open on the host the other player can connect without needing to divert any packets.

Ododo commented 4 months ago

I was testing this project using two VM's today, one Windows 11, one Windows 10, and was getting the General Protection Fault on only the Windows 10 host whenever I left a co-op match. It didn't happen on my Windows 11 VM at all, at which point I realized I had Virtual Audio Cable installed on the Windows 11 VM and not the Windows 10 VM. I installed it on the Windows 10 VM and the problem went away. If you want to test this and confirm it also works for you it may be helpful to include a section in the README.

Virtual Audio Cable

Thanks, i will add this to the list of possible fixes.

Great project, thanks for your work! I actually dockerized the Python app and modified Conviction_game.exe to replace gconnect.ubi.com with my own domain name pointing towards the scc-lan-restore container. I didn't want to potentially affect any other Ubisoft titles by editing my hosts file (I'm not sure if they use gconnect.ubi.com for any of their recent titles but wanted to be safe). If you or anyone is interested in doing this you can find gconnect.ubi.com in Conviction_game.exe at addresses 0x00D78270 and 0x00D78280.

Thank you. Yeah this is an good alternative. Only the offsets might depend on the game version you are using, stock or patched. In this repo i tried to avoid solution with patches as ppl could use this along side their own patches to the original binary without running into some issues.

I also stripped out the pydivert package, the header, and packet_hook function, opting to run just the MatchMakingConfig web server. If UDP port 46000 is open on the host the other player can connect without needing to divert any packets.

What do you mean by opening the port (firewall / router ?) Was it tested with your VM configuration. i'm not sure how it would work but anyway if it works for you great :)

MisterCalvin commented 4 months ago

I agree, your implementation is much more straight-forward and guaranteed to work. Mostly wanted to call out an alternative method in case anyone was interested.

What do you mean by opening the port (firewall / router ?) Was it tested with your VM configuration. i'm not sure how it would work but anyway if it works for you great :)

I only opened UDP port 46000 on the client VM's Windows Firewall. This was working pretty consistently when I posted this but I am now having issues with it (connecting to the host is pretty hit or miss). I haven't narrowed it down exactly but the most consistent way to connect with this method seems to be having both users enter the LAN section at the same time. If one user hosts a LAN server before the other user has booted the game they will get connection errors, but if they start a game and have the other user leave and enter their game it will usually connect. It's not consistent without rewriting the packets like you do in the repo, was just looking to see if I could serve this project up completely from a separate web host.

I'm going to close this as completed, thanks for adding a blurb about VAC in the README!