evandixon Posted May 5, 2013 Posted May 5, 2013 This program will let you edit various things in the saves of Pokémon Mystery Dungeon: Red and Blue Rescue Team and Explorers of Time, Darkness, and Sky, and some parts of the ROM for Pokémon Mystery Dungeon: Explorers of Sky! You need the .Net Framework 4.6 to use 4.0.4 and above. Other versions only require 4.5. Last Update: 12/23/2016 Latest Version: v4.0.11 Beta Download Changelog: v4.0.11 Fixed game-breaking bug when saving Explorers of Time/Darkness saves Fixed bug in Rescue Team saves where changing a move from None to something wouldn't show in-game v4.0.5 Re-added the ability to edit moves of Active Pokemon in EoS Fixed Sp. Attack and Defense being swapped v4.0.4 Bugs fixed: All occurrances of the character "e" being replaced with a superscript e Quicksave Pokémon being corrupted The original species of the partner The size of the window not being saved on exit v4.0.3 Notable changes: Item Storage for Pokémon Mystery Dungeon: Red and Blue Rescue Team is now editable. Original player and partner in Pokémon Mystery Dungeon: Explorers of Sky can be edited (can be observed at the beginning of the Bidoof's Wish special episode). Stored Pokemon in all supported save files can now be imported and exported as individual Pokémon files. Lots of bug fixes and internal changes v3.2 New Features: Explorers of Sky (Save) Stored items are editable (Save) Pokemon in quicksave are (somewhat) editable (ROM) BGP files can be converted to and from pngs. (ROM) Personality test results are editable. Including partner Pokémon. (ROM) Pokémon portraits are editable [*]Red/Blue Rescue Team Checksum is properly updated for European saves Stored Pokémon can be edited in European saves. [*](In the version containing DeSmuMe), press F5 or use the menu to launch your save or ROM in DeSmuMe. [*]Lots of bug fixes [*]Lots of internal changes to let future versions be released faster v3.1 Bug Fixes since 3.0.1: * No scroll bar for viewing stored items in Red/Blue Rescue Team * Editing stored money works now. New features: * Edit Rescue Points for Red/Blue Rescue Team * Change Base Type for Red/Blue Rescue Team * Edit Pokémon in the Boundless Sea friend area (Red/Blue Rescue Team) * Open/Save stored Pokémon as *.skypkm files. ** When opening/saving a *.skypkm file from Pokémon Mystery Dungeon: Explorers of Sky, it is compatible with Sky JEditor * ARDS code generation (currently only for Blue Rescue Team) * Codebreaker (CBA) code generation for Red Rescue Team * Developers can make plugins to extend the functionality of Sky Editor, including save editing and ARDS code generation v3.0.1 Bug Fixes: *Fixed bug where adding a held item ignored the item count New Features *Editing T/D Held Items supported *Editing Red/Blue held items and Pokémon supported *Stored Pokémon for all games are sortable by Friend Area or Team vs. Others v2.6 Explorers of Sky -Added ability to view name and level of Pokémon. Explorers of Time/Darkness -Held items can now be viewed, not edited v2.3 -Increased max length of Team Name read/write to the proper 10 characters. -Stored items display properly (as opposed to being duplicated when opening the same save again) -Stored money read/write improved. Additionally, the limit is set to 9,999,999 because I don't know how high it will actually go, but the game lowers it to 9,999,999 anyway. v2.2 Added support for .Net developers to make plugins to generate ARDS codes based on what's in the save. v2.1 -Stored money maximum read/write increased to 16,580,607. That will be lowered to 9,999,999 once you withdraw any. -Added viewing of stored items (no item counts or box contents yet). -Changed GUI to have a tab control for items. v2.0 R2 -Resource not packaged correctly v2.0. Fixed now. v2.0 -Edit Held Money in Special Episode -Edit Held Items in Special Episode Current Features: Current Features * Pokémon Mystery Dungeon: Explorers of Sky ** Edit Team Name ** Edit Held Money (Main game and special episode) ** Edit Bank Money ** Edit Number of Adventures ** Edit Held Items (Main game and special episode) ** Edit Stored Pokémon ** Edit Active Pokémon (Main game and Special Episode) ** Edit Stored Items * Pokémon Mystery Dungeon: Explorers of Time and Darkness ** Edit Team Name ** Edit Held Items ** Edit Stored Pokémon ** Edit Active Pokémon * Pokémon Mystery Dungeon: Red and Blue Rescue Team ** Edit Team Name ** Edit Held money ** Edit Stored Money ** Edit Held Items ** Edit Pokémon ** Edit Rescue Points ** Edit Base Type ** View Stored Items and more! Cheat Generation * Pokémon Mystery Dungeon: Red Rescue Team (CBA cheats only) ** Base Type ** Held Money ** Stored Money ** Rescue Points ** Team Name * Pokémon Mystery Dungeon: Blue Rescue Team (ARDS cheats only) ** Base Type ** Held Money ** Stored Money ** Rescue Points ** Team Name Credits: -evandixon (Developer) -Grovyle91 (Research of item structure) -Prof. 9 (Team Name character encoding) -matix2267 (Research of Pokémon structure) -Demonic722 (Help with cheat generation) -psy_commando (lots of stuff for ROM editing) Old Downloads: -Sky Editor 4.0.5 - Only save editing -Sky Editor 4.0.4 - Only save editing -Sky Editor 4.0.3 - Only save editing -Sky Editor 3.2.zip -Sky Editor 3.2 (No DeSmuMe).zip - same as above, but without DeSmuMe integration to keep the file size low. -Sky Editor 3.2 (Full).zip - Contains debug symbols and XML comments. Only useful if you're a developer. -Sky Editor 3.2 (Source).zip - Contains the source code for Sky Editor 3.2. When you download a zip file, it's important that you right-click on it, got to Properties, then general, then click the button that says "Unblock" near the bottom. Otherwise, you might not be able to do anything with Sky Editor. Source on GitHub Other downloads: Sky Editor v2.0 R.zip Sky Editor v2.1..zip Sky Editor v2.2..zip Sky Editor v2.3..zip Sky Editor v2.6..zip Sky Editor v3.0.1.zip Sky Editor 3.1 Final.zip Sky Editor 3.2 (No DeSmuMe).zip 2 1
BlackShark Posted May 5, 2013 Posted May 5, 2013 Nice editor! Is this only for US versions or for EU versions or both? It would be great if you add the ability to change your own and your partners name in the future.
evandixon Posted May 5, 2013 Author Posted May 5, 2013 (edited) I've only tested it on the US version. It might work on the European version. As for your name, I'll keep looking. I changed it in the save file and nothing happened. It's probably hidden more places than I thought. [Edit] Currently focusing on held items. I've got results with that. Just not the results I'm expecting. I'll continue later in the week. At least I've got the checksum, so this is actually possible. Edited May 6, 2013 by evandixon
evandixon Posted May 7, 2013 Author Posted May 7, 2013 Updated to edit money. Also views player name.
evandixon Posted May 9, 2013 Author Posted May 9, 2013 Updated to show item information, with what I know of an item's bitwise anatomy. If anyone can help, that would be great. Otherwise, I'll try again later.
BlackShark Posted May 10, 2013 Posted May 10, 2013 I can confirm, that your editor is working on the EU version as well For some reason I get an error message everytime when I open the editor... It's german but I hope you know what that means
evandixon Posted May 10, 2013 Author Posted May 10, 2013 That akward moment when you didn't test it like you thought you did... That should have fixed it. Redownload it and try again.
Grovyle91 Posted May 13, 2013 Posted May 13, 2013 Wow... good job on finding that. I know I've tried to edit the saves way back when the game was just released, but miserably failed. Certainly didn't thought of trying this. But... .NET 4.5 already? Right... Win8. I'm still stuck at Win7 and .NET 4.0 . Don't want to switch over to Win8 Anyway... again, good job. Although I haven't played it anymore for like... many years, I'll be watching this thread and you since it's interesting to follow the progress >
evandixon Posted May 13, 2013 Author Posted May 13, 2013 Updated to support the .Net Framework 4.0 because it was requested. (Or should I have said downgraded?) Anyway, I also added more info about the structure of items, which is remarkably inconsistent. I'll take a break from that for a little bit, perhaps I'll come up with something later.
Grovyle91 Posted May 13, 2013 Posted May 13, 2013 (edited) Haha... you didn't have to change it if you really depend on it. I just saw that the minimum requirement for .NET 4.5 is Win7 SP1 or Vista SP2. I think I just need to update it sometime. I'll take a look at your data structure trying to figure some more out I should have an old save lying around somewhere. EDIT: I'm progressing slowly trying to find a correct data structure. I'm going with your example, apples. You should take a look at this (example of 8 apples in my inventory): 00000001 00000000 01101000 00000011 00000010 00000000 11010000 00000110 00000100 00000000 10100000 00001101 00001000 00000000 01000000 00011011 00010000 00000000 10000000 00110110 00100000 00000000 00000000 01101101 01000000 00000000 00000000 11011010 10000000 00000000 00000000 10110100 00000001 As you already figured out, there's some shifting happening here. But the funniest thing is, I don't think an item takes 31 bytes. Why would the first line otherwise end with an 1? I tested it with only one apple in my inventory, and it showed me the complete first line. Plus, it would be weird for the devs to store it like that. There's some pattern though. Take groups of 16 bits, shift them a couple of times to the right (how much is depending on the line number) WITH overflow. Don't know how it's called properly, but when a bit gets lost while shifting, it gets added to the other side. (see edit 2) That's not the complete story though. As you can see, there's an extra byte in the 8th line. I don't know why, but it seems like it's another shift, although a very weird one. So if you shift everything, you get this: 00000001 00000000 01101000 00000011 00000001 00000000 01101000 00000011 (>> 1) 00000001 00000000 01101000 00000011 (>> 2) 00000001 00000000 01101000 00000011 (>> 3) 00000001 00000000 01101000 00000011 (>> 4) 00000001 00000000 01101000 00000011 (>> 5) 00000001 00000000 01101000 00000011 (>> 6) 10000000 00000000 00000000 10110100 00000001 (this is a tricky one...) If you go on like this (I've tried with 16 apples), you get the exact same results, only at another offset. It seems like the first page of your inventory is at 0x8BA2 - 0x8BC2 (33 bytes long), second page is at 0x8BC3 - 0x8BE3 (also 33 bytes long), etc. This results that the total inventory of 48 items (6 pages) is located at 0x8BA2 - 0x8C67 (198 bytes long). Then again, I really don't know what the devs were thinking about this shifting process... it seems a bit... inconvenient. But this is what I got from my test results. I'll try with another item, trying to figure out the whole shifting process. EDIT2: Take a look at https://en.wikipedia.org/wiki/Bitwise_operation#Rotate_no_carry (or https://en.wikipedia.org/wiki/Circular_shift) for the bit shifting that is used here (aka bit rotation or circular shifting). EDIT3: Found what I was looking for, a complete brain breaker. Ignore the first 3 (but you can use them for more research): 8x Oran Berry: 00000001 00000000 00110000 00000010 00000010 00000000 01100000 00000100 00000100 00000000 11000000 00001000 00001000 00000000 10000000 00010001 00010000 00000000 00000000 00100011 00100000 00000000 00000000 01000110 01000000 00000000 00000000 10001100 10000000 00000000 00000000 00011000 00000001 8x Power Band: 00000001 00000000 11010000 00000000 00000010 00000000 10100000 00000001 00000100 00000000 01000000 00000011 00001000 00000000 10000000 00000110 00010000 00000000 00000000 00001101 00100000 00000000 00000000 00011010 01000000 00000000 00000000 00110100 10000000 00000000 00000000 01101000 00000000 8x Big Apple: 00000001 00000000 01110000 00000011 00000010 00000000 11100000 00000110 00000100 00000000 11000000 00001101 00001000 00000000 10000000 00011011 00010000 00000000 00000000 00110111 00100000 00000000 00000000 01101110 01000000 00000000 00000000 11011100 10000000 00000000 00000000 10111000 00000001 8x Petrify Orb: 00000001 00000000 11111000 00001001 00000010 00000000 11110000 00010011 00000100 00000000 11100000 00100111 00001000 00000000 11000000 01001111 00010000 00000000 10000000 10011111 00100000 00000000 00000000 00111111 [color=red]01000001[/color] [color=red]01000001[/color] 00000000 00000000 01111110 [color=green]10000010[/color] [color=green]10000010[/color] 00000000 00000000 11111100 00000100 As you can see, the Petrify Orb has more overflow to the next set of bits. And for future reference, team members holding items: 8x Petrify Orb (with some given to members): 00000001 00000000 11111000 0[b]1[/b]001001 (1st team member) 00000010 00000000 11110000 00010011 [color=red]0000010[b]1[/b][/color] (2nd team member) [color=red]00000101[/color] 00000000 11100000 00100111 [color=green]000010[b]11[/b][/color] (3rd team member) [color=green]00001011[/color] 00000000 11000000 01001111 [color=blue]0001[b]1[/b]000[/color] (4th team member) [color=blue]00011000[/color] 00000000 10000000 10011111 00100000 00000000 00000000 00111111 01000001 00000000 00000000 01111110 10000010 00000000 00000000 11111100 00000100 According to this, I've concluded the following: each item indeed uses 33 bits. Following up the last example, you can do this: 8x Petrify Orb (with some given to members): 00000001 00000000 11111000 01001001 [color=red]0[/color] 0000001[color=silver]0[/color] 00000000 11110000 00010011 [color=red]01[/color] 000001[color=silver]01[/color] 00000000 11100000 00100111 [color=red]011[/color] 00001[color=silver]011[/color] 00000000 11000000 01001111 [color=red]1000[/color] 0001[color=silver]1000[/color] 00000000 10000000 10011111 [color=red]00000[/color] 001[color=silver]00000[/color] 00000000 00000000 00111111 [color=red]000001[/color] 01[color=silver]000001[/color] 00000000 00000000 01111110 [color=red]0000010[/color] 1[color=silver]0000010[/color] 00000000 00000000 11111100 00000100 And then you need to read it from right to left, grouped as above (I think), which results in: 8x Petrify Orb (with some given to members): 0 01001001 11111000 00000000 00000001 01 00010011 11110000 00000000 0000001 011 00100111 11100000 00000000 000001 1000 01001111 11000000 00000000 00001 00000 10011111 10000000 00000000 0001 000001 00111111 00000000 00000000 001 0000010 01111110 00000000 00000000 01 00000100 11111100 00000000 00000000 1 And then polishing it a bit up: 8x Petrify Orb (with some given to members): 00100100 11111100 00000000 00000000 1 (1st team member) 01000100 11111100 00000000 00000000 1 (2nd team member) 01100100 11111100 00000000 00000000 1 (3rd team member) 10000100 11111100 00000000 00000000 1 (4th team member) 00000100 11111100 00000000 00000000 1 00000100 11111100 00000000 00000000 1 00000100 11111100 00000000 00000000 1 00000100 11111100 00000000 00000000 1 And there you have it! I hope, at least it looks like this is it. It's possible the reading from right to left is a bit off, because I do not exactly know the ordering and grouping (this just seemed logical to me). I guess you need to experiment with some other items to figure the ordering out. But it definitely looks like something EDIT4: I really don't know if you like figuring these things out yourself, but I don't think you have to anymore (sorry if you wanted that, but I was a bit caught up in this ). I've looked some more with random items, and I can confirm this data structure is indeed correct. Let me explain the structure: hhhxxxxx xxxxxx00 00nnnnnn n0000000 1 h = member holding bits (000 = none, 001 = member 1, 010 = member 2, 011 = member 3, 100 = member 4) x = item ID (total amount of 1,351 items, so 1 - 1,351) n = item amount (0 - 99, 0 for items without an amount) 0/1 = seems to be constant on my part / unknown Of course you'll still need to decode and encode it. But you can read that method in my earlier edits. In order to get the total amount of available items, I've dug up some old program from 2009 in which I can view/edit the MD strings in the rom. It lists every item (and more) ingame. Luckily, the string order is exactly the same as the item IDs (with an offset of course). I can send it to you if you want. This way you can make a list of items names . Edited May 14, 2013 by Grovyle91
evandixon Posted May 14, 2013 Author Posted May 14, 2013 Thank you for finding that! Users everywhere will soon be able to edit items! I'll start implementing that in the next few days (giving proper credit of course). Sending me a list of item ID's would be great. If you didn't, users would just have to manually add the item ID into a text file. I made progress in editing the Player Name. It's stored at 0x487-0x490 in addition to 0x13F-0x148. 0x487 uses proprietary character encoding, terminated with 01 then 00's, while 0x13F is ANSI. I'll release that as soon as I have more character codes found (I only have A, B, C, and ? so far. Unknown characters are for now replaced with ?.
Grovyle91 Posted May 14, 2013 Posted May 14, 2013 No problem Once I'm home I'll send you the list including the program I used in case I something screw up. Verstuurd van mijn GT-I8160 met Tapatalk
evandixon Posted May 14, 2013 Author Posted May 14, 2013 Finished researching for the day. If any non developer wants to help out, send me your save files so I can list what values are for what character in the team name. Start new games with specific 10 character sets perhaps, then immediately quicksave. Grovyle91: Thank you for your help in figuring out the over complicated item structure. I'll spend the next few days developing it and hopefully it will be ready soon. Everyone else: What other features do you want? It will give me something to look for later.
Grovyle91 Posted May 15, 2013 Posted May 15, 2013 I need to correct myself after investigating some more. You know about those mystery boxes right? Yeah... the resulting item id needs to be stored somewhere. So look at this: 00000101 11100000 00100100 10000000 1 (Dainty Box) 00000101 11101001 01011001 10000000 1 (Dainty Box) 00000110 00101000 00100100 10000000 1 (Hard Box) 00000101 11001101 10110111 00000000 1 (Shiny Box) 00000101 11001101 01011101 00000000 1 (Shiny Box) Right, there's no way I've more than 1 of each of those boxes. So the only logical explanation to this, is that it uses those bits for the hidden item id. And there are still some bits left. Since an amount can only be 0 - 99 (which uses 7 bits), I think the 7 bits after the hidden id is the amount in case of an item that uses this (like stick, geo pebble, etc.). And again 0 if it isn't used. This still leaves the leftover 1, which is still unknown to me. So after applying this, you get the following: hhhxxxxx xxxxxxpp pppppppp pnnnnnnn 1 h = member holding bits (000 = none, 001 = member 1, 010 = member 2, 011 = member 3, 100 = member 4) x = item ID (total amount of 1,351 items, so 1 - 1,351) p = item parameter (in case of a mystery box: hidden item id; item with amount: amount of item (1 - 99); otherwise 0) n = item amount of the hidden item (1 - 99, 0 for items without an amount), 0 if there's no hidden item 1 = seems to be constant on my part / unknown So it gets even more complex, yay! But that's not all... I've tried to figure out how the main item storage is stored. And I'm partly there. It seems that the item ids and parameters are seperated from each other. If you take a look at this screenshot of my notes, you'll instantly see it's not easy to decode this properly without using bitwise operations and gluing the pieces together. It looks like there are 6 bits at the very beginning that are not used (or used by something else). Later on after each 8 items, these 6 bits are a kind of overflow used by the previous 8 items. It's not even easy to explain, so just take a look at the screenshot. Regarding the character names at 0x13F, I've also noticed that your partner's name is right after it. But it's not updated at all. E.g. I've chosen Turtwig in the beginning (with just "Turtwig" as his name since I didn't bother to think of something else), but he's evolved to Torterra and the name at 0x149 - 0x152 is still Turtwig. So I wonder where this name is being used elsewhere in the game. Anyway, this is what I found out for now. I'm done for today...
evandixon Posted May 15, 2013 Author Posted May 15, 2013 Good work on the item stuff! It's nice to have properly formatted data to develop with. As for names, the player name is also stored at 0x8411-0x841C in proprietary encoding (I have values for A, B, C, and ? so far, I'll look at more later). The partner name might be close to that.
BlackShark Posted May 15, 2013 Posted May 15, 2013 Everyone else: What other features do you want? It will give me something to look for later. Adding and changing the Pokemon in your team would be a nice feature As for the name characters, if you haven't found out yet: 0A -> a + 8 12 -> b + 8 1A -> c ... and so on, just add 8. The same for capital letters. 0B -> A + 8 23 -> B + 8 1B -> C ...
Prof. 9 Posted May 15, 2013 Posted May 15, 2013 0x487 uses proprietary character encoding, terminated with 01 then 00's, while 0x13F is ANSI.It's mostly ANSI, but some characters were removed and/or replaced with different characters.Here's a table file: http://www.mediafire.com/?xb0dxr9tl8ed2tp All the bullet characters are graphically the same, and 5B is glitchy. [$NN] denotes a character that the game doesn't support (meaning it's either a regular space, a solid square, or butchers the text display).
evandixon Posted May 15, 2013 Author Posted May 15, 2013 Grovyle91: When items are removed from the bag, they're not overwritten. They stay there with a terminator. Maybe tonight I can post the terminator. It might be related to that constant 1. It's mostly ANSI, but some characters were removed and/or replaced with different characters.Here's a table file: http://www.mediafire.com/?xb0dxr9tl8ed2tp All the bullet characters are graphically the same, and 5B is glitchy. [$NN] denotes a character that the game doesn't support (meaning it's either a regular space, a solid square, or butchers the text display). Thanks, that will help in reading names. Adding and changing the Pokemon in your team would be a nice feature As for the name characters, if you haven't found out yet: 0A -> a + 8 12 -> b + 8 1A -> c ... and so on, just add 8. The same for capital letters. 0B -> A + 8 23 -> B + 8 1B -> C ... That might not be constant as it gets closer to the end of the alphabet, but I'll use that until I prove otherwise.
Grovyle91 Posted May 16, 2013 Posted May 16, 2013 Grovyle91: When items are removed from the bag, they're not overwritten. They stay there with a terminator. Maybe tonight I can post the terminator. It might be related to that constant 1. Hmm... odd. Didn't notice it in my save. I'm almost sure that in my case everything was zeroed out upon removal, but don't take my word for it until I've tried it again (which may take some time as I receive PMD:GtI tomorrow, though it's just too bad I'm not able to get any save files from my 3DS... ).
evandixon Posted May 16, 2013 Author Posted May 16, 2013 (edited) The terminator is an item with all zeros. So that must be what the constant 1 is. I'll implement that later tonight. [Edit 2] New update released to view items. Todo: -Display whether an item is held -Edit items (GUI is fully functional, now I have to actually write to the file). -(Not next release) add extended box support Untitled..zip Edited May 16, 2013 by evandixon
Grovyle91 Posted May 16, 2013 Posted May 16, 2013 Ah, then the 1 is a bit to determine if there's an item or not. Well... that makes sense. I wonder why my save was being zeroed out in the whole remaining data. Anyway, at least there's a use for that 1 Verstuurd van mijn GT-I8160 met Tapatalk
evandixon Posted May 16, 2013 Author Posted May 16, 2013 (edited) Updated because the previous 1.0.1 version might have had a line of code I forgot to comment out that might have screwed up the player name. If this hurt anyone, give me your save file and your player name and I'll fix it. [Edit 2] Program updated! See first post. Edited May 16, 2013 by evandixon
evandixon Posted May 17, 2013 Author Posted May 17, 2013 Update on items: Editor now supports setting what's inside a box when adding an item. This is retained when putting a box in storage then removing it. (Didn't save before withdrawing, may or may not make a difference.) Next I should work on Used TMs.
evandixon Posted May 21, 2013 Author Posted May 21, 2013 Updated to 1.4.1. -Edit Number of Adventures had. Guess what? You can have a negative number! You want to have -2 billion missions done? Sure thing! -Proper tab order. I didn't check before, so next release I'll be sure the tab order makes sense. -Bug fixes.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now