Jump to content

Pokémon Mystery Gift Editor (v1.4.3) (now with B/W support!)


Grovyle91

Recommended Posts

Actually I found a program which allows me to create fonts, it took me a half day to get that application working :P

I've completed the alphanumeric symbols (foreground), but the Japanese will take some time. Not to forget the Korean...

After that I need to add the background of each char in a seperate font. I saw that just shifting the text 1 px right en 1px px down won't create the same texts as ingame.

By the way, has somebody noticed that the En/Fr/Ge/It/Jp/Sp save files won't work on the Korean games? I tried to get the texts from the Wonder Card, but since it didn't work I don't have any strings to add. I'm not trying to play the game all the way in Korean because I don't exactly know when the Mystery Gift is activated.

What did you mean about Sabresite? Has he only done some research to it or has he created the font itself? If the latter, it would spare me much time :)

Either way, I'll ask him what he knows.

Oh, a bit off topic, but why does doubleclicking the icon of this thread closes it? I just figured that out a couple of minutes ago xD

I've already opened it again just by doubleclicking it again, but if someone won't notice this doubleclicking it will leave his thread closed. Well, for me it probably only works on my own thread, but it's still weird :S

Grtzz!!

Yeah there is a font, haha. Sorry you had to waste your time doing it manually. kazumi213 did some kind of black magic and got a complete typeface in TTF format. You can find it here. It doesn't include the dropshadow. I also noticed that just shifting the font doesn't result in a perfect reconstruction but IMO it's close enough to not warrant a whole new font.

And yeah, Korean save files are not compatible like the other languages. Don't take my word for it here, but I swear that the wonder card offsets were the same. (Despite some other things obviously being different.)

Link to comment
Share on other sites

Yeah there is a font, haha. Sorry you had to waste your time doing it manually. kazumi213 did some kind of black magic and got a complete typeface in TTF format. You can find it here. It doesn't include the dropshadow. I also noticed that just shifting the font doesn't result in a perfect reconstruction but IMO it's close enough to not warrant a whole new font.

And yeah, Korean save files are not compatible like the other languages. Don't take my word for it here, but I swear that the wonder card offsets were the same. (Despite some other things obviously being different.)

Wow :o It certainly helps a lot! Thanks! :D

Just why haven't I found it earlier... Although now I know how to create fonts :P

True, I don't think about editing that font with 2872 glyphs, too much time-consuming...

Exactly my thoughts. Though it still is a bit disappointing that it isn't compatible... which is a mystery to me...

Link to comment
Share on other sites

Is there a way to turn them into AR Codes?

Well, I suppose so, but first I need to do some research in these AR Codes. I'll take a look if I can support it ;)

Hello, i have tried your file with my save file for pokemon platinum, and when i tried to open the save file it told me that the file was too big. Is there anyway to get around this?

That depends... first, check the save file size. Without that, I can't help you. The save file needs to be exact 256 or 512 KB. If it's not, it simply won't open.

Link to comment
Share on other sites

It doesn't include the dropshadow. I also noticed that just shifting the font doesn't result in a perfect reconstruction but IMO it's close enough to not warrant a whole new font.

Sadly, you can't create TTF or other Windows directly usable (no plugins or software limitations) fonts other than B/W. Trust me, I tried. Just read the notes about colored fonts on that DarkAngelX site that you link on the fonts thread. He had to use PHF format for them.

Other than my font just being B/W, it is 1:1 to the pixel and complete. Size and spacing is quite accurate when used at 12 pt. JPN HG/SS don't add any extra glyph to kanas nor latins that I've noticed, and KOR Pt contains same hangul as KOR D/P (the latter used for my TTF).

I have ready a 1:1 wonder card viewer, I mean WC is *exactly* displayed as in-game, no matter of WC data (latin, kana or hangul). As I said it is just a viewer, it won't support editing, but I plan to add *extraction* support from saves. The idea is a tool for quickly inspecting WC, visually, using as close as possible game rules display, since I've found that WCs with evident char corruption keep being uploaded and remain unnoticed.

