Darksiders 2 Savegame [PC]

Want to beat the game a cheater? Figure out Savegame file formats here.
Post Reply
DemonS_HorizoN
ultra-n00b
Posts: 6
Joined: Thu May 13, 2004 7:21 pm
Been thanked: 1 time
Contact:

Darksiders 2 Savegame [PC]

Post by DemonS_HorizoN » Fri Oct 12, 2012 9:01 pm

I've done some research on Darksiders 2 DSAV-Files. Here is what I've found out so far:
4 Chars FF FF FF FF are often used as Seperators for different File-regions e.g. after Header-Region

Basic File-Structure:
[Header]
[Start Load Regions(MORE than ONE if DLC Campaign was played)]
[FF FF FF FF Seperator]
[Attribute Region]
[World States(Switches, Doors, Progress, Enemys)]
[unknown]
[ITEMS]
[unknown]
[Quests and Quest Targets]
[unknown(maybe statistics)]

Byte Order: Little Endian

Basic Datatypes:

Code: Select all

CHAR   8 bit Ascii
BYTE   int8
WORD  int16
DWORD int32

struct STRING {
  WORD StringLength ;
  char String[StringLength] ;
}

struct START_REGION
{
  STRING World ;
  STRING Level ;
  STRING Start ;
}

enum DIFFICULTY {
  EASY		= 0,
  NORMAL		= 1,
  APOCALYPTIC	= 2,
  NIGHTMARE	= 3
}

Header:

Code: Select all

char Signature[4] ; // DSAV
WORD Version;
BYTE SignaturInformation[4] ;
DIFFICULTY Difficulty ;
BYTE NewGamePlus;
BYTE unknown ;
BYTE IsNullAtNewGameAfterDieingInNightmare ;
BYTE unknown ;
DWORD TimePlayedSeconds ;
/* 2 unknown DWORDs */
DWORD unknown[2] ;
DWORD CurentExperiencePoints ;
DWORD NextLevelExpererienceNeeded ;
DWORD LevelOfDeath ;
/* 8 unknown DWORDs */
DWORD unknown[8] ;
Start Load Region:

Code: Select all

START_REGION StartRegions[1] ;
WORD StartLoadRegionLength ;
char StartLoadRegion[StartLoadRegionLength] ; 
Seperator: 4 times 0xFF

Attribute Region:

Code: Select all

WORD unknown ;
DWORD GILD ;
DWORD boatmanCoins ;
DWORD CurrentHealth_No_Effect ;
DWORD unknown ;
DWORD unknown ;
DWORD SkillPoints ;
DWORD unknown[3] ;
World States:

Code: Select all

STRING World01State ;
Quests:

Code: Select all

STRING QuestName ;
DWORD NumberOfQuestTargets ;
struct QuestTarget{
  STRING QuestTargetName ;
  BYTE QuestTargetStateUnknown ; // seems to be always 01 (maybe has to be done)
  BYTE QuestTargetStateVisible ; // 00 or 01
  BYTE QuestTargetStateActive ; // 01: active, 02: done
  // Hex: 01 01 02 - Objective done
}[NumberOfQuestTargets]

Post Reply