Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Special Force 2 server emulator

Initiate Mage
Joined
Apr 25, 2022
Messages
2
Reaction score
0
I've been working on a server emulator for SF2 for the past few weeks and made good progress, but I could use some people to help out with reversing.

So far I have:
  • 99% of the menu packets reversed. all of this is done in unreal scripts, so parsing them is just a matter of reading the decompiled scripts, I largely autogenerated this part
  • a skeleton server that sends hardcoded responses so you can login, join a channel/room and start a match
  • some basic udp parsing, setting up control channels, getting the map connection string and sending what packages to load
Next up would be the actor replication, which is where I currently am. As I understand it, the game sets up an actor channel for each actor and refers to the actors by single index across all loaded packages. So if the actor is in the first package, it will just send the index relative to that package. If the actor is in the second package, it will send the count of the actors in the first package + index in the second package. And since the packages should be in sync, this will give the client the correct actor.

The problem now is that I'm using the EU client for the game, which doesn't have a server anymore and all the packages are outdated. So if I want to continue using data from some of the live servers (JP, TW or KR), I need to parse the package files and the contained net indices.
I could just use the JP/TW/KR clients, but the executable keeps getting updated. So I would constantly need to unpack and reverse the bits I need, which just seems tedious.

So far I had some success using the UE Viewer source code to parse package files, but I don't understand enough of how the packaging and serialisation works to actual debug any issues that come up. And no matter what I do, the total amount of actors I come up with when I try to load the list of packages the server sends is always less than the actor indices. It could be that I'm misreading the actor indices too, so this is just a lovely situation :) I'm not entirely sure what kind of values to expect. E.g. what actor should be replicated first.

So I'm just looking for people here who might know a thing or two about UE3 or SF2 and want to help out. It's been hard finding resources about UE3 server emulation, I don't even know if something like this has been done before. Any pointers regarding packaging or the netcode would be greatly appreciated :)
 
cats addicted
Loyal Member
Joined
Apr 1, 2010
Messages
1,364
Reaction score
293
It's been hard finding resources about UE3 server emulation

Why not use the UE3 Decompiler and use the engine itself for your emulator ?

Maybe it helps you in any way :):

"Bensbach is an Unreal Engine 3 (UE3) compiler and decompiler made for games' mods creation. Decompiles from UE3 bytecode - to UCB source code. Compiles from UCB source code - to UE3 bytecode."
 
Upvote 0
Initiate Mage
Joined
Jul 7, 2023
Messages
1
Reaction score
0
I've been working on a server emulator for SF2 for the past few weeks and made good progress, but I could use some people to help out with reversing.

So far I have:
  • 99% of the menu packets reversed. all of this is done in unreal scripts, so parsing them is just a matter of reading the decompiled scripts, I largely autogenerated this part
  • a skeleton server that sends hardcoded responses so you can login, join a channel/room and start a match
  • some basic udp parsing, setting up control channels, getting the map connection string and sending what packages to load
Next up would be the actor replication, which is where I currently am. As I understand it, the game sets up an actor channel for each actor and refers to the actors by single index across all loaded packages. So if the actor is in the first package, it will just send the index relative to that package. If the actor is in the second package, it will send the count of the actors in the first package + index in the second package. And since the packages should be in sync, this will give the client the correct actor.

The problem now is that I'm using the EU client for the game, which doesn't have a server anymore and all the packages are outdated. So if I want to continue using data from some of the live servers (JP, TW or KR), I need to parse the package files and the contained net indices.
I could just use the JP/TW/KR clients, but the executable keeps getting updated. So I would constantly need to unpack and reverse the bits I need, which just seems tedious.

So far I had some success using the UE Viewer source code to parse package files, but I don't understand enough of how the packaging and serialisation works to actual debug any issues that come up. And no matter what I do, the total amount of actors I come up with when I try to load the list of packages the server sends is always less than the actor indices. It could be that I'm misreading the actor indices too, so this is just a lovely situation :) I'm not entirely sure what kind of values to expect. E.g. what actor should be replicated first.

So I'm just looking for people here who might know a thing or two about UE3 or SF2 and want to help out. It's been hard finding resources about UE3 server emulation, I don't even know if something like this has been done before. Any pointers regarding packaging or the netcode would be greatly appreciated :)
I played this game from the beginning and it disappeared from Europe. Can you help me create a server or send me files on how to do it? I really want to create a server in Europe for everyone. Please contact me on Discord with the nickname professor4953.
 
Upvote 0
Back
Top