The only info I think I still need is a *detailed* explanation of how the game determines which game(s) the WC applies to, i.e how the 2 bytes starting at 0x14C in a PCD work. The remaining problem is that I have all this coded in MATLAB, but I think it will be possible to compile into stand alone app with some kind of support library (like .NET is required for the app on this thead).

Exactly my thoughts. Though it still is a bit disappointing that it isn't compatible... which is a mystery to me...

Are you including the required char code mapping (Pokemon<->Unicode)?

Link to comment
Share on other sites

Sadly, you can't create TTF or other Windows directly usable (no plugins or software limitations) fonts other than B/W. Trust me, I tried. Just read the notes about colored fonts on that DarkAngelX site that you link on the fonts thread. He had to use PHF format for them.

Other than my font just being B/W, it is 1:1 to the pixel and complete. Size and spacing is quite accurate when used at 12 pt. JPN HG/SS don't add any extra glyph to kanas nor latins that I've noticed, and KOR Pt contains same hangul as KOR D/P (the latter used for my TTF).

I've wondered that too, but Microsoft needs to extend their font support. I mean, come on... we have Windows 7... we live in 2010... and TTF dates back to the '80 or '90 with Windows 3.1.

It's possible to create your own chars with coding only, just create some variable which holds the locations of the pixels and draw the values on a bitmap, but this is WAY to much for me :P

And I've edited the wide slash in the font, I noticed that it wasn't correct when I tried to view the Japanese preview of a Wonder Card. But for the rest, it is accurate ;) more accurate then the font v1.3 uses now. And I'm very happy that this font exists! :D

All the textboxes have this font now as well, otherwise the special characters in Pokémon font won't show (such as PK and MN, which are relatively ₧ and ₦).

I have ready a 1:1 wonder card viewer, I mean WC is *exactly* displayed as in-game, no matter of WC data (latin, kana or hangul). As I said it is just a viewer, it won't support editing, but I plan to add *extraction* support from saves. The idea is a tool for quickly inspecting WC, visually, using as close as possible game rules display, since I've found that WCs with evident char corruption keep being uploaded and remain unnoticed.

The only info I think I still need is a *detailed* explanation of how the game determines which game(s) the WC applies to, i.e how the 2 bytes starting at 0x14C in a PCD work. The remaining problem is that I have all this coded in MATLAB, but I think it will be possible to compile into stand alone app with some kind of support library (like .NET is required for the app on this thead).

That's awesome :D

My main goal was to preview any Wonder Card for outlining and such (and mostly fun to write the code). I have to admit that I planned to show it as ingame, but I know that would take to much time if it's possible at all.

About that game determining, I can help you with that.

Location: 0x14C
Flags: SS = 0x0001
      D  = 0x0004
      P  = 0x0008
      Pt = 0x0010
      HG = 0x8000

in bits: 1 0 0 0  |  0 0 0 0  |  0 0 0 1  |  1 1 0 1
        HG                            Pt    P D   SS

The game uses flags so it can handle more than just one value. Please keep in mind that I'm using this without bitshifting (little endian and such) ;)

It was just coincidence that I've guessed the HG and SS flag right (tested afterwards with two NDS with a distribution rom and a normal rom).

Are you including the required char code mapping (Pokemon<->Unicode)?

You mean the Pokémon hex characters <-> Unicode hex characters?

The editor uses a file as chartable, so it's editable if something is wrong. I'm not directly using the Unicode hex. The Pokémon hex is listed with the corresponding character right next to it. Like 0138=N.

I hope you can it will help out a lot for the people that has to use an AR to get the Mystery Gifts

I had to do some research for it, because I didn't know anything about creating AR Codes until now! :D

I've added support for it in the next version. And it will be fantastic! I've added every game I know of and support for adding your own game IDs as well :)

I'm testing the AR Codes right now, but when I use the code it just simply freezes my game. I'll fix this before I release the version with AR Export enabled.

I'm not certain if I'll release the new version as v1.4 or v1.3a :S. I guess v1.4 will do because of the new AR feature, but it won't contain many more added features though.

Grtzz!!

Link to comment
Share on other sites

