Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by suloku

  1. Offset for XY with save_manager/svdt (2.1 *hax exploit) is 0x1FFFF I'll check oras later or tomorrow, can't do right now. I have learned a little C#, so I may code a windows app to inject the files. Also, I may add option to inject pokemiles or battle points trough pokemon link, just for fun. UPDATE: ORAS offset: 0x20FFF UPDATE2: to successfully inject pokemon link data using this method, checksum 30 from savefile has to be updated --> load save with pkhex, then export .sav and pkhex will fix the checksum for you. UPDATE 3: I finally got the time to look more into how the pokemon link data works, need to propperly document it. UPDATE 4: pokemon link map will be on wiki shortly. UPDATE 5: Here's the wiki page http://projectpokemon.org/wiki/6th_Generation_Pokemon_Link_Map#Savegame_Offsets Also, here's the info I gathered (essentially the same as wiki page, but I'm leaving it here too) Assuming this mimics the pokemon data in wondercard (all known values match) 0x00-0x01 TID 0x02-0x03 SID 0x04 OT Game ID (00 game received in) 0x05-0x07 Unknown/Unused (0x000000) 0x08-0x0B Encryption constant Unset = 00000000 0x0C Primary Ribbons 0x0D Secondary Ribbons 0x0E Pokeball 0x0F Unknown 0x10-0x11 held item 0x12-0x13 Move ID #1 0x14-0x15 Move ID #2 0x16-0x17 Move ID #3 0x18-0x19 Move ID #4 0x1A-0x1B PokéDex Number 0x1C Form No. 0x0D Language (00 game received in) 0x0E-0x37 Pokemon nickname. Null terminator for last two bytes. If no nickname, all 00 0x38 Nature FF - Unset 0x39 Pokemon Gender 00 - Male 01 - Female 02 - Genderless 03 - Random 0x3A Pokémon Ability (mirar de wondercard valores) 0x3B PID toogle 0x3C-0x3D Egg Met Location (ignored if egg flag is 00, gets overwritten with pokemon link location) 0x3E-0x3F Met at Location --> gets overwritten with pokemon link location 0x40 Met level 0x41-0x46 Contest stats Last byte is Sheen 0x47-0x4C IVs (FFs for unset, FE for priority) 0x4D OT Gender (00 male, 01 female, 03 recipient's) 0x4E-0x67 OT Name. Null terminator for last two bytes. If no OT, all 00 0x68 Current Level 0x69 Egg flag 0x6A-0x6B Unknown/Unused 0x6C-0x6F PID (used if PID toogle is 00) 0x70-0x71 Relearn Move 1 0x72-0x73 Relearn Move 2 0x74-0x75 Relearn Move 3 0x76-0x77 Relearn Move 4 0x78 OT Memory Intensity 0x79 OT Memory Line 0x7A-0x7B OT Memory TextVar 0x7C OT Memory Feeling 0x7D-0x9F Unknown/Unused/Reserved Pokemon Link data map note: the statement that pokemon data is 160 bytes long is made due to this data being the same as in wondercard data, which is 160 bytes long from TID to end of file. 0x00 Pokemon link flag (00 disabled, 80 enabled) 0x01-0x6C App name that exported the link data. 0x6D-0x6E NULL terminator?? 0x6F-0x94 UNKNOWN/UNUSED 0x95-0x98 Unknown/Unused (00000000) 0x99-0x9C Unknown2* (Glalie/Steelix 0x0001 0x0001, celebi and johto starters 0x0000 0x0000) 0x9D-0x13C Pokemon slot 1 (160 bytes) 0x13D-0x140 Unknown/Unused (00000000) 0x141-0x144 Unknown2* (Glalie/Steelix 0x0001 0x0001, celebi and johto starters 0x0000 0x0000) 0x145-0x1E4 Pokemon slot 2 (160 bytes) 0x1E5-0x1E8 Unknown/Unused (00000000) 0x1E9-0x1EC Unknown2* (Glalie/Steelix 0x0001 0x0001, celebi and johto starters 0x0000 0x0000) 0x1ED-0x28C Pokemon slot 3 (160 bytes) 0x28D-0x290 Unknown/Unused (00000000) 0x291-0x294 Unknown2* (Glalie/Steelix 0x0001 0x0001, celebi and johto starters 0x0000 0x0000) 0x295-0x334 Pokemon slot 4 (160 bytes) 0x335-0x338 Unknown/Unused (00000000) 0x339-0x33C Unknown2* (Glalie/Steelix 0x0001 0x0001, celebi and johto starters 0x0000 0x0000) 0x33D-0x3DC Pokemon slot 5 (160 bytes) 0x3DD-0x3E0 Unknown/Unused (00000000) 0x3E1-0x3E4 Unknown2* (Glalie/Steelix 0x0001 0x0001, celebi and johto starters 0x0000 0x0000) 0x3E5-0x484 Pokemon slot 6 (160 bytes) 0x485-0x488 Unknown/Unused (00000000) 0x489-0x48A Item 1 0x48B-0x48C Item 1 quantity 0x48D-0x48E Item 2 0x48F-0x490 Item 2 quantity 0x491-0x492 Item 3 0x493-0x494 Item 3 quantity 0x495-0x496 Item 4 0x497-0x498 Item 4 quantity 0x499-0x49A Item 5 0x49B-0x49C Item 5 quantity 0x49D-0x49E Item 6 0x49F-0x4A0 Item 6 quantity 0x4A1-0x4A2 Battle points (pokemon links caps it to 9999 even if set to 0xFFFF) 0x4A3-0x4A4 PokéMiles (Max 0xFFFF) 0x4A5-0xA44 Unknown/Unused (All 0x00) 0xA45-0xA46 CRC-16/CCITT checksum for 0x01-0xA44 data Notes: If pokemon species is not valid (i.e 0x0000), no pokemon will be generated. If item is not valid, it won't be obtained. * Unknown2: seems to somehow control how many pokemon slots will be imported from pokemon link, but can't figure out how this works. Pokemon ORAS Demo seems to use it to only allow 1 pokemon to be read from pokemon link data; bank Celebi and bank Johto starters use placeholder data with 0x0000 pokédex number (thus making that data not being imported). Having all data set to 00 works too, and these values don't seem to have any impact in the generated pokémon. Also, I think I know where the flags for Glalie/Steelix might be, gotta run a couple of tests, but I think the "transfer flags" (wiki page name) is what makes glalie only able to be received once. EDIT: @theSLAYER finally made the tool http://projectpokemon.org/forums/showthread.php?47509-XY-ORAS-Pok%E9mon-Link-tool-0-1&p=209127#post209127
  2. Can it really be? If the date is got from 3ds date and the received date isn't set from nintendo's servers, but from 3ds internal clock, it can't be used to check, since any legit wondercard can have any date. I myself haven't recovered any pokmeon from wonder card, even if I received the wondercard on 2014, if I went and received the pokemon now the pokemon date would be that of today. If my ds clock said toda is any date in 2009, the pokemon would appear as received on 2009, but it is something nintendo can't really control. Am I right? To sum up, date only matters if you have it correctly set and want to know since when you have a pokemon, otherwise it is irrelevant.
  3. I was editing my post while you replied, I've attached the box to my previous post. About boxes, I was more referring to exporting all pokemon in pk6 while keeping them in folders as an option, but that's what export as boxdata.bin does, so no real need for that. EDIT: about the 232 and 260 bytes, I'll respond myself: "Pokémon in the games Pokémon X and Y are stored in a new 232 byte structure (for the box data only). Party Pokémon hold 28 bytes of additional data for overworld and battle values. We recommend using the pk6 extension for decrypted 232-byte box data and 260-byte party data structures." I guess there's a reason for "Save as.." to add the battle data, can't see why though. Oh well, won't take my sleep.
  4. Thank you very much, I'll take a look at pk2pk.cs. I guess this allows us to use pkhex as an alternative to pokemon bank, and also making generation transfers much less time consuming. Do you have a donation page? I'd rather donate my next's years pokemon bank suscription than paying for a service I think should only be payed once and have offline functionality, moreover, I've only used it for Y<->OR transfers rather than actually storing pokemon... EDIT: I've been looking at the sources, and I wonder why hasn't the improvements made in pkhex regarding geneartion conversion been commited to pk2pk standalone program? I think a tool to convert between gents 100% as the official way is very interesting, not only to import to gen VI, but also between the other generations. Instead of keeping two apps, maybe puting a "Time Capsule" menu entry in pkhex that acts like pk2pk would be great. I think it is a pitty a 100% accurate converter is only used for gen VI. I think that I can pull it off myself even if I only know very little C#, since both pk2pk and pkhex are open source. Unless you are going to do it yourself expect a pull request with that (if I manage, I don't think it will be too difficult since the function calls are the same ones, updates only affect the funcitons inner works so...)
  5. @ArmoredGuns Why don't you post the files? There's a flag searcher in pkhex, and other people could help locate where the flags are; I only have OR, so I can't test this. Flags should be next to one another probably. You should post 4 files: - Save wihtout any song - Save with lugia song - save with ho-ho song - save with both songs
  6. Thank you very much, I didn't actually notice pokedex entries are set when importing individual pokemon files or importing folder to box. I was copying a full pokedex and 719+formes to another savefile, and drag and drop those many files would be tiring. You may nbe thinking, why not use the Load/Dump boxes feature? Becuase that feature for some reason fails on my latias. Then it failed on my unown box (but didn't fail on the unown I have in my sorted pokedex boxes, which should be the same as the other unown), then it fails with some vivillion... I'm trying to locate all the pokemon from my save that trigger the problem. This is the exception error: Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración Just-In-Time (JIT) en lugar de a este cuadro de diálogo. ************** Texto de la excepción ************** System.ArgumentException: Caracteres no válidos en la ruta de acceso. en System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) en System.IO.Path.Combine(String path1, String path2) en PKHeX.Form1.mainMenuBoxDumpLoad(Object sender, EventArgs e) en System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e) en System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e) en System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e) en System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e) en System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met) en System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met) en System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) en System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea) en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) en System.Windows.Forms.Control.WndProc(Message& m) en System.Windows.Forms.ScrollableControl.WndProc(Message& m) en System.Windows.Forms.ToolStrip.WndProc(Message& m) en System.Windows.Forms.ToolStripDropDown.WndProc(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** Ensamblados cargados ************** mscorlib Versión del ensamblado: Versión Win32: built by: NETFXREL2 Código base: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- PKHeX Versión del ensamblado: Versión Win32: Código base: file:///C:/Users/sergi/Dropbox/Personal/Savegames/3ds/Pok%EF%BF%A9mon%20X%20-%20Diego/PKHeX.exe ---------------------------------------- System.Core Versión del ensamblado: Versión Win32: built by: NETFXREL2 Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System Versión del ensamblado: Versión Win32: built by: NETFXREL2 Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Windows.Forms Versión del ensamblado: Versión Win32: built by: NETFXREL2 Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System.Drawing Versión del ensamblado: Versión Win32: built by: NETFXREL2 Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Versión del ensamblado: Versión Win32: built by: NETFXREL2 Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Xml Versión del ensamblado: Versión Win32: built by: NETFXREL2 Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Versión del ensamblado: Versión Win32: 4.0.30319.34209 built by: FX452RTMGDR Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_es_b77a5c561934e089/System.Windows.Forms.resources.dll ---------------------------------------- System.Data Versión del ensamblado: Versión Win32: built by: NETFXREL2 Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll ---------------------------------------- mscorlib.resources Versión del ensamblado: Versión Win32: 4.0.30319.34209 built by: FX452RTMGDR Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_es_b77a5c561934e089/mscorlib.resources.dll ---------------------------------------- System.Numerics Versión del ensamblado: Versión Win32: built by: NETFXREL2 Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll ---------------------------------------- ************** Depuración JIT ************** Para habilitar la depuración Just In Time (JIT), el archivo de configuración de esta aplicación o equipo (machine.config) debe tener el valor jitDebugging establecido en la sección system.windows.forms. La aplicación también se debe compilar con la depuración habilitada Por ejemplo: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> Cuando esté habilitada la depuración JIT, cualquier excepción no controlada se enviará al depurador JIT registrado en el equipo en lugar de controlarlo mediante el cuadro de diálogo. System.ArgumentException: Caracteres no válidos en la ruta de acceso. --> Invalid characters in access path I can send you my save file if you want to try yourself. I'm gonna try pinpoint the problematic pokemon, see if they have something in common. Also, why are pk6 files exported with load/dump boxes (or drag and drop to a folder) 232 bytes while manually "saving as" a pk6 file outputs 260 bytes? May I know the reasoning behind that? Since you said it is a personal feel, it makes me think there's no actual difference from importing a full box and adding 30 pkm files manually? The only reason I can think of is that a box bin file has more data than just the 30 pkm entries it stores, but maybe it is just that importing a box overwrites everything there is inside the current box? EDIT: just checked, a boxdata.bin is only a concatenation of 232bytes pk6 files. Which leds me to another (simple) suggestion: could the export box feature prompt if we want to export the files in separate folders when not exporting to pkhex database? Each folder would be a box (Box-XX-TID for example, or without TID), This only makes sense if a box bin file holds more data than the concatenated pk6 files, but it may be useful for managing big amount of pokemon. UPDATE: I have found the 4 pokemon that made load/dump boxes crash, I'm attaching a box bin file with the 4 of them. Latias and both vivillion I got them from GTS, but the Celebi is a 100% legit celebi I myself got from pokemon colosseum bonus disk and transfered the official way trough retail cartridges and finally to gen VI with poke transfer and pokemon bank. Only think I see they have in common is that they have nicknames (should the japanesse celebi be marked as having a nickname? I guess since gen VI region for it is mine, instead of keeping it a japanesse one. bugged.zip
  7. Pokedex entries are not updated when importing pokemon, and the only way to do it in game is trough daycare or with pokemon bank. What I'm asking for is a button at the pokedex editor that would itterate trough every pokemon in the boxes, team, daycare, gts, old man and fused and add that specific pokemon's entry to pokedex (forme, gender, shinyness, kalos or non kalos...) to the corresponding encounter, owned and language fields. I don't really need this feature myself, but I think it is a not very hard to code feature that would be very cool for pkhex to have.
  8. I was wondering, is this tool's conversion process 1:1 of what one would get from doing it with pal park, poke-transfer etc? Also, I've for for curiosity, but I can't seem to find information on what exactly the official conversion process does, anyone has a link? Anyways, thanks for your great tools!
  9. I've just noticed that the file in the first post doesn't have the pokemon bank Johto starters distribution pokemon link file: http://projectpokemon.org/forums/showthread.php?44652-Pokemon-Bank-Celebi-and-other-Pokemon-Link-Injection!-(using-pkhex)&p=199849&viewfull=1#post199849 Good question, I've made that myself in the past. Any region for a given country is valid?
  10. This is great, thank you! In particular the change save language option is very interesting.
  11. I've got an unused spanish shiny charizard code. Is the wondercard different if received on different games (i.e. it carries X stone if received on Y or something like that)? If it is the case I can contribute either Y or rubi wondercards.
  12. If anyone wants to research, here's my rubi savegame before capturing Latios and an unretrieved street pass eon ticket. I can't use ram2sav right now anymore, but I haven't retrieved the eon ticket yet on my current savegame (I catched everything but latias). If I access another 3ds and can backup my save I can upload it too. https://www.dropbox.com/s/p91cewm8e3kpz1f/ORAS_ramsav_6marz2015_latios.bin?dl=0 note: the save was dumped without any firmware updates (1.0) installed (the fw update was already out when I dumped and couldn't download it) , Spanish console and cartridge.
  13. What about the 3rd safari unlocking? Is that data also stored outside the savegame?
  14. Ok, I've gotten the pokemon link bin file for pokemon bank pokemiles. I've also found that it is a very simple file, there's only the title of the pokemon bank app and the number of pokemiles to be received. The value is at 0x4A3 (on the 2631 byte long bin files we are using) and is probably two bytes long (or else the maximum number would be 255). The last two bytes (again, on the 2631 byte long bin files we are using) are a CRC16/CCITT checksum. I don't know if you already knew that, but with this information editing these pokemon link files is possible. If someone is willing to test I can upload a file with 3000 pokemiles (for example) to look for the correct offsets. I'll get some ramsavs for battle points and check the offset were they are stored on the link files. EDIT: it probably is only one byte after all, it seems that the maximum number of pokemiles per day obtainable if the bank has 3000 pokemon is 99 (or 10 battle points), but trying might be worth it (nintendo tends to use 4 byte variables for 32 byte aligment) EDIT2: seems I can't get pokemiles/BP until tomorrow, if someone dumps his ramsav after collecting battle points and posts it it'd be great. EDIT3: battle points are stored at 0x4A1, I still don't know if the variable is 1, 2, 3 or 4 bytes long, as I'm not willing to mingle with my cartridges since ram2sav isn't a 1:1 copy and restore of the cartridge's savegame. If someone offers to test I can provide some injection files for testing the Battle Points / Pokemiles. This is more out of curiosity than usefulness, since pkhex can directly edit the battle points/ pokemiles. EDIT4: Here's a link to the files for battlepoints/pokemiles injection if someone is interested. http://www.mediafire.com/download/bjgnae7gyykd159/BP_PM_injection.zip
  15. Well, the pokemon link feature isn't only for pokemon, that feature is used to receive other kind of things, which are pokemiles/battlepoints from the bank. It is rather pointless since we can edit that on the savegame, but interesting nonetheless imho
  16. Thanks for all this info! By the way, wouldn't it be interesting to get an injection file of lots of battle points/pokemiles? I know it can be edited with pkhex, but I think it would still be interesting.
  17. Box 18, Slot 30--make sure there's no PKMN in that slot otherwise it will be overwritten. Press Select. Code is for Platinum. Code for a legally obtained Mew from my pokemon ranch (spanish) [HGSSSPRITE]151[/HGSSSPRITE] Code for a legally obtained Mew from my pokemon ranch (spanish) Diamond/Pearl code: If you have a diamond, you can install my pokemon ranch on your wii and transfer 1000 pokemon to the ranch, then deposit an egg and you will be asked for the trade. You can modify the wii's clock so you don't have to wait 6 days for the ranch to reach level 25. RanchMew.pkm
  18. suloku


    Source code is included, someone (or yourself) can compile for other OS. Or you can use a windows virtual machine.
  19. suloku


    It seems you missed this thread: http://projectpokemon.org/forums/showthread.php?44253-My-Pokemon-Ranch-Savedata-Exctractor-0-1 Use the extractor, the .pkm filenames contain the trainer id and secret id of the trainer that deposited the pokemon in the ranch. If you need the name, open the .pkm file with pokegen. For extracting the ranch savefile use savegame manager gx on your wii. You will need hombrew channel on your wii to use savegame manager gx, there are plenty of tutorials out there. As another option dolphin emulator can "install" savefiles copied to the sd from the system menu, the you can get savedata.bin in you computer, but since the savefile is protected you still need a homebrew enabled wii to do so and run an app like "banana saves".
  20. Thank you, I've looked at it, but I don't know visual basic (in fact, I know very little programming). I've taken advantage of MPKR making a backup of the savefile to compare what happens when I withdraw a pokemon and deposit a different one. The result was that the only changes to the file are the ones shown in the following image (and obviously the 136 bytes correponding to the pokemon I deposited, which now take the place of the one I withdrawed): EDIT: I also tried to just enter the ranch and save 2 times in a row, then extract the savedata. The only difference between the two savedata were the bytes marked in red in the image (0x00-0x19 and 0x63). I also tried withdrawing the first pokemon deposited at the ranch, then depositing a different one, which shifts the whole pokemon data 164 bytes. But same result. Removing a pokemon has the same changes to the header (well, the pokemon start offset is updated, as stated below). The checksum is definitely one of those, maybe 0x60-0x63 is the header checksum and 0x00-0x19 is the savedata header. Also, I noticed some values in the header are offsets in the file: - Underlined in the image, they seem to be just some index values - In a black square I've marked the values of the offsets of different sections in the savegame: 0x00-0x19: SHA-1 hash of all the following data in the file 0x24-0x27: start offset of mii data entries in the ranch 0x2C-0x2F: start offset of "mii-trainer" data entries in the ranch 0x34-0x37: start offset of pokemon data 0x3C-0x3F: ending offset of pokemon data (after this the savegame is all 0x00) [ATTACH=CONFIG]11917[/ATTACH] UPDATE: found it! 0x00-0x19 is a SHA-1 checksum of the rest of the savedata. 0x60-0x63 might be a time value, since in subsecuent savefiles it only increases. Thankully this is a very common checksum, so I will be able to update the id changer app myself! UPDATE_2: I successfully edited my pokemon ranch savefile and could download all pokemon to a different diamond/pearl savegame, without modifying the nds savegame. It required some extra tweaking, like adding TID, SID, Name to one of the mii-trainer entries (this one was expected). I need more testing, because in my successful attemp i just changed all the trainer data existing in the savefile (which only had had one trainer ever) to the new one and I don't know if changing them all is required, as my save had 3 consecutive TID, SID, Name for no apparent reason. Maybe it is a log of the last trainers that connected to the ranch for the ranch and wiiconnect features? I'll do more testing tomorrow, but the big part is done. UPDATE_3: The process is now automatic. I updated the id-changer and coded a program that updates the hash. I coded it as a separate application because that way one can manually modify the savefile, for example, to change a pokemon for other, and add event pokemon to the ranch for example. With the information in this thread one could write a full save editor, that changes the trainers in the ranch and the pokemon they have stored. It would be nice for people who don't have access to AR or nds flashcarts to mingle with pearl/diamond savegames, but I'm not going to code it, and since my pokemon ranch is only for diamond/pearl I doubt anyone will take that much interest as to code it. I'll update first post with new binaries and the info I've gathered later. UPDATE_4: First post updated. I doubt I will work on this anymore, source and all the information I gathered is available in the rar attached to the first post. UPDATE_5: updated first post with new information and a tool to change the savegame region/language setting
  21. UPDATE 4: About Japanesse My Pokemon Ranch: - Region code seems to be 0x00 for normal japanesse my pokemon ranch. Seems totally compatible with the other versions (NTSC and PAL using regionchanger). About the Platinum update savegame: - savedata.bin is bigger, seems that space was added for 500 player pokemon and 500 hayley's pokemon (a total of 3000 pokemon in the ranch). Some more Ranch data is added as well (for the new features I guess, like song changing, that setting may be saved as well). - The start offset of mii data has changed, since some more data for the ranch save was added, the start offset of mii data has changed. Since I wrote these tools with a hardcoded offset instead of reading the offset from the header (because I discovered that later) the only tools that will work with the platinum update savegame are hashupdater and regionchanger. I may rewrite my tools to clean the code and add compatibility with the platinum update savegame. - For platinum update the region code seems to be 0x40. I think that these region codes are actually only bitmasks, since my pal savegame was updated to 0x60 (bit 6 was enabled) and not 0x40. - A platinum update savegame will NOT work on any non platinum update game. The game will say the save is corrupted (but it is not, it must make some kind of filesize check). UPDATE 3: I tested a little with dolphin and found the header value that defines de region/language of the savegame. I've updated the post with the new information, and I've also attached a new file with the updated information and a new app: PR-regionchanger.exe, which has a region selector (jap, NTSC-U, PAL: english, dutch, french, german, spanish, italian) and also updates the file's hash. UPDATE 2: I made a quick test with a pal savedata I found. The PAL ranch save seems to be language locked and the "connect to wii" option will only appear in the DS games of the same language (english, deutch, french, italian and spanish). I couldn't find any obvious value in the savefile storing the language setting. The lack of a language setting in the NTSC-U savefile might be what prevents the save from loading on the PAL game. I could create several new savefiles in different languages and compare them, but as I said I'm not working on this anymore. UPDATE: Released extractor, id changer and hash updater! Only tested with PAL and NTSC-U savefiles. FAQ: - What are these for? With these tools you can extract the .pkm files from My Pokemon Ranch savedata and take ownership of all the pokemon in the ranch, so you can withdraw them with any NDS cart. - How do I get the savefile from my wii? You will need a homebrew enabled wii (aka Homebrew Channel) and you'll need to use Savegame Manager Gx. - Can I use the savegame copied from the system menu? No, you can't. Either way, if you can copy it it means your wii is homebrew enabled, since you aren't supposed to be able to copy that savegame. - Can I know my secret trainer ID with these tools? Yes you can. Each .pkm file extracted with PR-extractor contains in its filename the TID and SID of the trainer that deposited the pokemon in decimal (normal numbers, not hex like the .tnr files). Alternative method for pokemon extracting: If you use PR-extractor, you can check data of the trainer that deposited the pokemon (TID and SID). You can check the name at My pokemon Ranch screen or using pokegen and opening the .pkm file (only if the pokemon belonged to this same trainer). If you edit your NDS savegame so it matches the TID, SID and name of the trainer that deposited the pokemon, you can withdraw them. Quick Instructions: Savedata structure information: This is the thread that originated it all: http://projectpokemon.org/forums/showthread.php?28382-Reading-My-Pokemon-Ranch-save) Original post: PR-tools_v2.zip
  22. Wow, this is great, I used some AR codes because it seemed easier than looking at the saves/memory, but this is awesome, thank you very much!
  23. suloku


    I've looked at 3 different ranch savedata.bin files and in each file the stored pokemon start at different offsets. This seems to be because of the amount of Mii in the savefile doesn't have a constant allocated space. The actual data starts at 0x22AC, and each Mii takes up 40 bytes. 0x22AF value indicates how many Mii are registered (probably it is a 4 byte variable, taking from 0x22AC to 0x22AF). After the mii data there are 8 bytes more of data, here's data from two different save files: Savefile 1: 00 00 00 2C 00 00 00 01 Savefile 2: 00 00 00 2C 00 00 00 01 After this come the entries linking the Mii's and the trainers, I think the 00 00 00 01 is a 4-byte value indicating how many trainer id's follow. The two savefiles I have only have one trainer, I may check later to confirm this. Each entry is 44 bytes long, then, 4 unknown bytes and then 4 bytes which value is the number of pokemon stored. Then the pokemon start. I think it is worth mentioning that the 0x1C (28 in decimal) bytes that follow the 136 byte pokemon are 4 bytes, then TID (2 bytes), SID (two bytes), trainer name (16 bytes) and 4 more unknown bytes. All this data is unencrypted. First come Hayley's pokemon, including the ones that may have been traded with her. You can identify them because the 0x1C bytes that follow them are blank, they don't have any trainer ID assigned (so you can't take them out of the ranch). Any pokemon traded with hayley are here too, even eggs. I don't know how many pokemon can Hayley take to the ranch. Because of the amount of blank savedata after my last pokemon (and I have 990+ in this savefile) I pressume that this number is as high as 1000 more pokemon brought in by hayley. I guess nobody got that far to confirm. Then come the pokemon stored at the ranch by DS cartriges. I have found the end of the pokemon in the ranch marked by "00 00 00 28" in two different save files. Summary: - My goal is to code an app that can extract all pokemon into .pkm files - Extracting Hayley's pokemon will be optional - Another use of the app will be to change the TID, SID and Name of all stored pokemon, so instead of editing the diamond/pearl savegame the pokemon ranch savegame is edited. Information so far: 0x22AC-0x22AF: number of mii stored Variable: mii data, each mii takes 40 bytes. 4 bytes: 00 00 00 2C 4 bytes: number of trainer-Mii links Variable: trainer-mii entries, 44 bytes long each entry 4 bytes: unknown data; 00 00 00 A4 in two different savegames 4 bytes: number of pokemon in the ranch POKEMON ENTRIES (164 bytes each), structured as following: -136 bytes: encrypted .pkm file (readable by pokegen) -28 bytes: 4 bytes (*read below), then TID (2 bytes), SID (two bytes), trainer name (16 bytes) and 4 more unknown bytes. This data is unencrypted. End of file mark? (4 bytes): 00 00 00 28 * These value seems to be 01 00 00 00 for trainers, 05 00 00 00 for pokemon traded to Hayley, 04 00 00 00 for Hayley's pokemon, and 04 00 00 02 for pokemon that are tradeable with the player (check here for those pokemon: http://bulbapedia.bulbagarden.net/wiki/Hayley%27s_trades). EDIT: I have already coded a program that extracts all pokemon and should work with all pokemon ranch savefiles (well, maybe it doesn't with the japanesse platinum update). I also coded a program that changes the trainer of every pokemon in the ranch (except Hayley's) to the inputed TID, SID and trainer name. This needs testing and I can't do it right now, so we'll have to wait some hours to see if it works (if there's no checksums it should work). EDIT2: As expected, the ranch savefile seems to have a header with a checksum for the savefile, so changing the data without recalculating the checksum won't work. I don't know how checksums work, anyone would lend a hand?
  • Create New...