Re: Borderlands 2 Compression Toolkit
Not sure if this hepls but this is from WillowGame.xxx
it might give some sort of idea of savegame structure
Code:
class PlayerSaveGame extends Object
editinlinenew;
struct native SkillSaveGameData
{
var private SkillDefinition SkillDefinition;
var private int Grade;
var private int GradePoints;
var private int EquippedSlotIndex;
structdefaultproperties
{
SkillDefinition=none
Grade=0
GradePoints=0
EquippedSlotIndex=-1
}
};
struct native ResourceSaveGameData
{
var private ResourceDefinition ResourceDefinition;
var private ResourcePoolDefinition ResourcePoolDefinition;
var private float Amount;
var private int UpgradeLevel;
structdefaultproperties
{
ResourceDefinition=none
ResourcePoolDefinition=none
Amount=0.00
UpgradeLevel=0
}
};
struct native InventorySaveGameData
{
var private ItemDefinitionData DefinitionData;
var private int Quantity;
var private bool bEquipped;
var private Engine.WillowInventory.PlayerMark Mark;
structdefaultproperties
{
DefinitionData=(ItemDefinition=none,BalanceDefinition=none,ManufacturerDefinition=none,ManufacturerGradeIndex=0,AlphaItemPartDefinition=none,BetaItemPartDefinition=none,GammaItemPartDefinition=none,DeltaItemPartDefinition=none,EpsilonItemPartDefinition=none,ZetaItemPartDefinition=none,EtaItemPartDefinition=none,ThetaItemPartDefinition=none,MaterialItemPartDefinition=none,PrefixItemNamePartDefinition=none,TitleItemNamePartDefinition=none,GameStage=0,UniqueId=0)
Quantity=0
bEquipped=false
Mark=PlayerMark.PM_Standard
}
};
struct native UnloadableDlcItemSaveGameData
{
var private InventorySerialNumber SerialNumber;
var private int Quantity;
var private bool bEquipped;
var private Engine.WillowInventory.PlayerMark Mark;
structdefaultproperties
{
SerialNumber=(Buffer=0,Buffer[1]=0,Buffer[2]=0,Buffer[3]=0,Buffer[4]=0,Buffer[5]=0,Buffer[6]=0,Buffer[7]=0,Buffer[8]=0,Buffer[9]=0,Buffer[10]=0,Buffer[11]=0,Buffer[12]=0,Buffer[13]=0,Buffer[14]=0,Buffer[15]=0,Buffer[16]=0,Buffer[17]=0,Buffer[18]=0,Buffer[19]=0,Buffer[20]=0,Buffer[21]=0,Buffer[22]=0,Buffer[23]=0,Buffer[24]=0,Buffer[25]=0,Buffer[26]=0,Buffer[27]=0,Buffer[28]=0,Buffer[29]=0,Buffer[30]=0,Buffer[31]=0,Buffer[32]=0,Buffer[33]=0,Buffer[34]=0,Buffer[35]=0,Buffer[36]=0,Buffer[37]=0,Buffer[38]=0,Buffer[39]=0,State=SerialNumberState.SNS_Empty,RunningCounter=0,EncryptedLength=0)
Quantity=0
bEquipped=false
Mark=PlayerMark.PM_Trash
}
};
struct native WeaponSaveGameData
{
var private WeaponDefinitionData WeaponDefinitionData;
var private WillowDeclarations.EQuickWeaponSlot QuickSlot;
var private Engine.WillowInventory.PlayerMark Mark;
structdefaultproperties
{
WeaponDefinitionData=(WeaponTypeDefinition=none,BalanceDefinition=none,ManufacturerDefinition=none,ManufacturerGradeIndex=0,BodyPartDefinition=none,GripPartDefinition=none,BarrelPartDefinition=none,SightPartDefinition=none,StockPartDefinition=none,ElementalPartDefinition=none,Accessory1PartDefinition=none,Accessory2PartDefinition=none,MaterialPartDefinition=none,PrefixPartDefinition=none,TitlePartDefinition=none,GameStage=0,UniqueId=0)
QuickSlot=EQuickWeaponSlot.QuickSelectNone
Mark=PlayerMark.PM_Standard
}
};
struct native UnloadableDlcWeaponSaveGameData
{
var private InventorySerialNumber SerialNumber;
var private WillowDeclarations.EQuickWeaponSlot QuickSlot;
var private Engine.WillowInventory.PlayerMark Mark;
structdefaultproperties
{
SerialNumber=(Buffer=0,Buffer[1]=0,Buffer[2]=0,Buffer[3]=0,Buffer[4]=0,Buffer[5]=0,Buffer[6]=0,Buffer[7]=0,Buffer[8]=0,Buffer[9]=0,Buffer[10]=0,Buffer[11]=0,Buffer[12]=0,Buffer[13]=0,Buffer[14]=0,Buffer[15]=0,Buffer[16]=0,Buffer[17]=0,Buffer[18]=0,Buffer[19]=0,Buffer[20]=0,Buffer[21]=0,Buffer[22]=0,Buffer[23]=0,Buffer[24]=0,Buffer[25]=0,Buffer[26]=0,Buffer[27]=0,Buffer[28]=0,Buffer[29]=0,Buffer[30]=0,Buffer[31]=0,Buffer[32]=0,Buffer[33]=0,Buffer[34]=0,Buffer[35]=0,Buffer[36]=0,Buffer[37]=0,Buffer[38]=0,Buffer[39]=0,State=SerialNumberState.SNS_Empty,RunningCounter=0,EncryptedLength=0)
QuickSlot=EQuickWeaponSlot.QuickSelectNone
Mark=PlayerMark.PM_Trash
}
};
struct native InventorySlotSaveGameData
{
var private int InventorySlotMax_Misc;
var private int WeaponReadyMax;
var private int NumQuickSlotsFlourished;
structdefaultproperties
{
InventorySlotMax_Misc=0
WeaponReadyMax=0
NumQuickSlotsFlourished=0
}
};
struct native MissionPlaythroughSaveGameData
{
var private int PlayThroughNumber;
var init private array<init private MissionStatusPlayerData> MissionData;
var init private array<init private UnloadableDlcMissionStatusData> UnloadableDlcMissionData;
var init private array<init private PendingMissionRewardData> PendingMissionRewards;
var init private array<init private UnloadableDlcPendingRewardData> UnloadableDlcPendingMissionRewards;
var init private string ActiveMission;
var init private array<init private MissionDefinition> FilteredMissions;
structdefaultproperties
{
PlayThroughNumber=0
MissionData=none
UnloadableDlcMissionData=none
PendingMissionRewards=none
UnloadableDlcPendingMissionRewards=none
ActiveMission=""
FilteredMissions=none
}
};
struct native UnloadableDlcEchoCallData
{
var init private string CallDefName;
var private int DlcPackageId;
structdefaultproperties
{
CallDefName=""
DlcPackageId=0
}
};
struct native PlayerUIPreferences
{
var private string CharacterName;
var private Color PrimaryColor;
var private Color SecondaryColor;
var private Color TertiaryColor;
structdefaultproperties
{
CharacterName=""
PrimaryColor=(R=255,G=255,B=255,A=255)
SecondaryColor=(R=255,G=255,B=255,A=255)
TertiaryColor=(R=255,G=255,B=255,A=255)
}
};
struct native RegionGameStageData
{
var private RegionDefinition RegionDef;
var private int GameStage;
var private int PlaythroughIdx;
structdefaultproperties
{
RegionDef=none
GameStage=0
PlaythroughIdx=0
}
};
struct native UnloadableDlcRegionGameStageData
{
var private string RegionDefName;
var private int GameStage;
var private int PlaythroughIdx;
var private int DlcPackageId;
structdefaultproperties
{
RegionDefName=""
GameStage=0
PlaythroughIdx=0
DlcPackageId=0
}
};
struct native WorldDiscoveryData
{
var private name DiscoveryName;
var private bool HasBeenUncovered;
structdefaultproperties
{
DiscoveryName=None
HasBeenUncovered=false
}
};
struct native ExpansionData
{
var private int Tag;
var private array<private byte> Data;
structdefaultproperties
{
Tag=0
Data=none
}
};
struct native UnloadableDlcChallengeData
{
var init private string ChallengeDefName;
var private int DlcPackageId;
structdefaultproperties
{
ChallengeDefName=""
DlcPackageId=0
}
};
struct native OneOffLevelChallengeData
{
var private byte PackageId;
var private byte ContentId;
var private array<private int> Completion;
structdefaultproperties
{
PackageId=0
ContentId=0
Completion=none
}
};
struct native BankSlot
{
var private InventorySerialNumber InventorySerialNumber;
structdefaultproperties
{
InventorySerialNumber=(Buffer=0,Buffer[1]=0,Buffer[2]=0,Buffer[3]=0,Buffer[4]=0,Buffer[5]=0,Buffer[6]=0,Buffer[7]=0,Buffer[8]=0,Buffer[9]=0,Buffer[10]=0,Buffer[11]=0,Buffer[12]=0,Buffer[13]=0,Buffer[14]=0,Buffer[15]=0,Buffer[16]=0,Buffer[17]=0,Buffer[18]=0,Buffer[19]=0,Buffer[20]=0,Buffer[21]=0,Buffer[22]=0,Buffer[23]=0,Buffer[24]=0,Buffer[25]=0,Buffer[26]=0,Buffer[27]=0,Buffer[28]=0,Buffer[29]=0,Buffer[30]=0,Buffer[31]=0,Buffer[32]=0,Buffer[33]=0,Buffer[34]=0,Buffer[35]=0,Buffer[36]=0,Buffer[37]=0,Buffer[38]=0,Buffer[39]=0,State=SerialNumberState.SNS_Empty,RunningCounter=0,EncryptedLength=0)
}
};
struct native LockoutData
{
var private LockoutDefinition LockoutDef;
var private int LockoutTime;
structdefaultproperties
{
LockoutDef=none
LockoutTime=0
}
};
struct native UnloadableDlcLockoutData
{
var private string LockoutDefName;
var private int LockoutTime;
var private int DlcPackageId;
structdefaultproperties
{
LockoutDefName=""
LockoutTime=0
DlcPackageId=0
}
};
var private PlayerUIPreferences UIPreferences;
var private PlayerClassDefinition PlayerClassDefinition;
var private int ExpLevel;
var private int ExpPoints;
var private int GeneralSkillPoints;
var private int SpecialistSkillPoints;
var private int CurrencyOnHand[13];
var private int PlaythroughsCompleted;
var private array<private SkillSaveGameData> SkillData;
var private array<private ResourceSaveGameData> ResourceData;
var private array<private InventorySaveGameData> ItemData;
var private array<private UnloadableDlcItemSaveGameData> UnloadableDlcItemData;
var private InventorySlotSaveGameData InventorySlotData;
var private array<private WeaponSaveGameData> WeaponData;
var private array<private UnloadableDlcWeaponSaveGameData> UnloadableDlcWeaponData;
var private array<private MissionPlaythroughSaveGameData> MissionPlaythroughs;
var private CustomizationDefinition AppliedCustomizations[5];
var private transient array<private byte> StatsData;
var private array<private name> VisitedTeleporters;
var private transient name LastVisitedTeleporter;
var private transient int SaveGameId;
var private transient int SaveVersion;
var private int PlotMissionNumber;
var private int ActiveMissionNumber;
var private bool bReceivedDefaultWeapon;
var private transient bool bIsBadassModeSaveGame;
var private bool bIsDlcPlayerClass;
var private transient bool bShowNewPlaythroughNotification;
var private transient bool bAwesomeSkillDisabled;
var private transient array<private int> UsedMarketingCodes;
var private transient array<private int> MarketingCodesNeedingNotification;
var private transient int TotalPlayTime;
var private transient string LastSavedDate;
var private array<private ExpansionData> DLCExpansionData;
var private array<private ChallengeDefinition> ChallengeList;
var private array<private UnloadableDlcChallengeData> UnloadableDlcChallengeList;
var private array<private RegionGameStageData> RegionGameStages;
var private transient array<private UnloadableDlcRegionGameStageData> UnloadableDlcRegionGameStages;
var private array<private WorldDiscoveryData> WorldDiscoveryList;
var private array<private int> BlackMarketUpgrades;
var private Guid SaveGuid;
var private transient array<private int> LevelChallengeUnlocks;
var private transient array<private OneOffLevelChallengeData> OneOffLevelChallengeCompletion;
var private transient int MaxBankSlots;
var private transient array<private BankSlot> BankSlots;
var private transient int NumChallengePrestiges;
var private transient array<private LockoutData> LockoutList;
var private transient array<private UnloadableDlcLockoutData> UnloadableDlcLockoutList;
var private int DLCPlayerClassPackageId;
var private array<private name> FullyExploredAreas;
var private transient int NumGoldenKeysNotified;
var private transient int LastPlaythroughNumber;
var private array<private TrainingMessageDefinition> QueuedTrainingMessages;
Re: Borderlands 2 Compression Toolkit
Re: Borderlands 2 Compression Toolkit
Hold on wait! So if this compression works, does it mean that we won't need a JTAG/RGH to modify Borderlands 2? Only Hex Editor? Because if its possible then this game is going to be ripped in to shreds :D
Re: Borderlands 2 Compression Toolkit
it can be decompressed but when we try to compress the save there is still some issues that need to be looked at just keep being patient an editor will soon follow
Re: Borderlands 2 Compression Toolkit
Guys, I know you can't compress yet anyways but I wanted to Decompress my save and it didn't work! This is frustrating, I have a picture to show what I did...
http://i1058.photobucket.com/albums/...ps2573e03e.png
Re: Borderlands 2 Compression Toolkit
Dont put it all on one line, thats what i did at first.
where there is brackets put the file path to what is in brackets
also make sure your savegame.sav is in the same folder as the .exe
Do:
cd c:\[folder containing borderlands2.exe]
e.g. cd c:\borderlands2
Press enter
then type
borderlands2.exe
Press enter
then type
borderlands2.exe -d savegame.sav save.decompress
press enter
Then it should work
Also fairchild i managed to find money in hxd (i understand it might be a dynamic offset, so it would be pointless posting), however when i edit (using hxd or the tool i quickly created), the save is corrupt in borderlands (not in xbox storage)
I tried generating SHA1 checksums, but that didnt make a difference. Is it a different checksum or is there something else?
Re: Borderlands 2 Compression Toolkit
Nice work fairchild hope you guys can knock out the compression now thanks for releasing this
Re: Borderlands 2 Compression Toolkit
Quote:
Originally Posted by
Vuze
Dont put it all on one line, thats what i did at first.
where there is brackets put the file path to what is in brackets
also make sure your savegame.sav is in the same folder as the .exe
Do:
cd c:\[folder containing borderlands2.exe]
e.g. cd c:\borderlands2
Press enter
then type
borderlands2.exe
Press enter
then type
borderlands2.exe -d savegame.sav save.decompress
press enter
Then it should work
Also fairchild i managed to find money in hxd (i understand it might be a dynamic offset, so it would be pointless posting), however when i edit (using hxd or the tool i quickly created), the save is corrupt in borderlands (not in xbox storage)
I tried generating SHA1 checksums, but that didnt make a difference. Is it a different checksum or is there something else?
THANKS MAN!