Thanks a lot for the info. Yeah, i was expecting a bit field ;)

Regarding the font, just wanted to note that games contain kana and hangul glyphs in several versions: small (used while playing, dialogs with NPCs, etc) and big (used i.e. in WCs). There's a third (fat) kana version that I think it's used for the Pokédex (main scrollable index). I finally chose to use small version of kana and hangul in the TTF. Big kana version without shadow simply looks horrible, and using big hangul would look unbalanced vs latin and kana small versions. JPN latins are included and still easily distinguishable from western ones in small version, so just a cosmetic decision to ensure balance given TTF limitations.

**EDIT**

I've been checking your program and the WC preview is quite nice so far. Releasing my program would not make sense with all the additional features in yours.

However I might help you in fine tuning/adding kana and hangul display on the preview. Just PM me with details on how do you need the required glyphs (bitmaps) to be formatted (arranged/colored) and I will supply them. I'm assuming that you are overwritting a base empty WC with the glyphs (my approach), but I'm not really sure.

Edited by kazumi213
Link to comment
Share on other sites

Grovyle, you continue to astound me with your speed and capacity to learn and apply what you know. ARDS output will make this program a must-have for Pokémon hackers. :D Quick suggestions for you:

Let the user select which buttons will activate the code. Sometimes people have other codes running as well that use certain buttons, or sometimes their DS is broken and L and R don't work or whatever. It would be nice to let the user have a tiny bit of control over how the code is activated. I did the same thing myself in my PKM generator, using just a bunch of checkboxes.

You can of course also auto-detect which ARDS output "country" would be best by default on a code-to-code basis, based on the input language of the save file, although I think the user should be able to change that too. Too bad there doesn't appear to be a value in the save that specifically tells you if the game is Diamond or Pearl, HeartGold or Soulsilver, etc!

I hope I didn't get to ranty with my unsolicited advice. :(

Slightly off-topic:

Hey Kazumi213, good to see you around! Thanks again for making that font (and figuring out the Unicode equivilant values?), as I have been using them since Sabresite gave them to me. :P

Link to comment
Share on other sites

Thanks! :) Just as my name suggests I guess... :P Well actually, it will only explain the speed thing... hehe xD

I've programmed a lot of things just to learn it. First in Visual Basic, then in C# because it looks a lot at PHP. I've tried C# WPF as well, but since the forms are entirely different I'm skipping this one for a while...

Uhm... to keep on-topic:

Your tip for letting the users select which button it will activate is a real good one. I need to take a look at it how this exactly works.

Automatic region selection is tough, since the save file doesn't have a bit or flag set which corresponds to a specific region.

Automatic game selection is easy, it's already in the program ;) just check for specific block endings. Each game save file has a specific block length (I'm talking about the first small one now) and location where this length is saved. Since this is always fixed I'm checking this for Diamond/Pearl, Platinum and eventually for HeartGold/SoulSilver. If none of these are found, the save file is not a Pokémon save file! :D

However, it's also possible that in, let's say a Platinum save file at the D/P offset the exactly same value is written which gives the program the suggestion that it's a Diamond/Pearl save file instead of a Platinum save file. Though this chance is very, very low. If it does happens, I need to build in more checkers for other blocks.

I've taken a screenshot of the upcoming AR export window. Let me know if something needs to be added or changed ;)

AR Export.png

The export will be every Gift and Wonder Card in XML. Everything will be exported separately in this XML. I don't know if export to TXT will be handy, but if it does, I'll try to add this as well.

Oh, and the selections and added custom IDs will be saved as well.

Grtzz!!

583dcdae6c832_ARExport.png.2cbd5a4f06219

Link to comment
Share on other sites

Nice, but why are my old wondercards still showing up in the Editor?

I deleted the three Wondercards I had in my JP Platinum save file, I even saved three times in-game to make sure the changes applied.

But no. The Wondercards still show up in the Editor. Why is that?

Oh, and I can't import PCD and PGT files.

It says "Value '54272' is not valid for 'Value'. 'Value' must be between 'Minimum' and 'Maximum'."

It says almost the same thing for PGT files, but it'S 33024 instead of 54272.

