// Structure of Diablo character typedef struct_diablo_equip { long Id1; long Id2; long Id3; // Id3 : 0 => Books, Potions, Elixirs, Scrolls // 1 => Daggers, Swords, Falchions, Scimitars // 2 => Axes // 3 => Bows // 4 => Clubs, Flails, Maces // 5 => Shields // 6 => Cloaks, Capes, Armors // 7 => Caps, Skull Caps, Helms, Crowns // 8 => Mails // 9 => Plates // A => Staves // B => // C => Rings // D => Amulets // E => // F => long Unknown0C [11]; long Flag_Identified; // 0 => Not Identified/Normal Item, 1 => Identified unsigned char Item_Type;// 0 => Normal, 1 => Special (blue), 2 => Unique (Yellow) char Description[64];// Normal Name / Not Identified Name char Name[64];// Identified Name unsigned char Placement; // 1 => One Handed Weapon // 2 => Two Handed Weapon // 3 => Armor // 4 => Head Gear // 5 => Ring // 6 => Amulet // 7 => None unsigned char Classifies; // 1 => Damage (Weapons) // 1 => Armor Class (Armors) // 1 => None unsigned char UnknownBF; unsigned char Graphic;// see crymson list unsigned char UnknownC1; unsigned char UnknownC2; unsigned char UnknownC3; long UnknownPrice; long KnownPrice; long MinDamage; long MaxDamage; long ArmorClass; unsigned char UnknownD8; unsigned char MagigSpecialAbility; unsigned char CombatSpecialAbility; unsigned char AdditionalDamage; long MagicType; long SpellType; long StaffChargesNow; long StaffChargesMax; long DurabilityNow; //255 long DurabilityMax; //255 => Indestructible long DamageBonus; // * 100 => 0xC4 give 1% etc... long ToHitBonus; //% long ArmorBonus; long StrengthBonus; long MagicBonus; long DexterityBonus; long VitalityBonus; long ResistFire; //% 75% => Max long ResistLightning; //% long ResistMagic; //% long ManaBonus; // * 64 => 0x40 give 1 point etc... long LifeBonus; // * 64 long DamageBonus2; // No Blue HighLight long Abs_AngelBonus; // 1 => Spell Level + 1 // 2 => Spell Level + 2 etc... // 0xFFFFFFFF => -1 damage from ennemis // 0xFFFFFFFE => -2 damage from ennemis etc... long RadianceBonus; //10% => 1 give 10% radiance long Unknown130; long UniqueItemNumber; //0x00 => for Normal item or Butcher's Cleaver for special item // to 0x59 long Unknown138; long MinAddDamage; long MaxAddDamage; long Unknown144; long Unknown148; unsigned char ItemPrefix; unsigned char ItemSuffix; unsigned char Unknown14E; unsigned char Unknown14F; long Unknown150; long Unknown154; long Unknown158; long Unknown15C; char MinStrengthReq; char MinMagicReq; char MinDexterityReq; char MinVitalityReq; long ItemUseAllowed; // 0 => Use Not Allowed, 1 => Use Allowed long Unknown168; long Unknown16C; } DIABLO_EQUIPMENT; // 368 bytes (0x170) typedef struct _diablo_char { char iddumpfile[21]; unsigned char SpellLevels[70]; //0 to 35 only (offset 0) unsigned char SpellFlags[8]; // (offset 0x46) unsigned char Unknown4E[48]; // (offset 0x4E) char HeroName[32]; //16 bytes + NULL (offset 0x7E) char CharacterType; //0: Warrior (offset 0x7E + 0x20) //1: Rogue //2: Sorcerer //***** in reverse byte order ie High/xx/xx/Low *********************** //***** High order byte is don't care (0x03 if win against Diablo) long Strength[2]; // [0]: Now (offset 0x7E + 0x21) // [1]: Base (offset 0x7E + 0x25) long Magic[2]; // [0]: Now (offset 0x7E + 0x29) // [1]: Base (offset 0x7E + 0x2D) long Dexterity[2]; // [0]: Now (offset 0x7E + 0x31) // [1]: Base (offset 0x7E + 0x35) long Vitality[2]; // [0]: Now (offset 0x7E + 0x39) // [1]: Base (offset 0x7E + 0x3D) //********************************************************************* long LevelUp; //Points to Distribute (offset 0x7E + 0x44) long BaseDamage; // (offset 0x7E + 0x48) long Unknown4C; // (offset 0x7E + 0x4C) long BaseLifeNow; //Hit Points * 64 (offset 0x7E + 0x50) long BaseLifeMax; // (offset 0x7E + 0x54) long ModifiedLife[2]; //Hit Points * 64 // [0]: Now (offset 0x7E + 0x58) // [1]: Max (offset 0x7E + 0x5C) long Unknown60; // (offset 0x7E + 0x60) long BaseManaNow; //Mana * 64 (offset 0x7E + 0x64) long BaseManaMax; // (offset 0x7E + 0x68) long ModifiedMana[2]; //Mana * 64 // [0]: Now (offset 0x7E + 0x6C) // [1]: Max (offset 0x7E + 0x70) long Unknown74; // (offset 0x7E + 0x74) long CharacterLevel; //High order byte is don't care (!= 0 if win against Diablo) // (offset 0x7E + 0x78) long Experience; // (offset 0x7E + 0x7C) long Unknown80; // (offset 0x7E + 0x80) long NextLevelExpPoints; // (offset 0x7E + 0x84) char Unknown88; // (offset 0x7E + 0x88) char ResistMagic; // (offset 0x7E + 0x89) char ResistFire; // (offset 0x7E + 0x8A) char ResistLightning; // (offset 0x7E + 0x8B) long TotalGold; // (offset 0x7E + 0x8C) long Unknown90[107]; // (offset 0x7E + 0x90) EQUIPMENT Head; // (offset 0x7E + 0x23C) EQUIPMENT RightRing; // (offset 0x7E + 0x3AC) EQUIPMENT LeftRing; // (offset 0x7E + 0x51C) EQUIPMENT Neck; // (offset 0x7E + 0x68C) EQUIPMENT RightHand; // (offset 0x7E + 0x7FC) EQUIPMENT LeftHand; // (offset 0x7E + 0x96C) EQUIPMENT Body; // (offset 0x7E + 0xADC) EQUIPMENT Inventory[40]; // (offset 0x7E + 0xC4C) long InventoryCount; // (offset 0x7E + 0x45CC) unsigned char Location[40]; // (offset 0x7E + 0x45D0) EQUIPMENT Belt[8]; // (offset 0x7E + 0x45F8) char eos[1]; // (offset 0x7E + 0x5178) } DIABLO_CHAR;