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 :)



Reply With Quote