Link to comment
Share on other sites

That's what the games does. There's no need to delete everything. If I'm not wrong, the game only overwrites the Gift Type from whatever it was to 0. This way the game thinks there's no Gift or Wonder Card in that slot. The rest will stay available if you look directly in the save. This is Platinum, HeartGold and SoulSilver only.

Diamond and Pearl work different, these games have a setting which determines if a specific Gift or Wonder Card is active.

Hmm... have you copied the error message (with trace)? It has definately something to do with the numeric value boxes, I don't know which one however. The trace message along with your PCD/PGT files will help me solving this issue. It's funny that it's D400 and 8100 in hex respectively, I'm wondering for what value.

Grtzz!!

Link to comment
Share on other sites

Actually, there is a byte in the save file that corresponds to the save's region. This is documented on our wiki pages on the various save file structures. Offhand I believe it is located near the beginning of the small block, around where the trainer name and stuff is kept.

To wit:

Diamond and Pearl

Platinum

HeartGold and SoulSilver

Also, I believe an option to export the ARDS codes to text would help some people, like people who don't know how to use the ARDS code manager, or who don't have the cable that comes with the ARDS, etc.

Link to comment
Share on other sites

That's what the games does. There's no need to delete everything. If I'm not wrong, the game only overwrites the Gift Type from whatever it was to 0. This way the game thinks there's no Gift or Wonder Card in that slot. The rest will stay available if you look directly in the save. This is Platinum, HeartGold and SoulSilver only.

Diamond and Pearl work different, these games have a setting which determines if a specific Gift or Wonder Card is active.

Hmm... have you copied the error message (with trace)? It has definately something to do with the numeric value boxes, I don't know which one however. The trace message along with your PCD/PGT files will help me solving this issue. It's funny that it's D400 and 8100 in hex respectively, I'm wondering for what value.

Grtzz!!

Hope you understand french ;)

I can translate if needed.

PCD error:

2r3hxg4.png

PGT error:

2epqcfc.png

Link to comment
Share on other sites

Actually, there is a byte in the save file that corresponds to the save's region. This is documented on our wiki pages on the various save file structures. Offhand I believe it is located near the beginning of the small block, around where the trainer name and stuff is kept.

To wit:

Diamond and Pearl

Platinum

HeartGold and SoulSilver

Also, I believe an option to export the ARDS codes to text would help some people, like people who don't know how to use the ARDS code manager, or who don't have the cable that comes with the ARDS, etc.

Phew... I didn't see this coming... I'll build this in right away.

I didn't know much about ARDS and such, I only have a M3 which uses XML based codes (and more file extensions...). XML is easy and works well now. But what's the best way to export to text? I see a lot of codes using this format:

    !!!Pokemon Heart Gold (J)
   !!IPKJ A587D7CD

   !!!Pokemon Soul Silver (J)
   !!IPGJ 7387AC7F

   !Misc Codes
   ::Max Money (Select)
   94000130 FFFB0000
   62110DC0 00000000
   B2110DC0 00000000
   00000088 000F423F
   D2000000 00000000

Should it be exported this way?

I'll also add an option to select which gifts and/or wonder cards will be exported. And something live previewing so you could copy it right away.

Hope you understand french ;)

I can translate if needed.

PCD error:

2r3hxg4.png

PGT error:

2epqcfc.png

Understanding it? Not much, but since it's a standard error I know what it says :P

I see you're using version 1.2c. I don't know if version 1.3 gives the same error, but if it does, I'd like to have your PGT and PCD files to see what's causing this bug.

Grtzz!!

Link to comment
Share on other sites

