matix2267

Sky JEditor - another save editor for Pokemon Mystery Dungeon Explorers of Sky

41 posts in this topic

Recommended Posts

This program will let you edit various things in Pokémon Mystery Dungeon: Explorers of Sky

Features:

- fix checksum if you have corrupted your save (this includes quicksave checksum although it won't let you retry -- more investigation needed)

- edit pokémon (including active pokémon)

- name, species, location met, all stats & attacks

- all unknown values are shown so you can edit them too

- import/export

- edit items (held, special ep, stored, Keckleon shops stock & Croagunk swap shop stock)

- edit money, team name

- cut/copy/paste (including ranges)

- full support for whole charset used by the game in names (use '[abc]' syntax for special characters, see src/main/resources/skyjed/resources/SkyCharset.properties)

- edit trash bytes in names (after \0)

- source available in downloads

Planned features:

- find out what are the unknowns in pokémon and items

- more edit streamlining (drag-drop?, hot-keys)

- edit gatekeepers scores, adventure log (already implemented, no GUI yet)

- edit storyline data, possibly new game+ mode (reset all storyline but keep pokémon/items)

Known bugs/limitations:

- no support for Explorers of Time/Darkness (not planning to add it but maybe someone else will)

- requires Java 1.7 (or newer) to run

How to run SkyJEd (Windows):

- Install Java 1.7 (or newer)

- Double-click on bin/SkyJEd.bat.

How to run SkyJEd (Unix):

- Install Java 1.7 (or newer)

- run: './bin/SkyJEd' from your favorite shell.

Old instructions (before v0.8g):

How to run SkyJEd (Windows):

- Install Java 1.7 (or newer)

- Double-click on SkyJEd.jar file.

How to run SkyJEd (any OS):

- Install Java 1.7 (or newer)

- run: 'java -jar SkyJEd.jar' from your favorite shell.

Changelog:

v0.1: initial version

v0.2: added import/export of pokémon, updated credits

v0.2b: huge internal refactoring (no user visible changes though), fixed small bug where money would not be updated unless field has lost focus

v0.2c: cross-platform GUI (tell me if it's not working for someone), implemented reading/editing active pokémon although not hooked into GUI yet

v0.3: implemented reading/editing Keckleon shops stock

v0.4:

- Added combo box for selecting attacks instead of choosing attack id.

- Added adventure log read/write (not hooked into GUI). Some of values there seem to be read-only (the game recomputes them on start, need to find out how to actually change it)

- Fixed a bug where empty name would not get saved.

Internal changes:

- Added LICENSE file to explicitly make this program open source.

- Changed the way character conversion works.

- Removed hackish way of forcing the unknown list in ManagePokemonWindow to wrap, instead I'm just splitting that list at some arbitrary point (it will need to be changed when we get to understand what those values are)

v0.5:

- Updated pokemon species list with special forms (thanks to WhatHappenedToStairs)

- Huge usability bump: can now cut/copy/paste items and pokemon

- App will now close when main window is closed

v0.5b: held items in special episodes can now be modified, fixed an exception when you click 'paste' but clipboard contents change and there's no pokemon/item in it anymore.

v0.5c:

- you can now edit number of adventures had

- added editing active pokemon to GUI (codebase was ready from v0.2c)

- added loading/storing of quicksave data, no features yet except fixing checksum

v0.6:

- huge GUI refactoring

- implemented editing pokémon from quicksave

v0.6b: fixed loading edited saves in DeSmuME v0.9.10

v0.6c: added editing active pokemon in special episodes (editing them in roster has no effect because you can't talk to Chimecho there)

v0.6d:

- added mouse tooltip to IQ skills in pokemon editing windows (didn't add all skills names yet)

- updated license

v0.7:

- fixed loading files without quicksave data

- clipboard access refactoring

- added cut/copy/paste ranges of items and pkmn (pasting single item/pkmn to a range will paste it in every selected place)

v0.7b: (whoops forgot to update SkyJEd.jar).

v0.7bb:

- small changes

- added tool to truncate your save file if it's oversized for some reason

v0.7c: fixed exceptions being quietly ignored on file load

v0.7d:

- updated resources (some location & IQ skill names)

- added Croagunk swap shop stock editing

v0.7e:

- huge refactoring (use actions and .properties files)

- preserve trash bytes (not editable yet)

- preliminary support for better character encoding (currently characters are not 1:1 mapped between Unicode and PMD)

v0.8:

- researched some unknowns in pokemon data (evolution level & tactics)

- better character encoding & editing of trash bytes (with colors)

v0.8g: use gradle for distribution (this is so that I can easily add dependencies to project)

v0.8h: use DesignGridLayout for GUI (much simpler and better overall, windows are now resizable and do not get jumbled on different platforms)

v0.8i: restore native look&feel (removed in v0.2c due to GUI bugs)

v0.8j: can now edit egg in Chansey's Care

v0.8k:

- implement friend rescue request parsing (no GUI yet)

- implement friend rescue team, items and money editing (can be used to edit quicksaved rescue progress)

Credits:

- Big thanks to Evandixon for his work on Sky Editor and for making it open-source.

- Grovyle91 (item structure)

- Prof. 9 (character encoding, bit shifting)

- WhatHappenedToStairs (attack id, pokemon forms)

LATEST VERSION: v0.8k

download older version only if you experience problems with latest one

(and please tell me about your problems if you have any)

SkyJEd-v0.7e.zip

SkyJEd-v0.8.zip

SkyJEd-0.8h.zip

SkyJEd-0.8i.zip

SkyJEd-0.8i-src.tar.gz

SkyJEd-0.8k.zip

SkyJEd-0.8k-src.tar.gz

SkyJEd-v0.7e.zip

SkyJEd-v0.8.zip

SkyJEd-0.8h.zip

SkyJEd-0.8i.zip

SkyJEd-0.8i-src.tar.gz

SkyJEd-0.8k.zip

SkyJEd-0.8k-src.tar.gz

Edited by matix2267

Share this post


Link to post
Share on other sites

Nice work. :D

Also, for pokemon editing, do you need to put it in your active team to edit it, or do you have to make it standby to edit it?

Edit: It seems that it could read the data correctly, but I'm going to test further.

Edited by Thunder_Remix

Share this post


Link to post
Share on other sites

Cool. Someone has interest in my program!

So basically I lost interest in developing mine because the Pokémon ID location seemed inconsistent between my save files. I'm installing Java now to try yours out. Hopefully I'll be able to use yours to expand understanding of Mystery Dungeon saves.

I guess I also need to update the wiki with what I know too. What's there now isn't that impressive.

http://projectpokemon.org/wiki/Pokemon_Mystery_Dungeon_Explorers_of_Sky_Save_Structure

http://projectpokemon.org/wiki/Pokemon_Mystery_Dungeon_Explorers_of_Time/Darkness_Save_Structure

[Edit]

Tried it out and it looks great!

But next time you update it, don't forget to give credit to Grovyle91 (Research of item structure) and Prof. 9 (weird bit shifting). I couldn't have made what I did without their research.

[Edit 2]

Turns out I was looking in the dungeon Pokémon area instead of the Pokémon area. Your program helped me find that out, thanks!

One feature I think we both should implement is to export Pokémon as *.skypkm files, containing the 362 bits of data, padded by 6 zeros since files are stored in bytes.

Edited by evandixon

Share this post


Link to post
Share on other sites
Two posts is a little fishy to me, but it looks safe.

You don't have to trust me, source code is available, you can read it and compile for yourself :)

Turns out I was looking in the dungeon Pokémon area instead of the Pokémon area. Your program helped me find that out, thanks!

One feature I think we both should implement is to export Pokémon as *.skypkm files, containing the 362 bits of data, padded by 6 zeros since files are stored in bytes.

So where is this dungeon data? I cannot find it. Also i think it would be better to add that padding at beginning or just before the nickname so that the nickname is not mangled.

Share this post


Link to post
Share on other sites

It's around 0x83D8

http://projectpokemon.org/forums/showthread.php?29465-Sky-Editor-The-first-save-editor-for-Pokemon-Mystery-Dungeon-Explorers-of-Sky&p=165161&viewfull=1#post165161

There's at least 4 Pokemon there, a bit longer than the other Pokemon. I guess they're about 68 bytes plus 2 bits. I can confirm that changing the members names there works in game. There's another field that needs to be changed to change the player name on the save file.

As for skypkm files, we should do whatever is easiest to plug into a SkyPkm class. New SkyPkm([bytes in the file]).

Edited by evandixon

Share this post


Link to post
Share on other sites
It's around 0x83D8

http://projectpokemon.org/forums/showthread.php?29465-Sky-Editor-The-first-save-editor-for-Pokemon-Mystery-Dungeon-Explorers-of-Sky&p=165161&viewfull=1#post165161

There's at least 4 Pokemon there, a bit longer than the other Pokemon. I guess they're about 68 bytes plus 2 bits. I can confirm that changing the members names there works in game. There's another field that needs to be changed to change the player name on the save file.

As for skypkm files, we should do whatever is easiest to plug into a SkyPkm class. New SkyPkm([bytes in the file]).

Thank you.

I'm currently massively reworking the way data is loaded (will be using custom boolean buffers) so that loading and saving has less code in there (most of the work will be offloaded to the new buffer classes).

As for the skypkm files I did the padding in the beginning (little endian - the way game stores it), reading it is as easy as reading every 4th pokemon from roster since they are also padded with 6 bits at beginning.

EDIT:

They are exactly 68+2bits long, first one seems to start at 0x83d9+1bit (assuming that after nickname begins next pokemon, as with stored ones).

Edited by matix2267

Share this post


Link to post
Share on other sites

Just wanted to drop in and say great job! Also I'm not sure what compatibility for Ubuntu / Linux is supposed to be like but there are some slight issues with size and placement of the form controls:

Screenshot+from+2013-08-07+19%253A12%253A45.png

(Everything looks funny because I don't think your program can handle .duc files, which is all I had to work with for the moment.)

That all being said, the fact that you coded it in Java is pretty cool.

Share this post


Link to post
Share on other sites
Just wanted to drop in and say great job! Also I'm not sure what compatibility for Ubuntu / Linux is supposed to be like but there are some slight issues with size and placement of the form controls:

Screenshot+from+2013-08-07+19%253A12%253A45.png

(Everything looks funny because I don't think your program can handle .duc files, which is all I had to work with for the moment.)

That all being said, the fact that you coded it in Java is pretty cool.

It looks that way on my Microsoft Surface (at 125% scaling), looks fine on my desktop (no scaling). I can probably fix mine by applying a compatibility setting to whichever Java program loads jar files.

As for duc files... If only you knew someone who made a converter.

(The online version is still up, but was supposed to expire months ago. Might renew it later, probably not. Saves.uniquegeeks.net)

Share this post


Link to post
Share on other sites
You don't have to trust me, source code is available, you can read it and compile for yourself :)

Sorry, didn't notice the join date. If I saw that, then I wouldn't have said what I said. Thanks for making this program. :)

As for duc files... If only you knew someone who made a converter.

(The online version is still up, but was supposed to expire months ago. Might renew it later, probably not. Saves.uniquegeeks.net)

I used to have a converter, but it's lost somewhere in all my old files.

EDIT: It may have been the offline converter, but I don't really know anymore.

Share this post


Link to post
Share on other sites
Just wanted to drop in and say great job! Also I'm not sure what compatibility for Ubuntu / Linux is supposed to be like but there are some slight issues with size and placement of the form controls:

Screenshot+from+2013-08-07+19%253A12%253A45.png

(Everything looks funny because I don't think your program can handle .duc files, which is all I had to work with for the moment.)

That all being said, the fact that you coded it in Java is pretty cool.

Version 0.2c disables native look & feel which leaves us with cross-platform, ugly, but at least (should be) working everywhere GUI.

Share this post


Link to post
Share on other sites

is look fine on mint 15 .

Screenshot_from_2013_08_08_18_53_43.jpg

some pokemon from my old sky save is seems the stat is not correctly on your editor.

snag_0012.png

I don't remember i have this pokemon on my team. i was check on the game, i can't find this pokemon.

snag_0013.png

but for another is fine :D

Share this post


Link to post
Share on other sites

Andibad, I think you're seeing Lopunny from the special episode in the program (Gardevoir and Medicham are right after, and on mine I saw Grovyle and Dusknoir).

matix2267, I can't until later, so maybe you can investigate the unknown fields to see if they're related to special episodes in any way.

Share this post


Link to post
Share on other sites
Andibad, I think you're seeing Lopunny from the special episode in the program (Gardevoir and Medicham are right after, and on mine I saw Grovyle and Dusknoir).

matix2267, I can't until later, so maybe you can investigate the unknown fields to see if they're related to special episodes in any way.

No they are not, The first group seems to be related to evolution (as it's non-zero only for evolved pokemon), the second group probably begins with tactics setting and then there's map of IQ skills that are switched on.

As for the special episodes, the game interprets first 5 pokemon specially, 1&2 is always player and partner, the next 3 slots are reserved for special episodes.

Edit: can you tell me what locations ID they have? (Grovyle and Dusknoir)

some pokemon from my old sky save is seems the stat is not correctly on your editor.

This is not the same Lopunny, you're seeing the one from special episode. The one that you're looking for must be somewhere else on the list.

--------------------

Edit 2: Implemented Keckleon shops stock editing, this was easier because most of the GUI was already implemented (needed to just add new buttons).

It's a pity that 90% of coding work is GUI related.

Edited by matix2267

Share this post


Link to post
Share on other sites

So, is there anything I can help with? (Explorers of Sky here obviously)

Hmm... So, I checked the moves I had on my Charizard.

– SmokeScreen

– Fire Fang

– Flamethrower

– Focus Punch

SkyJEd gave me this:

TL – 37

TR – 522

BL - 53

BR - 75

Then I taught him TM (I had backup of the save so it didn't matter if I screwed something; plus I always could relearn it) Attract over SmokeScreen.

SkyJEd gave me this:

TL – 522

TR - 53

BL - 75

BR – 326

Unlike main series, new moves end up at the bottom. So 326 is Attract; 75 is Focus Punch; 53 is Flamethrower; 522 is Fire Fang and 37 is SmokeScreen... First move is at top left, second at top right, third at bottom left and fourth at bottom right.

List of moves (currently up to 102)

0 - Nothing

(note that is an actual, usable move, though it seems to fail every time. Description is $$$; has 99PP - dummy move?)

1 - Iron Tail

2 - Ice Ball

3 - Yawn

4 - Lovely Kiss

5 - Nightmare

6 - Morning Sun

7 - Vital Throw

8 - Dig

9 - Thrash

10 - Sweet Scent

11 - Charm

12 - Rain Dance

13 - Confuse Ray

14 - Hail

15 - Aromatherapy

16 - Bubble

17 - Encore

18 - Cut

19 - Rage

20 - Super Fang

21 - Pain Split

22 - Torment

23 - String Shot

24 - Swagger

25 - Snore

26 - Heal Bell

27 - Screech

28 - Rock Throw

29 - Rock Smash

30 - Rock Slide

31 - Weather Ball

32 - Whirlpool

33 - Fake Tears

34 - Sing

35 - Spite

36 - Air Cutter

37 - SmokeScreen

38 - Pursuit

39 - DoubleSlap

40 - Mirror Move

41 - Overheat

42 - Aurora Beam

43 - Memento

44 - Octazooka

45 - Flatter

46 - Astonish

47 - Will-O-Wisp

48 - Return

49 - Grudge

50 - Strength

51 - Counter

52 - Flame Wheel

53 - Flamethrower

54 - Odor Sleuth

55 - Sharpen

56 - Double Team

57 - Gust

58 - Harden

59 - Disable

60 - Razor Wind

61 - Bide

62 - Crunch

63 - Bite

64 - Thunder

65 - ThunderPunch

66 - Endeavor

67 - Facade

68 - Karate Chop

69 - Clamp

70 - Withdraw

71 - Constrict

72 - Brick Break

73 - Rock Tomb

74 - Focus Energy

75 - Focus Punch

76 - Giga Drain

77 - Reversal

78 - SmellingSalt

79 - Spore

80 - Leech Life

81 - Slash

82 - Silver Wind

83 - Metal Sound

84 - GrassWhistle

85 - Tickle

86 - Spider Web

87 - Crabhammer

88 - Haze

89 - Mean Look

90 - Cross Chop

91 - Outrage

92 - Low Kick

93 - AncientPower

94 - Synthesis

95 - Agility

96 - Rapid Spin

97 - Icy Wind

98 - Mind Reader

99 - Cosmic Power

100 - Sky Attack

101 - Powder Snow

102 - Follow Me

326 - Attract

522 - Fire Fang

Note: You may need to look from Chimecho Assembly if the moves you modified are on the Pokémon currently in the team (didn't check how to update the list accessible from main menu with Item, Team, Job List, etc.)

Edited by WhatHappenedToStairs
more

Share this post


Link to post
Share on other sites

It's going to take forever to list them that way. I'll extract the move ID's from the ROM later today.

[Edit] Here's the .txt containing the move names. Thanks to WhatHappenedToStairs for finding that Iron Tail is move ID 1, and Grovyle91 for making his Sky Text Editor.

SkyMoves..txt

SkyMoves..txt

Share this post


Link to post
Share on other sites

Hmm, there are few things that are odd...

361 - Works like Rock Smash. Excavate leftover? In Rescue Team, there is dummied out TM for Excavate, which works like Rock Smash.

362 - Some move. Seems to have 1-tile range; Spin Slash leftover? again, there was similar thing in Rescue Team

363 - looks like regular attack

364 - seems to be Luminous Orb

365 - has animation of Sweet Scent; inflicts Sleep

366 - Radar Orb!

367 - Rollcall Orb

368 - does absolutely nothing, not even "but move failed" thing.

467 - Bullseye! It's Judgment! Oddly enough, animation plays on user. Hits entire room ala Discharge, takes on user's primary type. (Charizard's Judgment was resisted by Kabuto and Shellder; Pikachu's was super-effective on Shellos)

561-563 - Weird. The moves are named after Pokémon; the description is of a throwing item; the straight line kind. 561 has "Grovyle, Standby 1"; 562 glitches characters; 563 has again Grovyle thing but freezes game.

564 - says "Not now." while the game oddly changes from dim to illuminated and then plays Discharge animation (minus hitting part); then freezes game if something certain happens (you opening menu, enemy using move, dunno what else)

565 - grovyle, standby1; freezes

566 - "Fujimi O-nishi"; animation goes 2 tiles instead of one.

Share this post


Link to post
Share on other sites

Thank you WhatHappenedToStairs and Evandixon for that list of moves.

Changelog for v0.4:

- Added combo box for selecting attacks instead of choosing attack id.

- Added adventure log read/write (not hooked into GUI). Some of values there seem to be read-only (the game recomputes them on start, need to find out how to actually change it)

- Fixed a bug where empty name would not get saved.

Internal changes:

- Added LICENSE file to explicitly make this program open source.

- Changed the way character conversion works.

- Removed hackish way of forcing the unknown list in ManagePokemonWindow to wrap, instead I'm just splitting that list at some arbitrary point (it will need to be changed when we get to understand what those values are)

-----

It seems that at 0x8A3F + 2bits begins a map of seen pokemon, next one starts at 0x8A8A + 2bits (exactly 600 bits after previous) and is 553 bits long but does not include all the pokemon from first map (mostly legendary pokemon are excluded but also for example Magnezone). My guess is that this is actually one list divided into male/female groups (adding 600 to id is how females are tracked in pokemon data too) but that doesn't explain why when you meet a pokemon both gender's flags are set at the same time (but only if that particular pokemon has genders).

Can someone confirm that / shed some more light on that matter?

Edited by matix2267

Share this post


Link to post
Share on other sites

Guys, I have found a bit old Notepad file when I was messing with cheat code to change Pokémon... You may want to check this or something.

(The decoy thing is Arceus leftover according to SkyJEditor; note that I didn't do anything with this for almost a year so I don't really remember too much of this.

In other words, I can't really say how much of this is 100% correct; and yeah, some of it is incorrect grammatically.)

TESTED ON SKY. Shaymin Sky forme and Giratina origin forme might not be available in TD, not sure if this code even works in these games. Seems to take effect when player enters dungeon.

Play as a Pokémon: 122B5158 00000XXX (where XXX are numbers below)

This code seems to affect the leader. PERMAMENTLY. Gender can change depending on personality value. Eg. Charizard is 12.5% female and 87.5% male; therefore most of personality values will make it male, while Pikachu is 50/50. That means some male can change into female, and vice-versa if Charizard is changed into Pikachu that way, as the personality value doesn't change.

000: Freezes game upon entering dungeon. Ending day with Sentry Duty doesn't change Pokémon.

001 to 0C8: Species from #001 (BUlbasaur) to #200 (Misdreavus)

0C9 to 0E4: Unown forms alphabetically, question mark is after exclamation mark, which is after Z-shaped unown.

0E5 to 115: Species from #202 (Wobbuffet) to #250 (Ho-Oh)

116 and 117: Celebi, first is the normal one and second is the pink one

118 to 17A: Species from #252 (Treecko) to #350 (Milotic)

17B to 17E: Castform, all four in Normal forme. The three extra are likely placeholders for the forms, albeit it always starts in Normal forme. Seems to change only in weather

17F and 180: Kecleon, first green, then purple

181 to 1A1: Species from #353 (Shuppet) to #385 (Jirachi)

1A2 to 1A5: Deoxys' Defense, Speed, Attack and Normal Formes (in THAT order)

1A6 to 1BE: Species from #387 (Turtwig) to #411 (Bastiodion)

1BF to 1C1: Burmy's Sandy, Plant and Trash Cloakes (in THAT order)

1C2 to 1C4: Wormadam's Sandy, Plant and Trash Cloakes (in THAT order)

1C5 to 1CB: Species from #414 (Mothim) to #420 (Cherubi)

1CC and 1CD: Cherrim. Unlike Castform, the latter one make it starts in Sunshine Form, although it automatically reverts to Overcast if it's not sunny.

1CE and 1CF: Shellos; East Sea is first.

1D0 and 1D1: Gastrodon; East Sea is first.

1D2 to 208: Species from #424 (Ambipom) to #478 (Froslass)

209: Rotom. Only standard forme is in-game, though.

20A to 210: Species from #480 (Uxie) to #486 (Regigigas)

211: Giratina Altered Forme.

212 to 215: Species from #488 (Cresselia) to #491 (Darkrai)

216 and 217: Shaymin's Land and Sky Forme, respectively. MIGHT NOT WORK IN TIME AND DARKNESS.

218: Giratina Origin Forme

219 to 229: Decoy, has Bulbasaur portrait. It (yes, genderless) is Steel-type, has Pressure as ability, and question marks as both species and category. All are the same... but seeing as exactly 17 codes change Pokémon into Decoy, there might be something more...

22A: Kangaskhan Statue, Water-type with Drizzle. Genderless, species is Statue but category question marks. Has no animation. It's EXP curve is ridiculuosly low even for main series. Having 1 248 444 EXP at Lv. 66 (Charizard), Level up said -1 214 916; ie. 33 528 for Lv. 67

22B: Wigglytuff, but all dark. Has unknown category and exp curve is also ridiculously low.

22C to 22E: Regigigas, Bronzong and Hitmonlee (in that order), all as statues, has unknown category and no animation beside rotating (though everything else is okay). You can see these at the end of Aegis Cave.

22F: Chimecho, except this one has unknown category. Nothing else seems odd.

230: Another Wigglytuff, although this one is normal aside from the species.

231 to 233: Lake trio (Uxie, Mesprit and Azelf; in that order), with unknown category.

234: Sunflora with unknown category

235 and 236: As above, but Diglett (and then Dugtrio) instead.

237: ...now Corphish.

238: ...Loudred

239: ...Bidoof

23A: ...Chatot. It's Wigglytuff Guild, but with unknown category!

23B: ...Grovyle. Seeing as above was Wigglytuff Guild, this seems to be the one we met in storyline.

23C: ...now Dusknoir. Likely storyline related Dusknoir.

23D: ...and Sableye.

23E: Darkrai, albeit all dark, and of course unknown category. Experience curve is lower than usually.

23F: Wigglytuff's Mom, it seems. Experience curve is odd and species is Mama, category unknown as always.

240: Another Grovyle. Unknown category, odd experience curve.

241 and 242: The same but Dusknoir instead. Both have Overgrow as, oddly.

243 to 244: Ditto as Sentret, Bellossom and, has Overgrow as ability in every case and unknown category. They're obviously genderless.

245 and few higher: Seems to freeze game.

001 to 245 gives a total of 581 different characters. Oddly enough, couldn't find Primal Dialga.

Share this post


Link to post
Share on other sites
Guys, I have found a bit old Notepad file when I was messing with cheat code to change Pokémon... You may want to check this or something.

Thanks, I have updated the special formes info based on this (didn't bother to check myself LOL)

Oddly enough, couldn't find Primal Dialga.

Try 228 for Primal Dialga (228 hex = 552 dec which is Primal Dialga's id).

I'll be offline (or just lurking online) until September. I hope to see some new info when I return.

Share this post


Link to post
Share on other sites

I'm back and with another version.

Changelog for v0.5:

- Updated pokemon species list with special forms (thanks to WhatHappenedToStairs)

- Huge usability bump: can now cut/copy/paste items and pokemon

- App will now close when main window is closed

Edited by matix2267

Share this post


Link to post
Share on other sites

I was looking at your source code, giving some unused parts of it a GUI in my editor, and noticed something about how the save file must store Pokémon. There's the regular section, storing all Pokémon as shown in Chimecho's, which I believe is overwritten by the active data (PkmnEx) upon leaving the dungeon. I believe the PkmnEx/Active Pokémon data is only read once per floor. Using the Active Pokémon Storage classes to edit the kind of Pokémon only changed when I went the next floor of a dungeon, rather than when I loaded the quick save. Also, the PkmnEx class shows I have full health (44/44), when I really have 7/44. There must be a 3rd area where this is stored, specifically for quick save. Perhaps that very bottom save slot, the one after the first redundant two. I might look into this later, I just wanted to put this out there.

Oh, and I am impressed with your BooleanBuffer class. It makes things so much easier to find (whereas I initially tried to do complicated bit shifting to bytes). Because of that and the additional features you decoded yourself (structure of Pokémon and adventure log), this thread is now stickied in place of mine. Well done, matix2267! (Perhaps now I'll be motivated to make even greater strides in my program, for the good of all of us, and so I can justify sticky-ing mine again.)

Share this post


Link to post
Share on other sites

Thank you for sticking this thread Evandixon, it almost died since no one was actually using my editor but once you stickied this thread the download count skyrocketed. :)

I have a new small update in v0.5b:

- Held items in special episodes can now be modified

- Fixed an exception when you click 'paste' but clipboard contents change and there's no pokemon/item in it anymore.

There are many inconsistencies in how the game stores data, e.g. there are three different layouts for item data: held items have extended 33 bit format, shop contents use shorter 22 bit and Kangaskhan storage uses same 22 bit format but split into two 11 bit parts each in their own region (interleaved vs. planar).

I still have not figured out where exactly is your current hp stored (probably in quicksave slot -- the one starting at 102400 (0x0400) bytes), the ones in PkmnEx are current max hp (after applying all bonuses from items/IQ) and base hp (same as in normal Pkmn structure). OTOH PkmnEx seems to store information about current leader.

Another thing is that there are sometimes trash bytes after pokemon name (after '\0' so they are ignored). I have only been able to get them with special episode pokemon (slots 3-5). I hope they are unused, if you have those, they'll be cleaned by SkyJEd when you load&save your file (also you'll get a nice warning message about it).

There's also question about how exactly does the game recompute those read-only values in adventure log (pokemon joined, kinds of pokemon battled, moves learned) and why does the game store those if they are ignored on file load (are they?).

Also, could you check the map of seen pokemon that I mentioned in this post?

Edited by matix2267

Share this post


Link to post
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