Watch_Dogs Modding/Toolkit WIP

Posted on Jun 7, 2014

Watch Dogs Research

So not to long ago watch_dogs came out, the game runs pretty poorly due to its unoptimized nature and Ubisoft did state they would release a patch for optimization however I’ve already beaten the game so I don’t think It really concerns me anymore. That being said I’d recommend it, has a nice single-player campaign.

So lets talk about watch_dogs modding/reverse engineering, firstly to give a little back-story info the engine it runs on titled the Disrupt engine it’s an engine derived and created from the previous Dunia Engine (Farcry3) by Ubisoft Montreal. Some aspects are the same as Dunia which helped in reversing the game assets however there are significant changes. Dunia was reversed originaly by others, one person I know who has worked on this engine’s structure or I should say has worked on reversing Farcry3 is Rick. You can find his research and info here and on Xentax. Watch_Dogs uses a sort of bizarre way of storing its assets, they are stored inside these .fat/dat archives heres what the structure looks like.

//--------------------------------------
// File: common.fat
// Author: EKey/Cra0kalo
// Revision: 1
// Purpose: WatchDogs
// ByteFormat - Little Endian
//--------------------------------------

struct
{
   DWORD   dwID; // 3TAF
   DWORD   dwVersion; // Always = 8
   DWORD   dwUnknown;
   DWORD   dwTotalFiles;
}FATHeader;

struct
{
   DWORD   dwHash;
   DWORD   dwSize;
   DWORD   dwZSize;
   DWORD   dwOffset;
}FATEntry;

At a first glance it looks pretty straight forward however the FATEntry structure needs to be modified a bit to work. Some pseudo code:

pEntry.dwSize := (pEntry.dwSize shr 3) and $1FFFFFFF;
pEntry.dwZSize := (pEntry.dwZSize shr 0) and $1FFFFFFF;
pEntry.dwOffset := (pEntry.dwOffset shl 3) or (pEntry.dwOffset shr 29) and 7;

Alright the rest is easy, the game uses Xmem compression which most xbox360 games use. Just download the library dll and use its export functions.

How about the geometry/textures ???!

Lets talk about textures first, very easy and I think the same as farcry3. They are stored in xbt files which are basically containers for DDS(DirectDraw Surface) textures.

Heres two quick tools I created to convert/view them

XBT2DDS.exe

Basically exports the dds inside the xbt container.

Download:

xbt2dds.zip Source Code

XBTView.exe

Extracts the dds to your temp folder and opens it with the Nvidia WTV, once the WTV window is closed the program disposes the extracted texture and WTV from temp.

Download:

xbtview.zip

As for geometry I’ll talk about it in another post heres a video to tease you for now 😀: