Pokémon ORAS Save File Structure: Difference between revisions

From ProjectPokemon Wiki
Jump to navigation Jump to search
m (add gardevoir)
No edit summary
Line 730: Line 730:
| 0x19-0x1F || Pokemon Bank signature? (always 48CA0A0002000000)
| 0x19-0x1F || Pokemon Bank signature? (always 48CA0A0002000000)
|}
|}
[[Category:Gen 6]]
[[Category:Save Data]]

Revision as of 00:28, 3 February 2017

OR/AS Save files are comprised of 4 sections, the latter two storing the contents of the two savegames.

The structure of the save is extremely similar to Pokemon X/Y's, with the majority of structural changes being the shifting of the positions of partitions.

The game alternates between the two game saves similar to Generations 3 & 4 and X/Y.

Save files are 0x100000 (1MB). The area between sections is either FF or 00, for Cartridges and Digital saves respectively.

Single Partition Save File

http://3dbrew.org/wiki/Savegames

Image Header (0x00000-0x00460)

Offset Length Hash Details Description
00000 0x10 0x0: Uses the AES Engine & KeyY AES MAC Header
00100 0x100 0x16C: (SHA256) 0x000-0x12C of active DIFI DISA
00200 0x12C 0x30C: (SHA256) 1st IVFC Hash copied to 0x200 zero array DIFI Blob 1
00330 0x12C 0x43C: (SHA256) 1st IVFC Hash copied to 0x200 zero array DIFI Blob 2

First Partition (0x01000-0x01107)

Offset Description
01000 DPFS Partition

Save File 1 (0x02000 - 0x75FFF)

(420 KB)

Offset Description
02000 IVFC Hash Region
03000 SAVE Header (0x3F0 medias, 0x200 length) = 0x7E000 total
03100 SAVE Data