Hey Grovyle, have a look at the part of my PKMDS library that handles ARDS output functions:

   Public Class ARDSManager

       Public Enum DSButtons As UInt16
           Always_Active = &HFFFF
           NDS_Not_Folded = &H7FFF
           Unknown1 = &HBFFF
           Debug = &HDFFF
           Unknown2 = &HEFFF
           Y = &HF7FF
           X = &HFBFF
           L = &HFDFF
           R = &HFEFF
           Down = &HFF7F
           Up = &HFFBF
           Right = &HFFDF
           Left = &HFFEF
           Start = &HFFF7
           [select] = &HFFFB
           B = &HFFFD
           A = &HFFFE
       End Enum

       Public Enum Games As Byte
           Diamond
           Pearl
           Platinum
           HeartGold
           SoulSilver
       End Enum

       Public Enum PKMSaveAreas As Byte
           Party
           PC
           Day_Care
           Pal_Park
           GTS
           Roaming_1
           Roaming_2
           Roaming_3
           Roaming_4
           Roaming_5
       End Enum

       Public Const DPPointerAdd As String = "B0000004 00000000"
       Public Const Destructor As String = "D2000000 00000000"

       Public Enum DPPointers As UInt32

           Japanese = &HB21C6588
           English = &HB21C4D28
           French = &HB21C4EA8
           Italian = &HB21C4E08
           German = &HB21C4E68
           Spanish = &HB21C4EC8
           Korean = &HB21C2320

       End Enum

       Public Enum PtPointers As UInt32

           Japanese = &HB2101140
           English = &HB2101D40
           French = &HB2101F20
           Italian = &HB2101EA0
           German = &HB2101EE0
           Spanish = &HB2101F40
           Korean = &HB2102C40

       End Enum

       Public Function PKMToARDS(ByVal PKM As Pokemon, _
                                             ByVal _DSButtons As DSButtons, _
                                             ByVal _Game As Games, _
                                             ByVal _Country As Countries, _
                                             ByVal _SaveArea As PKMSaveAreas, _
                                             Optional ByVal _PCBox As PCBoxes = PCSlots.Slot1, _
                                             Optional ByVal _PCSlot As PCSlots = PCBoxes.Box1, _
                                             Optional ByVal _PartySlot As PartySlots = PartySlots.Slot1) As String

           'First the If statement, along with the buttons to be pressed.
           PKMToARDS = "94000130 " & Hex(UInt16.Parse(_DSButtons)) & "0000" & vbNewLine
           'Next, the pointer (or B code), depending on which game and which language
           'the code is for.  DP uses two lines, Pt uses one.

           Select Case _Game
               Case Games.Diamond
                   Select Case _Country
                       Case Countries.Japanese
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.Japanese)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.English
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.English)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.French
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.French)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.Italian
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.Italian)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.German
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.German)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.Spanish
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.Spanish)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.Korean
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.Korean)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                   End Select
               Case Games.Pearl
                   Select Case _Country
                       Case Countries.Japanese
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.Japanese)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.English
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.English)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.French
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.French)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.Italian
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.Italian)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.German
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.German)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.Spanish
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.Spanish)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                       Case Countries.Korean
                           PKMToARDS &= Hex(UInt32.Parse(DPPointers.Korean)) & " 00000000" & vbNewLine & DPPointerAdd & vbNewLine
                   End Select
               Case Games.Platinum
                   Select Case _Country
                       Case Countries.Japanese
                           PKMToARDS &= Hex(UInt32.Parse(PtPointers.Japanese)) & " 00000000" & vbNewLine
                       Case Countries.English
                           PKMToARDS &= Hex(UInt32.Parse(PtPointers.English)) & " 00000000" & vbNewLine
                       Case Countries.French
                           PKMToARDS &= Hex(UInt32.Parse(PtPointers.French)) & " 00000000" & vbNewLine
                       Case Countries.Italian
                           PKMToARDS &= Hex(UInt32.Parse(PtPointers.Italian)) & " 00000000" & vbNewLine
                       Case Countries.German
                           PKMToARDS &= Hex(UInt32.Parse(PtPointers.German)) & " 00000000" & vbNewLine
                       Case Countries.Spanish
                           PKMToARDS &= Hex(UInt32.Parse(PtPointers.Spanish)) & " 00000000" & vbNewLine
                       Case Countries.Korean
                           PKMToARDS &= Hex(UInt32.Parse(PtPointers.Korean)) & " 00000000" & vbNewLine
                   End Select
           End Select

           Dim Location As UInteger = 0UI
           Dim LengthHEX As String = ""
           Dim Data(235) As Byte

           Select Case _SaveArea
               Case PKMSaveAreas.Party
                   Location = 236 * Integer.Parse(_PartySlot)
                   LengthHEX = Hex(236).PadLeft(8, "0")
                   Select Case _Game
                       Case Games.Diamond
                           Location += &H26C + &H94
                       Case Games.Pearl
                           Location += &H26C + &H94
                       Case Games.Platinum
                           Location += &H14 + &H98
                   End Select
               Case PKMSaveAreas.PC
                   ReDim Data(135)
                   Location = (136 * 30 * Integer.Parse(_PCBox)) + (136 * Integer.Parse(_PCSlot))
                   LengthHEX = Hex(136).PadLeft(8, "0")
                   Select Case _Game
                       Case Games.Diamond
                           Location += &H26C + &HC104
                       Case Games.Pearl
                           Location += &H26C + &HC104
                       Case Games.Platinum
                           Location += &H14 + &HCF30
                   End Select
           End Select

           PKMToARDS &= "E" & Hex(Location).PadLeft(7, "0") & " " & LengthHEX & vbNewLine
           Array.Copy(EncryptPokemon(RawSerialize(PKM)), 0, Data, 0, Data.Length)
           Dim DataString As String = ""

           For i As Integer = 0 To Data.Length - 4 Step 4
               Select Case True
                   Case ((i Mod 8 = 0) And (i <> 0))
                       DataString &= vbNewLine
                   Case ((i Mod 4 = 0) And (i <> 0))
                       DataString &= " "
               End Select
               For iC As Integer = 3 To 0 Step -1
                   DataString &= Hex(Data(i + iC)).PadLeft(2, "0")
               Next
           Next

           PKMToARDS &= DataString & vbNewLine & Destructor

       End Function

   End Class

