How The Diablo 3 Save File Works

Discussion in 'Diablo III' started by CKY, Nov 21, 2014.

  1. CKY

    CKY DIIIEdit Lead Dev XPG Developer
    20/47

    Okay, I'm going to try my best to explain to you how the save file works. I will break down each section and show the difference between what the game reads and how you think the game should read it.


    The whole save file is what the game is expecting to read. If you open a save file in messaging environment, you will see how the game reads the file...

    version: 903
    digest {
    version: 903
    hero_id {
    id_high: 4420622837916500727
    id_low: 12277622428419139937
    }
    hero_name: "Sif"
    gbid_class: 4041749
    level: 60
    player_flags: 503316483
    visual_equipment {
    visual_item {
    gbid: 1565456763
    dye_type: 5
    }
    visual_item {
    gbid: 463475741
    }
    visual_item {
    gbid: 2140882333
    dye_type: 21
    }
    visual_item {
    gbid: -1533912121
    dye_type: 21
    }
    visual_item {
    gbid: 176323551
    dye_type: 6
    }
    visual_item {
    gbid: 1065040961
    dye_type: 6
    }
    visual_item {
    gbid: 365492432
    dye_type: 21
    }
    visual_item {
    gbid: -1512729956
    dye_type: 21
    }
    }
    quest_history {
    sno_quest: 87700
    difficulty: 0
    }
    quest_history {
    sno_quest: 72095
    difficulty: 0
    }
    quest_history {
    sno_quest: 72221
    difficulty: 0
    }
    quest_history {
    sno_quest: 72061
    difficulty: 0
    }
    quest_history {
    sno_quest: 117779
    difficulty: 0
    }
    quest_history {
    sno_quest: 72738
    difficulty: 0
    }
    quest_history {
    sno_quest: 73236
    difficulty: 0
    }
    quest_history {
    sno_quest: 72546
    difficulty: 0
    }
    quest_history {
    sno_quest: 72801
    difficulty: 0
    }
    quest_history {
    sno_quest: 136656
    difficulty: 0
    }
    quest_history {
    sno_quest: 80322
    difficulty: 0
    }
    quest_history {
    sno_quest: 93396
    difficulty: 0
    }
    quest_history {
    sno_quest: 74128
    difficulty: 0
    }
    quest_history {
    sno_quest: 57331
    difficulty: 0
    }
    quest_history {
    sno_quest: 78264
    difficulty: 0
    }
    quest_history {
    sno_quest: 78266
    difficulty: 0
    }
    quest_history {
    sno_quest: 57335
    difficulty: 0
    }
    quest_history {
    sno_quest: 57337
    difficulty: 0
    }
    quest_history {
    sno_quest: 121792
    difficulty: 0
    }
    quest_history {
    sno_quest: 57339
    difficulty: 0
    }
    quest_history {
    sno_quest: 93595
    difficulty: 0
    }
    quest_history {
    sno_quest: 93684
    difficulty: 0
    }
    quest_history {
    sno_quest: 93697
    difficulty: 0
    }
    quest_history {
    sno_quest: 203595
    difficulty: 0
    }
    quest_history {
    sno_quest: 101756
    difficulty: 0
    }
    quest_history {
    sno_quest: 101750
    difficulty: 0
    }
    quest_history {
    sno_quest: 101758
    difficulty: 0
    }
    quest_history {
    sno_quest: 112498
    difficulty: 0
    }
    quest_history {
    sno_quest: 113910
    difficulty: 0
    }
    quest_history {
    sno_quest: 114795
    difficulty: 0
    }
    quest_history {
    sno_quest: 114901
    difficulty: 0
    }
    quest_history {
    sno_quest: 87700
    difficulty: 1
    highest_played_quest_step: -1
    }
    quest_history {
    sno_quest: 93595
    difficulty: 1
    }
    quest_history {
    sno_quest: 93684
    difficulty: 1
    }
    quest_history {
    sno_quest: 93697
    difficulty: 1
    }
    quest_history {
    sno_quest: 203595
    difficulty: 1
    }
    quest_history {
    sno_quest: 101750
    difficulty: 1
    }
    quest_history {
    sno_quest: 101758
    difficulty: 1
    }
    quest_history {
    sno_quest: 112498
    difficulty: 1
    }
    quest_history {
    sno_quest: 113910
    difficulty: 1
    }
    quest_history {
    sno_quest: 114795
    difficulty: 1
    }
    quest_history {
    sno_quest: 114901
    difficulty: 1
    }
    quest_history {
    sno_quest: 101750
    difficulty: 2
    }
    quest_history {
    sno_quest: 101758
    difficulty: 2
    }
    quest_history {
    sno_quest: 112498
    difficulty: 2
    }
    quest_history {
    sno_quest: 113910
    difficulty: 2
    }
    quest_history {
    sno_quest: 114795
    difficulty: 2
    }
    quest_history {
    sno_quest: 114901
    difficulty: 2
    }
    quest_history {
    sno_quest: 87700
    difficulty: 3
    }
    quest_history {
    sno_quest: 93595
    difficulty: 3
    }
    quest_history {
    sno_quest: 93684
    difficulty: 3
    }
    quest_history {
    sno_quest: 93697
    difficulty: 3
    }
    quest_history {
    sno_quest: 72801
    difficulty: 1
    }
    quest_history {
    sno_quest: 136656
    difficulty: 1
    }
    quest_history {
    sno_quest: 80322
    difficulty: 1
    }
    quest_history {
    sno_quest: 93396
    difficulty: 1
    }
    quest_history {
    sno_quest: 74128
    difficulty: 1
    }
    quest_history {
    sno_quest: 57331
    difficulty: 1
    }
    quest_history {
    sno_quest: 78264
    difficulty: 1
    }
    quest_history {
    sno_quest: 78266
    difficulty: 1
    }
    quest_history {
    sno_quest: 57335
    difficulty: 1
    }
    quest_history {
    sno_quest: 57337
    difficulty: 1
    }
    quest_history {
    sno_quest: 121792
    difficulty: 1
    }
    quest_history {
    sno_quest: 57339
    difficulty: 1
    }
    quest_history {
    sno_quest: 101756
    difficulty: 1
    }
    quest_history {
    sno_quest: 93595
    difficulty: 2
    }
    quest_history {
    sno_quest: 93684
    difficulty: 2
    }
    quest_history {
    sno_quest: 93697
    difficulty: 2
    }
    quest_history {
    sno_quest: 203595
    difficulty: 2
    }
    quest_history {
    sno_quest: 101756
    difficulty: 2
    }
    quest_history {
    sno_quest: 57339
    difficulty: 3
    }
    quest_history {
    sno_quest: 117779
    difficulty: 3
    }
    quest_history {
    sno_quest: 72738
    difficulty: 3
    }
    quest_history {
    sno_quest: 114901
    difficulty: 3
    highest_played_quest_step: 17
    }
    quest_history {
    sno_quest: 74128
    difficulty: 2
    highest_played_quest_step: 54
    }
    quest_history {
    sno_quest: 72801
    difficulty: 2
    highest_played_quest_step: 39
    }
    quest_history {
    sno_quest: 57339
    difficulty: 2
    highest_played_quest_step: 27
    }
    quest_history {
    sno_quest: 72801
    difficulty: 3
    }
    quest_history {
    sno_quest: 101758
    difficulty: 3
    }
    quest_history {
    sno_quest: 112498
    difficulty: 3
    }
    quest_history {
    sno_quest: 113910
    difficulty: 3
    }
    quest_history {
    sno_quest: 114795
    difficulty: 3
    }
    quest_history {
    sno_quest: 72095
    difficulty: 3
    }
    quest_history {
    sno_quest: 72221
    difficulty: 3
    }
    quest_history {
    sno_quest: 72061
    difficulty: 3
    }
    quest_history {
    sno_quest: 73236
    difficulty: 3
    }
    quest_history {
    sno_quest: 72546
    difficulty: 3
    }
    quest_history {
    sno_quest: 136656
    difficulty: 3
    }
    quest_history {
    sno_quest: 80322
    difficulty: 3
    highest_played_quest_step: -1
    }
    quest_history {
    sno_quest: 101756
    difficulty: 3
    }
    quest_history {
    sno_quest: 203595
    difficulty: 3
    }
    quest_history {
    sno_quest: 101750
    difficulty: 3
    }
    quest_history {
    sno_quest: 57337
    difficulty: 3
    }
    quest_history {
    sno_quest: 121792
    difficulty: 3
    }
    quest_history {
    sno_quest: 78264
    difficulty: 3
    }
    quest_history {
    sno_quest: 78266
    difficulty: 3
    }
    quest_history {
    sno_quest: 57335
    difficulty: 3
    }
    quest_history {
    sno_quest: 136656
    difficulty: 2
    highest_played_quest_step: 1
    }
    quest_history {
    sno_quest: 72546
    difficulty: 1
    highest_played_quest_step: 17
    }
    last_played_act: 300
    highest_unlocked_act: 300
    last_played_difficulty: 2
    highest_unlocked_difficulty: 3
    last_played_quest: 114795
    last_played_quest_step: 16
    time_played: 359883
    highest_completed_difficulty: 3
    create_time: 1380418818
    last_played_time: 1384948852
    alt_level: 26
    pvp_rank: 1
    }

    Now, let's look at this without messaging in binary form.

    08 87 07 12 AB 08 08 87 07 12 15 08 F7 85 F8 9F CB A1 CD AC 3D 10 E1 D2 AA E2 C8 91 B8 B1 AA 01 1A 03 53 69 66 25 15 AC 3D 00 28 78 30 83 80 80 F0 01 3A 46 0A 07 0D 7B F9 4E 5D 10 0A 0A 05 0D 1D 14 A0 1B 0A 07 0D 9D 45 9B 7F 10 2A 0A 07 0D C7 5B 92 A4 10 2A 0A 07 0D DF 7B 82 0A 10 0C 0A 07 0D 41 3C 7B 3F 10 0C 0A 07 0D D0 F8 C8 15 10 2A 0A 07 0D 9C 92 D5 A5 10 2A 42 07 0D 94 56 01 00 10 00 42 07 0D 9F 19 01 00 10 00 42 07 0D 1D 1A 01 00 10 00 42 07 0D 7D 19 01 00 10 00 42 07 0D 13 CC 01 00 10 00 42 07 0D 22 1C 01 00 10 00 42 07 0D 14 1E 01 00 10 00 42 07 0D 62 1B 01 00 10 00 42 07 0D 61 1C 01 00 10 00 42 07 0D D0 15 02 00 10 00 42 07 0D C2 39 01 00 10 00 42 07 0D D4 6C 01 00 10 00 42 07 0D 90 21 01 00 10 00 42 07 0D F3 DF 00 00 10 00 42 07 0D B8 31 01 00 10 00 42 07 0D BA 31 01 00 10 00 42 07 0D F7 DF 00 00 10 00 42 07 0D F9 DF 00 00 10 00 42 07 0D C0 DB 01 00 10 00 42 07 0D FB DF 00 00 10 00 42 07 0D 9B 6D 01 00 10 00 42 07 0D F4 6D 01 00 10 00 42 07 0D 01 6E 01 00 10 00 42 07 0D 4B 1B 03 00 10 00 42 07 0D 7C 8D 01 00 10 00 42 07 0D 76 8D 01 00 10 00 42 07 0D 7E 8D 01 00 10 00 42 07 0D 72 B7 01 00 10 00 42 07 0D F6 BC 01 00 10 00 42 07 0D 6B C0 01 00 10 00 42 07 0D D5 C0 01 00 10 00 42 09 0D 94 56 01 00 10 02 18 01 42 07 0D 9B 6D 01 00 10 02 42 07 0D F4 6D 01 00 10 02 42 07 0D 01 6E 01 00 10 02 42 07 0D 4B 1B 03 00 10 02 42 07 0D 76 8D 01 00 10 02 42 07 0D 7E 8D 01 00 10 02 42 07 0D 72 B7 01 00 10 02 42 07 0D F6 BC 01 00 10 02 42 07 0D 6B C0 01 00 10 02 42 07 0D D5 C0 01 00 10 02 42 07 0D 76 8D 01 00 10 04 42 07 0D 7E 8D 01 00 10 04 42 07 0D 72 B7 01 00 10 04 42 07 0D F6 BC 01 00 10 04 42 07 0D 6B C0 01 00 10 04 42 07 0D D5 C0 01 00 10 04 42 07 0D 94 56 01 00 10 06 42 07 0D 9B 6D 01 00 10 06 42 07 0D F4 6D 01 00 10 06 42 07 0D 01 6E 01 00 10 06 42 07 0D 61 1C 01 00 10 02 42 07 0D D0 15 02 00 10 02 42 07 0D C2 39 01 00 10 02 42 07 0D D4 6C 01 00 10 02 42 07 0D 90 21 01 00 10 02 42 07 0D F3 DF 00 00 10 02 42 07 0D B8 31 01 00 10 02 42 07 0D BA 31 01 00 10 02 42 07 0D F7 DF 00 00 10 02 42 07 0D F9 DF 00 00 10 02 42 07 0D C0 DB 01 00 10 02 42 07 0D FB DF 00 00 10 02 42 07 0D 7C 8D 01 00 10 02 42 07 0D 9B 6D 01 00 10 04 42 07 0D F4 6D 01 00 10 04 42 07 0D 01 6E 01 00 10 04 42 07 0D 4B 1B 03 00 10 04 42 07 0D 7C 8D 01 00 10 04 42 07 0D FB DF 00 00 10 06 42 07 0D 13 CC 01 00 10 06 42 07 0D 22 1C 01 00 10 06 42 09 0D D5 C0 01 00 10 06 18 22 42 09 0D 90 21 01 00 10 04 18 6C 42 09 0D 61 1C 01 00 10 04 18 4E 42 09 0D FB DF 00 00 10 04 18 36 42 07 0D 61 1C 01 00 10 06 42 07 0D 7E 8D 01 00 10 06 42 07 0D 72 B7 01 00 10 06 42 07 0D F6 BC 01 00 10 06 42 07 0D 6B C0 01 00 10 06 42 07 0D 9F 19 01 00 10 06 42 07 0D 1D 1A 01 00 10 06 42 07 0D 7D 19 01 00 10 06 42 07 0D 14 1E 01 00 10 06 42 07 0D 62 1B 01 00 10 06 42 07 0D D0 15 02 00 10 06 42 09 0D C2 39 01 00 10 06 18 01 42 07 0D 7C 8D 01 00 10 06 42 07 0D 4B 1B 03 00 10 06 42 07 0D 76 8D 01 00 10 06 42 07 0D F9 DF 00 00 10 06 42 07 0D C0 DB 01 00 10 06 42 07 0D B8 31 01 00 10 06 42 07 0D BA 31 01 00 10 06 42 07 0D F7 DF 00 00 10 06 42 09 0D D0 15 02 00 10 04 18 02 42 09 0D 62 1B 01 00 10 02 18 22 48 D8 04 50 D8 04 58 04 60 06 6D 6B C0 01 00 70 20 78 CB FB 15 80 01 06 88 01 82 8A 9E 92 05 90 01 F4 C8 B2 94 05 A0 01 34 A8 01 02 1A F6 01

    Looks the exact same to me..
    Now, let's look at an item.. and this time break it down.

    items {
    id {
    id_high: 1
    id_low: 2015166548
    }
    hireling_class: 0
    item_slot: 272
    square_index: 0
    used_socket_count: 0
    generator {
    seed: 1311733795
    gb_handle {
    game_balance_type: 2
    gbid: 172016995
    }
    base_affixes: 555585138
    base_affixes: 555585138
    base_affixes: 555585138
    base_affixes: 555585138
    base_affixes: 1661455578
    base_affixes: 555585138
    flags: 13
    durability: 0
    stack_size: 420420254
    }
    }

    In binary form.

    01 0A 08 08 01 10 D4 80 F4 C0 07 20 00 28 A0 04 30 00 38 00 42 B9 01 08 A3 F0 BD F1 04 12 07 08 04 15 63 C5 40 0A1D 72 8E 1D 21 1D 72 8E 1D 21 1D 72 8E 1D 21 1D 72 8E 1D 21 1D DA CC 07 63 1D 72 8E 1D 21 30 0D 38 00 40 9E B5 BC C8 01 0A

    Let's look at the base affix. What is the groups of a base affix? It tells the game to use this stat with this range. Let's say I want 2000000 damage on a sword, so I change the first base affix to 2000000. Let's see what happens...

    Let's change that to hex 00030D40
    01 0A 08 08 01 10 D4 80 F4 C0 07 20 00 28 A0 04 30 00 38 00 42 B9 01 08 A3 F0 BD F1 04 12 07 08 04 15 63 C5 40 0A 1D 00 03 0D 40 1D 72 8E 1D 21 1D 72 8E 1D 21 1D 72 8E 1D 21 1D 72 8E 1D 21 1D DA CC 07 63 1D 72 8E 1D 21 30 0D 38 00 40 9E B5 BC C8 01 0A
    The item didn't load in look at that. I want 2000000 damage, so how do I get it? Well the fact of the matter is that you cannot change the affix to just anything you want that the game cannot read.. It is expecting a number that is predefined in the affix table..

    Now, I still want 20000000 damage! How do I get it? You can't without rolling the seed field and change that random number after adding the highest affixes in the affix table...

    How do I roll the seed? Well you pick a random number between 0 to 4294967294.. Changing the seed will change the stat.
    How do i make it exceed the what a single stat can do? double up the stat.
    I want 127 stats that are all different? After the patch 2.0.5, 6 stats on the item is all you get.
     
  2. losparo

    losparo Moderator Staff Member XPG Moderator TeamXPG
    380/564

    well thought out and well written, great share mate ;)
     
  3. CKY

    CKY DIIIEdit Lead Dev XPG Developer
    35/47

    Thank you. There is a whole lot more, but without explaining bit for bit, byte for byte it's enough to see why it is what it is...
     
  4. ryohayabusa

    ryohayabusa Member
    25/47

    this is absolutely veeery well written and uber interesting!! thanks mate i really enjoyed reading it.
    as you stated, i'm aware there s a ton more to it, but it's an outstanding explanation nonetheless.
    cheers man
     
  5. LivinShadyLife

    LivinShadyLife Rookie
    20/47

    Great Review On the subjected
     

Share This Page