Browsing articles in "T4MP"
Feb 10, 2018
PermaNulled

Turok 4 Multiplayer – Part 1

To start this off I suppose I should explain what Turok 4 Multiplayer is, Put simply it’s actually a modification for the original Turok 4: Evolution game which was released on PC with no multiplayer support. It introduces Multiplayer Online via means of reverse engineering, programming, and injecting custom code into the game engine.

The idea of this series of posts will be to go over the various hurdles and challenges I went through and am still going through while creating this modification with the hope in mind that it will help others learn this stuff or even create a similar project of their own for their own game, the caveat here is that Turok 4: Evolution on PC did have some local multiplayer code available within the binary this was a huge step towards already having existing Multiplayer content usable and reduced the amount of work needed drastically.

If we look at other games such as Grand Theft Auto 3 or Grand Theft Auto: San Andres while there was no multiplayer support initially there was a wide open world and tons of NPCs to control or replace, that task (replacing NPCs with players, or dynamically spawning them) should have been relatively straight forward once some initial reversing was done… I’ll get into that later in the article/series though.

The idea when I obtained Turok 4 was the same; I had no idea I was walking into a game where Multiplayer modes would exist but there would be no way to control other players, disable the split-screen modes, among other things including various bugs and crashes to overcome.

So the question I had to ask myself before even having the game was where to start; I’ll get into that next but first I want to note that this series will assume the reader has some prior reverse engineering and game hacking knowledge as well as some understanding of the tools such as Cheat Engine/MHS, IDA Pro + Hex Rays Decompiler/OllyDBG, and ReClass.

The first part of this article won’t be super technical as it’s an introduction to the project and initial steps taken; if you’re looking for more technical information in terms of how classes were able to be discovered, player spawning functionality, or the networking put in place please tune-in at a later period this part of the series probably isn’t for you.

 

If you’re just into the source-code and not interested in the reading of how this came to be this is for you:

https://github.com/PermaNulled/T4MP

A video of the current progress of this project can be seen here:

 

As promised though, here’s a series part by part on how the Turok 4: Multiplayer modification took place what the code contains how it works and etc.

Continue reading »

Dec 13, 2015
PermaNulled

Turok 4: Evolution Multiplayer aka T4MP – PC

A long time ago a friend(DarkCoder) and I embarked on attempting to turn a (random) game into a multiplayer Online one, the original intention was to find a single player only game and determine how we could make it into a multiplayer online game instead.

While searching for a game to do this with we ran into Turok 4: Evolution and thus began T4MP remnants of such can still be seen here

Development didn’t get very far though we had a lot of the basic bugs fixed, we had most of the player data structures reverse engineered and the data was syncing between the games.

There were still a ton of issues for starters we had no idea how the hell to program a Multiplayer game at the time so most of our data sending was based on loops which constantly updated the information on the clients about the players.

Now that you know the history of the project I’m glad to say I’ve decided to start working on it again and I’ve made minor progress reverse engineering the event/cause/links/scripts inside of the ati files of the game and have got the game going back into the local multiplayer split-screen mode again.

I’ve had to start over completely as I’ve lost my original code.

But here’s a video demonstrating progress so far,

And here’s one showing issues with the depth buffering that I’m currently attempting to fix,