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
}
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] ;
Code: Select all
START_REGION StartRegions[1] ;
WORD StartLoadRegionLength ;
char StartLoadRegion[StartLoadRegionLength] ;
Attribute Region:
Code: Select all
WORD unknown ;
DWORD GILD ;
DWORD boatmanCoins ;
DWORD CurrentHealth_No_Effect ;
DWORD unknown ;
DWORD unknown ;
DWORD SkillPoints ;
DWORD unknown[3] ;
Code: Select all
STRING World01State ;
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]