If you have any questions, feel free to ask and I'll see if I can remember the answer!

Link to comment
Share on other sites

@codemonkey85: Mappings for latin and kana characters were known and well documented long before I build my table, but yeah, I reviewed them all and did the mapping for the remaining 2400 or so hangul chars :P. Some mappings had to be arbitrary, due to lack of better Unicode equivalents (special characters in the pokemon font).

Here are some screenshots from my program showing correct kana and hangul glyphs on a WC. I expect to help Grovyle91 to implement them on his program.

These shots are from an old alpha GUI that I used to focus on developing the WC display part. Raw byte values from the PCD had to be manually pasted...

JPN Enigma Crystal Present before and after clicking on "Generate" button:

18627521.th.jpg

KOR Secret Key before and after clicking on "Generate":

52741569.th.jpg

These are the resulting images after clicking on "Save Image" button:

JPN

outj.png

KOR

outk.png

Link to comment
Share on other sites

Still doesn't work on v1.3.

Different error message, however.

Why would my Wondercards be the problem?

I got them off the Events Contributions thread.

Link to comment
Share on other sites

The Wonder Cards may have some other values set of which I didn't know about. When I take a look at the files, I might be able to fix it in the next version.

@codemonkey:

I already wrote a couple of functions myself :) fine-tuning is on my mind now...

However, that didn't stop me to take a look. Your way of using "select case true" (or switch in C#) is very interesting. I never looked at it that way, but I rather have if statements. C# requires "break;" at any case, this drives me crazy sometimes, and it doesn't help me saving lines.

@kazumi: the screenshots look fantastic! I hope I can equal that with your help!

Oh... @everyone: I found a bug in v1.3. The checkbox which sets the value if a gift or card is active or not in a DP save file don't work correctly. Just to let you know, use v1.2c if you want to use it setting.

Grtzz!!

Link to comment
Share on other sites

Here are all my PGT and PCD files.

Specifically, the Japanese Oak's Letter isn't working (Both the PGT and PCD.)

Try others if you want, but so far from what I've tested, the GAMESTP Pichu and ALAMOS Darkrai work.

Link to comment
Share on other sites

I see the problem... I hate to say it, but the Japanese Oak's Letter is not valid. The English does.

Here, take a look at the hex values of the PGTs:

