Makai Senki Disgaea 2/Save Hacking

From Akurasu Wiki
Jump to navigationJump to search
Notes:
  • I'm going to do this as simple as possible right now. I'm just going to start with my Data Structures for Hex Workshop and explain where things are located.
  • There is a checksum in the save, however, you are able to edit some values without the game detecting the save as corrupt.
  • If anyone wants to contact me to talk about D2 Save Hacking my Email is DaichiAt.gifakurasu.net

-Daichi 20:06, 3 September 2006 (EDT)

Header

#include "standard-types.hsl"

struct timestamp
{
  ushort Hours;
  ubyte Minutes;
  ubyte Seconds;
};

struct header
{
  ubyte unknown[8]; //checksum?
  struct timestamp Timestamp;
  ubyte unknown;
  char Name[31]; // US save file
  //char Name[19]; // JPN Save file
  ushort Level;
  ushort unknown; //Nothing?
  ushort Chapter;
};

Header location: 0x00000000

Items

struct innocent
{
  ushort Level;
  ushort Unknown;
  ushort JobID;
  ushort NameID;
};

struct s //Stat Attributes
{
  long HP;
  long SP;
  long Atk;
  long Def;
  long Int;
  long Spd;
  long Hit;
  long Res;
};

struct item
{
  struct innocent Innocents[10];
  struct s Stats;
  struct s Base_Stats;
  short TypeID;
  short Level;
  short Unknown[11];
  ubyte Rarity;
  short Unknown;
  BYTE Population;
  BYTE Unknown[27];
  char Name[40]; // US Save file
  //char Name[16]; // Japanese Save file
  char Unknown[31];
};

struct Storage //Item Bag & Warehouse
{
  struct item Item_Bag[24];
  struct item Warehouse1[128];
  struct item Warehouse2[128];
  struct item Warehouse3[128];
  struct item Warehouse4[128];
};

Item Bag (24 Item): 0x00051B98 // US Save
Warehouse (512 Item): 0x00053518 // US Save
Storage: 0x00051B98 // US Save

//Item Bag (24 Item): 0x0004BBA8 // Japanese Save
//Warehouse (512 Item): 0x0004D2E8 // Japanese Save
//Storage: 0x0004BBA8 // Japanese Save

Character Inventory (4 Item): + 0x00000008 from Character Offset

Characters

struct resistances
{
  ushort Poison_Res;
  ushort Sleep_Res;
  ushort Deprave_Res;
  ushort Forget_Res;
  ushort Paralyze_Res;
};

struct Character
{
  uquad EXP;
  struct item Weapon;
  struct item Item1;
  struct item Item2;
  struct item Item3;
  char Name[41]; // US Save file
  char Class[61]; // US Save file
  //char Name[21]; // Japanese Save file
  //char Class[25]; // Japanese Save file
  ubyte Unknown[34];
  struct resistances Resistances;
  ubyte Unknown[114];
  ulong SkillEXP[96];
  ushort Skills[96];
  ubyte SkillLevel[96];
  ulong HP_current;
  ulong SP_current;
  struct s stats;
  long unknown_stats[8]; //Base stats?
  ubyte Unknown[32];
  ulong Mana;
  short Unknown[8];
  ubyte Unknown[9];
  ubyte Unknown[7];
  ubyte Unknown[128];
  ubyte Unknown[32];
};

Characters (? character): 0x00000BD8 // US Save File
//Characters (? character): 0x00000BC8 // Japanese Save File
Note: Character structure might start earlier, too much unknown data at the end of the struct right now.

Senators

struct senator
{
  ushort Level;
  ushort ID;
  ushort Attendence;
  ushort Killed;
  ubyte Unknown[3];
  ubyte Magic_Num;
  ubyte Unknown;
  ubyte Unknown; // Maybe Status related
  char Name[31]; // US Save
  //char Name[17]; // Japanese Save
  byte Attitude;
};

struct Senators
{
  struct senator Ghost_Sentaor[10];
  struct senator PetitOrc_Sentaor[10];
  struct senator WhiteDragon_Sentaor[10];
  struct senator Mothman_Sentaor[10];
  struct senator WoodGolem_Sentaor[10];
  struct senator Baciel_Sentaor[10];
  struct senator Legendary_Sentor[4];
};

Senators: 0x000497D8 // US Save
//Senators: 0x00044BC8 // Japanese Save