ID Start Length CHK Description
0000 5400 000002C8 75E1A 05400 - Pokepuff Inventory (Index * 100ct)
05464 - u32 Received Counter
0001 5800 00000B90 75E22 05800 - Items Pocket
05E40 - Key Items Pocket
05FC0 - TM Pocket
06170- Medicine Pocket
06270 - Berry Pocket
0002 6400 0000002C 75E2A Select Bound Items
0003 6600 00000038 75E32 ????
0004 6800 00000150 75E3A Trainer Stat Tracking
0005 6A00 00000004 75E42 ????
0006 6C00 00000008 75E4A u32 Time Played + u32 Adventure Started
0007 6E00 000001C0 75E52 Wardrobe (Bitflags) & Saved Outfits (Index #s) - Unused in ORAS
0008 7000 000000BE 75E5A u16/u8 storage
0009 7200 00000024 75E62 FFFFFFFF
000A 7400 00002100 75E6A Overworld Data
0x108 per Overworld Entity
000B 9600 00000130 75E72 Trainer Information ($)
000C 9800 00000440 75E7A Box Names


[0x22] Box Name (* 31)
[0x01] Box Background *31
[0x03] Background Unlock Flags

000D 9E00 00000574 75E82 Battle Box
000E A400 00004E28 75E8A PSS Data - Friends
000F F400 00004E28 75E92 PSS Data - Acquaintances
0010 14400 00004E28 75E9A PSS Data - Passerby
0011 19400 00000170 75EA2 Trainer Card (ID/SID/OT/Greeting)
0012 19600 0000061C 75EAA Party Members
0013 19E00 00000504 75EB2 Constant & Event Flags


19E78 - Ash Counter
0x1A0FC-0x1A27B - Event Bitflags (0x180 * 8)

0014 1A400 000011CC 75EBA Pokedex & Encounter Count


0x1A400 - Constant? 0x2F120F17
0x1A004 - u32 counter (?)
0x1A408 - 0x60 Region 1 - Owned
0x1A468 - 0x60 Region 2 - Encountered Male
0x1A4C8 - 0x60 Region 3 - Encountered Female
0x1A528 - 0x60 Region 4 - Encountered Male *
0x1A588 - 0x60 Region 5 - Encountered Female *
0x1A5E8 - 0x60 Region 6 - Displayed Male
0x1A648 - 0x60 Region 7 - Displayed Female
0x1A6A8 - 0x60 Region 8 - Displayed Male *
0x1A708 - 0x60 Region 9 - Displayed Female *
0x1A768 - 0x26 Form Bitflag Region 1 - Encountered form
0x1A78E - 0x26 Form Bitflag Region 2 - Encountered form *
0x1A7B4 - 0x26 Form Bitflag Region 3 - Displayed form
0x1A7DA - 0x26 Form Bitflag Region 4 - Displayed form*
0x1A800 - 0x27C 7bit/entry flags (Language)
0x1AA7C - u32 ??? 0?
0x1AA80 - Spinda Spot Pattern (First EC encountered)
0x1AA86 - Encounter Counts

0015 1B600 00000644 75EC2 Sorted Variables
0016 1BE00 00000104 75ECA Fused Zekrom/Reshiram Storage
0017 1C000 00000004 75ED2 ????
0018 1C200 00000420 75EDA ????
0019 1C800 00000064 75EE2 O-Power Flags
001A 1CA00 000003F0 75EEA ????
001B 1CE00 0000070C 75EF2 User Metadata
001C 1D600 00000180 75EFA GTS Upload & Match Criteria
001D 1D800 00000004 75F02 87B1A23F const
001E 1DA00 0000000C 75F0A ????
001F 1DC00 00000048 75F12 Repel Info, (Swarm?) and other overworld info
0020 1DE00 00000054 75F1A ????
0021 1E000 00000644 75F22 WiFi Tournament Data
0022 1E800 000005C8 75F2A Live Tournament Data
0023 1EE00 000002F8 75F32 MAC Address & Network Connection Logging (0x98 per entry)
0024 1F200 00001B40 75F3A Hall of Fame Data (First Game Clear + 15 Latest)


0x48 per Pokemon Slot; capped with 4 bytes at end (total 0x1B4)
0x00 - Species
0x02 - Held Item
0x04 - Move 1
0x06 - Move 2
0x08 - Move 3
0x0A - Move 4
0x0C - Encryption Key
0x10 - TID
0x12 - SID
0x14 - [Nicknamed,1][Shiny,1][Level,7][Gender,2][Form,5] bits
0x16 - Unused
0x18 - Nickname (0x16) + 0x3F80 end
0x30 - Trainer Name (0x16) + 0x3F80 end

Last 4 bytes:
0x00 - # of Hall of Fame Victory
0x01 - [Unk,1][Day of Month,5][Month,4][Year,8] bits

0025 20E00 000001F4 75F42 Maison Data


205C0 - u16 Current Singles Streak
205C2 - u16 Current Super Singles Streak
205C4 - u16 Best Singles Streak
205C6 - u16 Best Super Singles Streak
205C8 - u16 Current Doubles Streak
205CA - u16 Current Super Doubles Streak
205CC - u16 Best Doubles Streak
205CE - u16 Best Super Doubles Streak
205D0 - u16 Current Triples Streak
205D2 - u16 Current Super Triples Streak
205D4 - u16 Best Triples Streak
205D6 - u16 Best Super Triples Streak
205D8 - u16 Current Rotation Streak
205DA - u16 Current Super Rotation Streak
205DC - u16 Best Rotation Streak
205DE - u16 Best Super Multi Streak
205E0 - u16 Current Multi Streak
205E2 - u16 Current Super Multi Streak
205E4 - u16 Best Multi Streaks
205E6 - u16 Best Super Multi Streak

0026 21000 000003E0 75F4A Daycare Data (Larger than XY)


u32 (Slot 1) Occupied Flag
u32 (Slot 1) Steps Taken Since Depositing1
xE8 (Slot 1) Box EK6 1
u32 (Slot 2) Occupied Flag
u32 (Slot 2) Steps Taken Since Depositing2
xE8 (Slot 2) Box EK6 2
u64 Flag (egg available)
u64 RNG Seed

0027 21400 00000216 75F52 Index Number Related Data
0028 21800 00000640 75F5A Berry Field Data (0x10 per tree, 100 trees)
0029 22000 00001A90 75F62 Wondercard Data
0x100 bitflag-card received storage
Wondercard slots (0x108 between)
002A 23C00 00000400 75F6A SUBE data (XY: Old Man) - purpose unknown.
002B 24000 00000618 75F72 Friend Safari Data
002C 24800 0000025C 75F7A PSS Data
24970 (0x20) - Pokemon Bank (application?) data
002D 24C00 00000834 75F82 PSS Friend Data [0x15]*100 entries
002E 25600 00000318 75F8A Super Training Data


24610 - Mission Best Times (seconds as 4 byte floats)*30
24788 - u32 Species That Scored Best Time*30
24908 - Bag Inventory (12 bags)

002F 25A00 000007D0 75F92 ????
0030 26200 00000C48 75F9A Pokemon Link Gifts
0x25E44 - u16 checksum (ccitt16, 0xFFFF initial) of 0x25400-0x25E43
0031 27000 00000078 75FA2 Index Number Related Data
0032 27200 00000200 75FAA PGL Promotion Gifts
0033 27400 00000C84 75FB2 ????
0034 28200 00000628 75FBA Data Block (Purpose Unknown)
u64 Length
byte[Length] data
0035 28A00 00000400 75FC2 Contest Data
0036 28E00 00007AD0 75FCA Secret Base (Favorites)
0037 30A00 000078B0 75FD2 Secret Base (Passerby) & Passerby Event Values
0038 38400 00034AD0 75FDA Box Data (31 Boxes, 30 Slots, 232 bytes each)
0039 6D000 0000E058 75FE2 Picture Data (JPEG Exif Ver 2.2)
---- 75E00 00000800 ----- Checksum Storage
[0x14] Header: u64 savetime1 & u64 savetime2 (First five bytes Anti-Savegame Restore Secure Value), u16 BEEF magic
[0x10] Checksum Entries: u32 len, u16 ID, u16 checksum (ccitt16, 0xFFFF initial)

Save File 2 (0x81000 - 0xF1FFF)

(420 KB)

Same as Game Save 1's offsets; add 0x7F000.

IVFC Hash Region

SHA256 Hash over a 0x1000 large block (4096 bytes).

Start End Hash Location
2020 203F 2000 - First Hash: Copied to 0x200 zero array.
2040 2FFF 2020 - Second Hash: Copied to 0x1000 zero array.
3000 3FFF 2040
4000 4FFF 2060
5000 5FFF 2080
6000 6FFF 20A0
7000 7FFF 20C0
8000 8FFF 20E0
9000 9FFF 2100
A000 AFFF 2120
B000 BFFF 2140
C000 CFFF 2160
D000 DFFF 2180
E000 EFFF 21A0
F000 FFFF 21C0
10000 10FFF 21E0
11000 11FFF 2200
12000 12FFF 2220
13000 13FFF 2240
14000 14FFF 2260
15000 15FFF 2280
16000 16FFF 22A0
17000 17FFF 22C0
18000 18FFF 22E0
19000 19FFF 2300
1A000 1AFFF 2320
1B000 1BFFF 2340
1C000 1CFFF 2360
1D000 1DFFF 2380
1E000 1EFFF 23A0
1F000 1FFFF 23C0
20000 20FFF 23E0
21000 21FFF 2400
22000 22FFF 2420
23000 23FFF 2440
24000 24FFF 2460
25000 25FFF 2480
26000 26FFF 24A0
27000 27FFF 24C0
28000 28FFF 24E0
29000 29FFF 2500
2A000 2AFFF 2520
2B000 2BFFF 2540
2C000 2CFFF 2560
2D000 2DFFF 2580
2E000 2EFFF 25A0
2F000 2FFFF 25C0
30000 30FFF 25E0
31000 31FFF 2600
32000 32FFF 2620
33000 33FFF 2640
34000 34FFF 2660
35000 35FFF 2680
36000 36FFF 26A0
37000 37FFF 26C0
38000 38FFF 26E0
39000 39FFF 2700
3A000 3AFFF 2720
3B000 3BFFF 2740
3C000 3CFFF 2760
3D000 3DFFF 2780
3E000 3EFFF 27A0
3F000 3FFFF 27C0
40000 40FFF 27E0
41000 41FFF 2800
42000 42FFF 2820
43000 43FFF 2840
44000 44FFF 2860
45000 45FFF 2880
46000 46FFF 28A0
47000 47FFF 28C0
48000 48FFF 28E0
49000 49FFF 2900
4A000 4AFFF 2920
4B000 4BFFF 2940
4C000 4CFFF 2960
4D000 4DFFF 2980
4E000 4EFFF 29A0
4F000 4FFFF 29C0
50000 50FFF 29E0
51000 51FFF 2A00
52000 52FFF 2A20
53000 53FFF 2A40
54000 54FFF 2A60
55000 55FFF 2A80
56000 56FFF 2AA0
57000 57FFF 2AC0
58000 58FFF 2AE0
59000 59FFF 2B00
5A000 5AFFF 2B20
5B000 5BFFF 2B40
5C000 5CFFF 2B60
5D000 5DFFF 2B80
5E000 5EFFF 2BA0
5F000 5FFFF 2BC0
60000 60FFF 2BE0
61000 61FFF 2C00
62000 62FFF 2C20
63000 63FFF 2C40
64000 64FFF 2C60
65000 65FFF 2C80
66000 66FFF 2CA0
67000 67FFF 2CC0
68000 68FFF 2CE0
69000 69FFF 2D00
6A000 6AFFF 2D20
6B000 6BFFF 2D40
6C000 6CFFF 2D60
6D000 6DFFF 2D80
6E000 6EFFF 2DA0
6F000 6FFFF 2DC0
70000 70FFF 2DE0
71000 71FFF 2E00
72000 72FFF 2E20
73000 73FFF 2E40
74000 74FFF 2E60
75000 75FFF 2E80

Pokepuff Index Numbers

Index Name
00 Empty
01 Sweet Basic Pokepuff
02 Mint Basic Pokepuff
03 Citrus Basic Pokepuff
04 Mocha Basic Pokepuff
05 Spice Basic Pokepuff
06 Sweet Frosted Pokepuff
07 Mint Frosted Pokepuff
08 Citrus Frosted Pokepuff
09 Mocha Frosted Pokepuff
0A Spice Frosted Pokepuff
0B Sweet Fancy Pokepuff
0C Mint Fancy Pokepuff
0D Citrus Fancy Pokepuff
0E Mocha Fancy Pokepuff
0F Spice Fancy Pokepuff
10 Sweet Deluxe Pokepuff
11 Mint Deluxe Pokepuff
12 Citrus Deluxe Pokepuff
13 Mocha Deluxe Pokepuff
14 Spice Deluxe Pokepuff
15 Wish Supreme Pokepuff
16 Honor Supreme Pokepuff
17 Spring Supreme Pokepuff
18 Summer Supreme Pokepuff
19 Fall Supreme Pokepuff
1A Winter Supreme Pokepuff

Super Training Bag Index Numbers

Index Name
00 Empty
01 HP Bag S
02 HP Bag M
03 HP Bag L
04 ATK Bag S
05 ATK Bag M
06 ATK Bag L
07 Def Bag S
08 Def Bag M
09 Def Bag L
0A Sp.A Bag S
0B Sp.A Bag M
0C Sp.A Bag L
0D Sp.D Bag S
0E Sp.D Bag M
0F Sp.D Bag L
10 Speed Bag S
11 Speed Bag M
12 Speed Bag L
13 Strength Bag
14 Toughen Up Bag
15 Swiftness Bag
16 Big-Shot Bag
17 Double-Up Bag
18 Team Flare Bag
19 Reset Bag
1A Soothing Bag

Form Dex Index

Forms follow the same index as used in the pokémon data structure (i.e. first unown form is "A"...)
Mega Pokémon have a flag for non-mega form (regardless of gender) and for mega form.
Parenthesis indicates how many form flags there are.

Unown (28)
Deoxys (4)
Shaymin (2)
Giratina (2)
Rotom (6)
Shellos (2)
Gastrodon (2)
Burmy (3)
Wormadan (3)
Castform (4)
Cherrim (2)
Deerling (4)
Sawsbuck (4)
Meloetta (2)
Darmanitan (2)
Basculin (2)
Kyurem (3)
Keldeo (2)
Thundurus (2)
Tornadus (2)
Landorus (2)
Vivillion (20)
Flabebé (5)
Floette (6)
Florges (5)
Pumkaboo (4)
Gourgeist (4)
Aegislash (2)
Xerneas (2)
Venusaur (2)
Charizard (3)
Blastoise (2)
Alakazam (2)
Gengar (2)
Kangaskhan (2)
Pinsir (2)
Gyarados (2)
Aerodactyl (2)
Mewtwo (3)
Ampharos (2)
Scizor (2)
Heracross (2)
Houndoom (2)
Tyranitar (2)
Blaziken (2)
Gardevoir (2)
Mawile (2)
Aggron (2)
Medicham (2)
Manectric (2)
Banette (2)
Absol (2)
Latias (2)
Latios (2)
Garchomp (2)
Lucario (2)
Abomasnow (2)
Pikachu (1)
5 unused bits --> (unused cosplay pikachu formes probably?)
Cosplay Pikachu (1)
Hoopa (2)
Beedrill (2)
Pidgeot (2)
Slowbro (2)
Steelix (2)
Sceptile (2)
Swampert (2)
Sableye (2)
Sharpedo (2)
Camerupt (2)
Altaria (2)
Glalie (2)
Salamence (2)
Metagross (2)
Rayquaza (2)
Lopunny (2)
Gallade (2)
Audino (2)
Diancie (2)
Kyogre (2)
Groudon (2)
Arceus (18)
Genesect (5)
Furfrow (10)

Pokémon Bank (application?) data

This region is written every time Pokemon Bank saves. It is a copy of first 0x20 bytes of Pokemon Bank savefile (turtle). Maybe this is used to store information of the last application used with the game, but currently no other application that interacts with ORAS savegame writes this data (Pokémon ORAS Special Demo does not write to this region).

Offset Description
0x00-0x04 Pokemon Bank unique ID? (seems linked to nnid)
0x05-0x08 Unknown (0x00)
0x09-0x0F Unknown, only present in turtle file (0x00 on game's savegame)
0x10-0x14 Bank usage counter backup (previous counter)
0x15-0x18 Bank usage counter
0x19-0x1F Pokemon Bank signature? (always 48CA0A0002000000)