Japanese Oak's Letter:
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  00 81 03 00 00 00 92 59 7E 3A 8C 73 9F EF C7 43  ......’Y~:ŒsŸïÇC
00000010  2D 81 B7 7B D3 43 A8 56 32 59 A9 F1 3E A6 3B CC  -.·{ÓC¨V2Y©ñ>¦;Ì
00000020  45 1E D6 CA E3 CA 77 82 43 F2 C5 51 A3 65 D0 DB  E.ÖÊãÊw‚CòÅQ£eÐÛ
00000030  3F 8A B4 06 68 63 B5 EE 3F 89 E7 21 3C 96 73 A0  ?Š´.hcµî?‰ç!<–s*
00000040  49 AE E4 D2 CC 34 BA 16 E8 55 46 1B B1 6D 36 CA  I®äÒÌ4º.èUF.±m6Ê
00000050  B6 B0 91 C5 38 B9 7F A1 EE 6B 6C CA FC 42 9C 2A  ¶°‘Å8¹.¡îklÊüBœ*
00000060  DA A9 7F BC 5E B3 04 EA B1 CA 20 59 42 22 49 09  Ú©.¼^³.ê±Ê YB"I.
00000070  6B 3C F7 97 D3 42 FF A5 E4 EF C7 4F 7F B2 AD B5  k<÷—ÓBÿ¥äïÇO.².µ
00000080  5C D3 51 AF 49 04 A2 D0 0E E0 68 35 F8 2F 8D 22  \ÓQ¯I.¢Ð.àh5ø/."
00000090  D1 25 C1 D0 74 17 A7 F3 02 4E 3F 81 F4 C8 07 54  Ñ%ÁÐt.§ó.N?.ôÈ.T
000000A0  74 8C 44 C1 44 ED 23 98 D3 26 CD 1C 45 C5 F7 05  tŒDÁDí#˜Ó&Í.EÅ÷.
000000B0  13 2C 50 F5 ED 96 72 E2 27 20 BF C3 B8 18 97 62  .,Põí–râ' ¿Ã¸.—b
000000C0  C2 5C 15 FA 6F BE E3 9D 7D CF D4 75 7A 30 A9 E5  Â\.úo¾ã.}ÏÔuz0©å
000000D0  D9 3C 1A B2 70 61 D0 2E 0F F6 32 B6 AD 88 E5 A1  Ù<.²paÐ..ö2¶.ˆå¡
000000E0  5F 8C C5 52 7F 2A AC 6C FF A3 C9 83 C4 9D DE 87  _ŒÅR.*¬lÿ£ÉƒÄ.Þ‡
000000F0  D1 2C 4E B4 F9 6F 3A 3A 6A 5D 34 86 B8 5C D2 06  Ñ,N´ùo::j]4†¸\Ò.
00000100  DC 2C 30 FC                                      Ü,0ü

English Oak's Letter (the correct one):
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000100  00 00 00 00                                      ....

The PGTs must be the same for all languages, the PCDs however, may vary since the information texts are different. You see that the Japanese PGT is just... well... I don't know what it is, it's just not valid. The same for the Japanese PCD.

Try loading it in Pokesav, you'll see what I mean.

I think I'll build in a function which determines if the file is valid or not instead of a vague error.

Link to comment
Share on other sites

That's why I just suggested on the contributions thread to re-upload the Japanese Oak's Letter, since it is corrupted.

Nigoli uploaded a valid one.

But I noticed, you seem to have forgot something in the editor... Wondercard ID's.

The game keeps a record of the ID's of the Wondercards you receive to make it so you can't get the same wondercard twice.

However, when just adding the PGT and PCD to the save file, it doesn't actually record the ID.

With your program, are Wondercard ID's automatically added, or you simply forgot to add that?

Edited by Guest
Link to comment
Share on other sites

Yeah, that's right.

I didn't build a function to simulate this, because it's pointless to do that.

The game checks and registers these IDs only when you receive the gift via distributions. The game won't check it again when you already have it on your save file.

You can however, if you want, add these IDs manually with the "Mystery Gift related" button.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...