Tom Clancy's Splinter Cell: Conviction

Tom Clancy's Splinter Cell: Conviction

Morten Sep 27, 2017 @ 11:18am
[TOOL, RELEASE] Co-op 30 fps unlocker, and why multiplayer is locked to 30 fps
Ubisoft has a habbit of getting around things the easiest and cheapest way possible. Unlike most other multiplayer games, where programmers need to send each player's position to every other player, send events for firing, where shots landed, etc,
Conviction (and a lot of other Ubisoft titles) use a step-by-step synchronization system.

Instead of sending positions and other event messages to other computers, this step-by-step system works by sending a player's input (keypresses, clicks, etc.) to other computers, and then the other computers simulate the received input on that player's character.

This results in multiplayer, with more or less no work involved from Ubisoft, but has the downside that it requires both players to have the exact same FPS. The bandwidth usage is also locked to the number of frames per second. It also has the very major downside of huge input delays.

This is why the FPS is locked to 30. 30 frames per second = 30 synchronizations per second.
30 was probably picked for consistency. The higher the FPS, the less likely it is, that everyone in the world can maintain the framerate.
That would mean, that if one player is able to consistently get 60+ fps, and another only 45 fps, then when the 60+ fps player
is playing with someone else who also achieves 60+ fps, he'd get 60 fps, while if he played with the 45 fps player, he'd also only get 45 fps,
since the framerate on both machines need to be the same.

This inconsistency in FPS could cause the player to think the game had issues only sometimes.

That's, of course, only speculation as to what their real reasons were.


In any case, playing this with a friend again, made me realize just how bad the input delay and FPS lock was. So I decided to do something about it.
So I've developed a tool that patches the synchronization system to provide a MUCH smoother multiplayer experience.

It's not quite ready for the public yet, as I need to do some more testing. I've only tested it with my friend, to whom I have less than 10 ms of ping to.
So I need to see how it works with someone to whom I have a lot higher ping (150+ ms).



So I'm looking for someone to test it with, who can maintain 60+ fps (preferably 100+), and who don't live too close to me.
I'm in Denmark, so someone from the east or west coast would be ideal.

You can contact me on my Steam profile, or on the Discord linked to on my profile.



EDIT: I've tested, and got all the info I need. Stay tuned.


Notes on anti-viruses
A couple of anti-viruses will throw a fit with this file. These are false positives based on heuristic analysis, the file is not malicious.

If you're paranoid, stick to 30fps.

https://www.virustotal.com/#/file/bdcf5af5a1299866a84e785f4e048e23328952f2146809ce556b5fc0dc37aabd/detection


RELEASES

v1.1
Changed the way I protect the tool. This brings the number of anti-viruses incorrectly flagging it, from 20 down to 7 (See link above).
http://treesoft.dk/misc/ConvictionCoopFpsUnlocker_1_1.zip

v1.0
Removed time limit.
No longer available. Download the latest version above.

v0.3 BETA
Changed the expiry date. This version will expire on May 1, 2018.
No longer available. Download the latest version above.

v0.2 BETA
Made some adjustments, and added an advanced mode. This version will expire on February 6, 2018.
No longer available. Download the latest version above.

v0.1 BETA
This is the first release for testing. This version will expire on November 26, 2017.
No longer available. Download the latest version above.
Last edited by Morten; Oct 18, 2018 @ 3:51pm
< >
Showing 1-15 of 140 comments
Glad to see you've had useful tests. My friend and I speedrun this game remotely and the fps cap has been a hurdle. I will be excited to see what you put out.

On a side note, the aspiring programmer in me is curious how you were able to reverse-engineer their syncronization system at all. Good stuff!
Morten Oct 5, 2017 @ 12:28am 
Originally posted by JOHNNY HAMCOBBLER:
My friend and I speedrun this game remotely
Remotely?

Originally posted by JOHNNY HAMCOBBLER:
On a side note, the aspiring programmer in me is curious how you were able to reverse-engineer their syncronization system at all. Good stuff!

Well, I didn't have to reverse the whole thing, just some configurations.


Here's a small proof of concept: https://www.youtube.com/watch?v=LseZZzdtthE
Last edited by Morten; Oct 5, 2017 @ 12:28am
As in we are not local. I play halfway across the country from him. We use Tunngle, and have made improvements to the lag by toying with maxfps values (per this post: https://steamcommunity.com/app/33220/discussions/0/846964801607846376/ ) but I am very interested in your work on this.

At its worst, the game definitely feels like it's running two simulations with the same input (like you were saying) and catching up later. Most of the time when this is noticeable it is because a guard suddenly grabs one of us from 10 feet away. I figure when one of us is like "why did I get grabbed" it happened on the other person's game and resynched.

But that video is a cool proof of concept! Excited to see more when you have it.
Morten Oct 5, 2017 @ 9:10am 
Originally posted by JOHNNY HAMCOBBLER:
As in we are not local. I play halfway across the country from him. We use Tunngle, and have made improvements to the lag by toying with maxfps values (per this post: https://steamcommunity.com/app/33220/discussions/0/846964801607846376/ ) but I am very interested in your work on this.

At its worst, the game definitely feels like it's running two simulations with the same input (like you were saying) and catching up later. Most of the time when this is noticeable it is because a guard suddenly grabs one of us from 10 feet away. I figure when one of us is like "why did I get grabbed" it happened on the other person's game and resynched.

But that video is a cool proof of concept! Excited to see more when you have it.

Can you tell me the ping you get to your friend?
Uncertain. I don't remember the last time we measured it, as we have had it mostly working for a while. We are talking a distance of New York to Michigan, but I don't have any actual data on hand.
Morten Oct 6, 2017 @ 9:13am 
Originally posted by JOHNNY HAMCOBBLER:
Uncertain. I don't remember the last time we measured it, as we have had it mostly working for a while. We are talking a distance of New York to Michigan, but I don't have any actual data on hand.

What ping do you get to a test server near him? http://beta.speedtest.net
JOHNNY HAMCOBBLER Oct 10, 2017 @ 6:35pm 
Sorry, I was away from home a few days. Getting a ping of 51 ms to a server near him.
Morten Oct 11, 2017 @ 1:01am 
Originally posted by JOHNNY HAMCOBBLER:
Sorry, I was away from home a few days. Getting a ping of 51 ms to a server near him.

That'll give you a pretty good experience compared to default.
JOHNNY HAMCOBBLER Oct 11, 2017 @ 8:27am 
Yeah it has been pretty smooth the last few months. Could always be better, but we managed some good runs on it nonetheless.

So what exactly does your tool do? Intercept packets and abstract a new sync system? Are you calling new code into the game itself? Or just reading memory on one machine and writing it on the other? I am fascinated by this.
Morten Oct 11, 2017 @ 2:04pm 
Originally posted by JOHNNY HAMCOBBLER:
Yeah it has been pretty smooth the last few months. Could always be better, but we managed some good runs on it nonetheless.

So what exactly does your tool do? Intercept packets and abstract a new sync system? Are you calling new code into the game itself? Or just reading memory on one machine and writing it on the other? I am fascinated by this.

Neither. It is simply alters configuration. The system supports it already.
Last edited by Morten; Oct 11, 2017 @ 2:07pm
JOHNNY HAMCOBBLER Oct 11, 2017 @ 3:06pm 
Ah ok. Neat. Well I will stay tuned then.
AllegedlyLinux Oct 27, 2017 @ 1:58pm 
Originally posted by Morten:
So I'm looking for someone to test it with, who can maintain 60+ fps (preferably 100+), and who don't live too close to me.
I'm in Denmark, so someone from the east or west coast would be ideal.

Canadian here with a very good gaming PC. GTX 1060 should give me 60 fps. do you need anymore testing for this?
LuisNTonio Oct 27, 2017 @ 9:25pm 
I would like to try your testings
Morten Nov 12, 2017 @ 5:35am 
I've released a version for testing. This version will expire in 2 weeks.
AllegedlyLinux Nov 25, 2017 @ 1:23am 
so i have done a bit of testing with a friend, whenever i move ANYTHING at all, we de-sync. i hope youre looking into a fix for this
< >
Showing 1-15 of 140 comments
Per page: 1530 50