Jump to content

Pokemon Mystery Dungeon 2 - Psy_commando's Tools and research notes


Recommended Posts

Ok I've done what you said, and I've made progress lol

But there still is a problem, perhaps because I haven't type the good path, sorry if I've misunderstood, english is not my native language x)

So, I've put waza_p, my rom and ppm_statsutil together to make it simple, I've writed "ppmd_statsutil.exe -e -mv C:/Utilisateurs/Public/Raph.../ppmd_statsutil_0_1 C:/Utilisateurs.../ppmd_statsutil_0_1/newdatamv

Edit : I've tried with different things in the end of the path like .../wazap_p.bin , ../Myrom, I have the same error

I'me pretty sure I've done something wrong but I don't know what ^^

I have this error "Exception : Error while parsing "C/Users/Public/...." as parameter "input path"

Oh and thank's to you two, I'm learning how to use my computer just because I want to hack PMD2, great :)

Link to comment
Share on other sites

Alright, I made an update, and now you can just drag and drop the rom data folder onto the executable and it will export everything it can. For importing everything you just need to specify the folder where the data was exported to as first parameter, and the path to the exported rom's data directory!

https://github.com/PsyCommando/ppmdu/releases/download/ppmd_statsutil_0.11/ppmd_statsutil_0_11.zip

I also, removed the progress indicator and got a big speed up!

Ok I've done what you said, and I've made progress lol

But there still is a problem, perhaps because I haven't type the good path, sorry if I've misunderstood, english is not my native language x)

So, I've put waza_p, my rom and ppm_statsutil together to make it simple, I've writed "ppmd_statsutil.exe -e -mv C:/Utilisateurs/Public/Raph.../ppmd_statsutil_0_1 C:/Utilisateurs.../ppmd_statsutil_0_1/newdatamv

Edit : I've tried with different things in the end of the path like .../wazap_p.bin , ../Myrom, I have the same error

I'me pretty sure I've done something wrong but I don't know what ^^

I have this error "Exception : Error while parsing "C/Users/Public/...." as parameter "input path"

Oh and thank's to you two, I'm learning how to use my computer just because I want to hack PMD2, great :)

Have you extracted the rom first ?

And if you did, you have to make sure you put the path to the "data"/root directory of the rom, that's the directory that contains the "MESSAGE" and "BALANCE" directories.

Link to comment
Share on other sites

When you say extracted you mean a .nds file ? In this case yes, I did. I exctracted the waza_p.bin too, with nitro explorer. I tried exportations command with C:/.../PMD2/Root/BALANCE/waza_p.bin, C:/.../PMD2/Root/BALANCE, C:/.../PMD2/Root, C:/.../PMD2, or just PMD2/Root/BALANCE/waza_p.bin, PMD2/Root/BALANCE and so on. Nothing works.

But perhaps there's something wrong with my computer because even if I download the 0.1.1 version, the drag and drop doesn't work either

EDIT : I had always the same error "Error while parsing...", and it's strange because whatever the path I've put, the same error appears, as if every single paths I tried was wrong. Then I tried Ordinateur/C:/... and I had "<!>-POCO exception : Exception<123> mypath"

EDIT 2 : Progress (I hope) I have the error "Exception : Cannot determine the desired operation" when i writed ppmd11.exe -e -mv inputpath outputpath

EDIT 3 : My inputpath was C:\Users\Public\ppmd11\PMD2.nds, and if I put C:\Users\Public\ppmd11\PMD2.nds\BALANCE I have Error parsing again. Sorry to be a dumb, whatever I try it doesn't work x)

Link to comment
Share on other sites

Alright, first, you're not dumb, you just don't seem very used to this way of doing things. Which is understandable, because literally every utilities to hack NDS games try to operate on the rom directly(Which isn't really the best idea especially if you're editing a lot of things in the rom, using several different tools, you'd have to rebuild the rom everytime with every single tools. If there was a way to load a rom image as a file system, then that would be leagues better, but nobody has done that AFAIK)

When I said extracted, I meant you can't use a NDS file directly, you have to extract the file system as-is to the disk.

The tool needs to have the whole directory structure of the rom intact to do anything, because it checks the files present to figure out if its EoS or EoT/D, and then it needs to load several files to assemble the pokemon and move data, plus it needs to load the game strings.

The logic being that, its way easier for everyone to just use the rom directory structure to find where everything is located, rather than forcing the user to have to specify the location of all those files manually.

Don't use nitro explorer though, it doesn't seem to be able to extract the whole rom and rebuild it. Try dslazy for now, it uses NDS tool and works pretty well :

http://filetrip.net/nds-downloads/utilities/download-dsbuff-v1-final-f3100.html

It always extract the rom data into the directory its in, in a sub-directory named NDS_UNPACK.

So you'll want to put as first argument the path to the dslazy directory, followed with this : "NDS_UNPACK/data"

It will give something like this:

"C:/somedirectory/dslazy/NDS_UNPACK/data"

Also, when specifying a path to a command-line program, always be sure to enclose paths in-between quotes, that will ensure that any spaces in the path won't confuse the system's argument parser. Also, always replace any \ with /

Link to comment
Share on other sites

Thank's god it works !

But it's you that I have to say THANK YOU !

There's one last thing, how can I edit the XML file ?

Use any text editor/xml editor you want. I recommend using notepad++, it highlights everything and make it all easier to read.

If you've never used XML before think of it like tags in a forum, or HTML tags. Its a set of tags, that can wrap other tags or a value.

EDIT: Alright then, and no problems :)

Link to comment
Share on other sites

I guess it's because the useless data are not recompiled that the size of my ROM is now 86 Mo instead of 128, does it ? It works perfectly but it's weird so I give you feedback anyways ^^

EDIT : Is it possible that the AR codes or editing RAM won't work anymore because of the changement of the file's size ?

Link to comment
Share on other sites

EDIT : Is it possible that the AR codes or editing RAM won't work anymore because of the changement of the file's size ?

Don't worry about it, your codes are fine. It would be an accomplishment to alter move data so well that you can't write to RAM anymore

Link to comment
Share on other sites

I guess it's because the useless data are not recompiled that the size of my ROM is now 86 Mo instead of 128, does it ? It works perfectly but it's weird so I give you feedback anyways ^^

EDIT : Is it possible that the AR codes or editing RAM won't work anymore because of the changement of the file's size ?

NDSTools shrinks the rom by default, it leaves out all the padding bytes from the rom when re-building it. That might be an issue on the actual hardware, but not on emulators AFAIK.

Don't worry about it, your codes are fine. It would be an accomplishment to alter move data so well that you can't write to RAM anymore

Actually, I noticed the same issue while testing. Not sure what's going on with that exactly :/

I think it might have to do with modifying the length of a text string, like Pokemon names or category string. Its odd though, because I'd assume they wouldn't load all game strings in memory at all time, especially since the whole thing is around a mega byte!

Link to comment
Share on other sites

Hi,

I think I found an issue, I don't know whether it's what you was talking about though

I've changed the $$$'s name attack for Judgment, made 2 - 3 edits (power, accuracy) and everything was working fine, I even completed several dungeons.

But at some point of the mystery jungle (I think it would be any other) my game froze

Thankfully I made a savestate, so I reboot and retry, froze again. I tried like 10 times and it's always the same floor (5th), with cloudy-weather, always after 5 - 10 steps.

Hope it can help :)

EDIT : I used the disassembly to see what' happened (even if I don't understand precisely how it works)

Usually in the dungeon (I would say 99 frames per 100) :

R0 to R12 are 00 00 00 00, except for R1 which sometimes is 00 00 00 1F

SP = 02 2B 98 78

LR = 02 07 9C 10

PC = 02 07 9C 10

When the game freeze

R0 = CA 70 22 6C (and becomes CF 00 14 A8 if I let the game playing)

RA = E3 9A C6 86 (becomes E5 E2 BF A4)

R2 = 0A 00 00 01

R6 = 00 46 C6 86 (and becomes 02 8E BF A4)

R10 = 02 34 C1 D8

R11 = 00 00 00 01

R12 = 02 24 67 3C

SP = 02 7E 36 DC (becomes 02 7E 3F 7C)

LR = 02 01 AB 78 (becomes 01 FF 80 C8)

PC = 01 FF 80 C4 (and becomes FF FF 14 90)

R7, R8 and R11 becomes 00 00 00 01

Everething else is 00 00 00 00

And it's weird because when I writed this things, the game has to wait, and then the freezing was far later, I mean the end of the dungeon for exemple

I don't know if it means something or if it can help but it's all I have ^^

Link to comment
Share on other sites

Did you use any cheats at all ? Even if they used to work ? Please, double check your cheat list, because that's really important.

What emulator, and what version ?

What did you change exactly ? I'll need the move's ID, and the fields you changed, along with the value you set them to. (You could also just paste the XML into a CODE tag in your post or on pastebin)

Don't bother writing the state of the registers. Registers can contain anything at any given time, so without context its useless.

Link to comment
Share on other sites

I used cheat in my party before. Like rise IQ or rise stats, I used it one or twice. I also used RAM modification like move slop, PP slot, or fulfill belly. But that's not the first time I complete the game (maybe 3 or 4) and nothing like this happened before. But since I'm not very skilled to use your tool, the problem might came from me (and I hope it does).

The thing is I've seen your post about the length of pokemon names, I thought it may be connected.

I changed the move 467, wich is originaly called $$$ (but it's the judgment attack), I renamed it Judgment, wich is longer.

Here is the only changes :

<Name>Judgment</Name>
	<Description>[M:D1]$$$\n\n\n\nBasic Information:[CLUM_SET:100][M:B20]</Description>
</Strings>
<!--Move data from waza_p.bin-->
<Data>
	<BasePower>80</BasePower>
	<Type>1</Type>
	<Category>1</Category>
	<Unk4>96</Unk4>
	<Unk5>48</Unk5>
	<BasePP>7</BasePP>
	<Unk6>30</Unk6>
	<Unk7>125</Unk7>
	<Accuracy>255</Accuracy>
	<Unk9>75</Unk9>
	<Unk10>1</Unk10>
	<Unk11>99</Unk11>
	<Unk12>55</Unk12>
	<Unk13>0</Unk13>
	<Unk14>0</Unk14>
	<Unk15>0</Unk15>
	<Unk16>1</Unk16>
	<Unk17>1</Unk17>
	<Unk18>15</Unk18>
	<MoveID>467</MoveID>
	<Unk19>0</Unk19>

I'll edit when I know how to use spoiler. My Emulator is Desmume 9.9 -JIT x64, I am under windows 7, 64 bits.

Again, I hope it's because of my cheat, but I usually use MANY cheats, and this time I only used a couple of them (and not the biggest). If you sure the freeze doesn't come from your tool, don't bother with it, I will survive x)

EDIT : I also changed mismagius IQ groupe and his base stats, and used sky Editor to make it my leader, I mean, the principle character

<BaseStats>
		<HP>46</HP>
		<Attack>14</Attack>
		<SpAttack>25</SpAttack>
		<Defense>15</Defense>
		<SpDefense>15</SpDefense>

EDIT 2 : I'm going to start a new party but with the same rom and without cheat (except the use of sky editor, at least to have judgment).

EDIT 3 : Now I'm sure, Judgment take the type of the user, and if user is unknown type, the damage are tremendeous, like 85000000, don't know why (tested it on another ROM).

EDIT 4 : I started a new adventure, the only thing I changed was the move judgment on my shinx. I made 7 - 8 dungeon, and there in the waterfall cave (or whatever) I used charge (power up electric move + up def spe) several times, it worked fine. But just now it begun to charge electric move again and again, it doesn't stop, I'm not able to move or make anything. Perhaps the only problem is changing the length of the move as you said earlier. I'll test it later.

Edited by kleenexfeu
Link to comment
Share on other sites

The cheats are a problem.

When I did some testing, the party pokemon data was moved around in memory, possibly due to either modifying the text strings, or adding / removing moves from a pokemon's move list. The cheat didn't have the intended effect and were writing in a now random memory spot.

Every "cheat code" you enter in desmume's cheat menu just writes a value in memory at a certain address, which works fine for the base game, but since you basically shifted things in memory, the cheat is telling the emulator to write in memory at a location that isn't what it should be anymore.

And, a lot of xml tags are missing in what you posted, did you remove those ?

And I checked move #467, and you seem to have changed a lot of the unknown values.

Here's the original I got:

<?xml version="1.0"?>
<Move>
<!--Pokemon Mystery Dungeon: Explorers of Sky move data-->
<!--In-game text-->
<Strings>
	<Name>$$$</Name>
	<Description>[M:D1]$$$\n\n\n\nBasic Information:[CLUM_SET:100][M:B20]</Description>
</Strings>
<!--Move data from waza_p.bin-->
<Data>
	<BasePower>20</BasePower>
	<Type>1</Type>
	<Category>1</Category>
	<Unk4>48</Unk4>
	<Unk5>48</Unk5>
	<BasePP>7</BasePP>
	<Unk6>30</Unk6>
	<Unk7>125</Unk7>
	<Accuracy>80</Accuracy>
	<Unk9>75</Unk9>
	<Unk10>1</Unk10>
	<Unk11>99</Unk11>
	<Unk12>8</Unk12>
	<Unk13>0</Unk13>
	<Unk14>0</Unk14>
	<Unk15>0</Unk15>
	<Unk16>1</Unk16>
	<Unk17>1</Unk17>
	<Unk18>15</Unk18>
	<MoveID>467</MoveID>
	<Unk19>0</Unk19>
</Data>
<!--Move data from waza_p2.bin-->
<Data>
	<BasePower>20</BasePower>
	<Type>1</Type>
	<Category>1</Category>
	<Unk4>48</Unk4>
	<Unk5>48</Unk5>
	<BasePP>7</BasePP>
	<Unk6>30</Unk6>
	<Unk7>125</Unk7>
	<Accuracy>80</Accuracy>
	<Unk9>75</Unk9>
	<Unk10>1</Unk10>
	<Unk11>99</Unk11>
	<Unk12>8</Unk12>
	<Unk13>0</Unk13>
	<Unk14>0</Unk14>
	<Unk15>0</Unk15>
	<Unk16>1</Unk16>
	<Unk17>1</Unk17>
	<Unk18>15</Unk18>
	<MoveID>467</MoveID>
	<Unk19>0</Unk19>
</Data>
</Move>

Setting the accuracy to 255 is probably already not a good idea, given most entries in the game never exceed 125. I suspect the value is signed, which would mean you basically gave the move -1 accuracy.

I'm not sure what setting Unk4 to 96 does, the only ones I tested with success are 16, 32, 48, and 115. So I'm not sure why you changed it from 48 to 96. :/

And I'm not sure why you changed Unk12 from 8 to 55.

And keep in mind that, the stats aren't calculated the same way as in the main series games. Stats goes from 0 to 255 in every categories except HPs.

Anyways, try setting those 3 values I mentioned above to their default, and see how it goes. I'll try to replicate this on my end.

Also, can you take a screenshot of the damage done ? Because, the value you mentioned is higher than both the maximum values that a 16 bits integer can contain... 65535 when unsigned, or 32767 to -32767 when signed.

And don't worry about it, it really helps a lot when people actually tell me about issues they're having, no matter how much they know their stuff. With that I can make the whole thing less confusing, and fix bugs that I could never find on my own if everyone would remain silent.

Link to comment
Share on other sites

The thing on XML I didn't post weren't changed, that's why I didn't post these

96 make hitting the whole floor (I've just looked at perish song to know it)

255 make the move never miss (as in the main series, actually in the mains series there is a "move effect" that permit this but just putting accuracy at 255 makes the same thing)

EDIT : Ok I just understood what you said. But I don't think it's signed since it always hit, perhaps it's simply 125 or more = always hit. But yeah it was not a good idea to set it to 255 without even check the other moves x)

unk12 is critical hit ratio but I confess I took a random value higher than 8 xD (and 55 makes it always critical by the way)

Next time I'll post a before/after to make it more practical to analyze ^^

The high damages was done when I setted my pokemon in unknown type ( 0x12 ) and I didn't writed something accurate, but it was just huge, very huge, I'll try to post a screenshot

For the cheat I understand but, this time I've just used it to make shinx have my "custum" attack so.. Do you think the problem may comes from it ?

Oh and one thing, If you don't understand what I mean or if it isn't clear, just tell me please. My english REALLY need to be improved, as you can see, so.. I understand if you don't understand xD

Just tell me and I'll make my best for making better explanations

EDIT : Ok I have a screenshot :

4273 - Pokemon Mystery Dungeon - Explorers of Sky (US)(XenoPhobia)_28_5022 capture ecran.png

If it's not an attack worthy of Arceus... xD

Weird, it says 1876.... damage, but we can see that Kabuto taking "only" 30232. Surely something to do with what you said

EDIT 2 : The other attacks make usual damage, perhaps it's pokemon neutral + attack neutral that make something that huge

EDIT 3 : Ok the neutral type is cheated xD. The damages are enormous no matter the type of the user. I put quick attack to neutral type and the damages become suddenly huge. Something weird : when I change the type of the attack, (quick attack for exemple) it stills display "Normal" type. But if I change accuracy to 255, it displays "Always hit". Is it because there is a check on the move for accuracy and not for the type ?

EDIT 4 : Oh and it wasn't exactly cheats. I edited RAM, I don't know if it changes something

583dd03737ffd_4273-PokemonMysteryDungeon

Edited by kleenexfeu
Link to comment
Share on other sites

unk12 is critical hit ratio but I confess I took a random value higher than 8 xD (and 55 makes it always critical by the way)

Next time I'll post a before/after to make it more practical to analyze ^^

I'm really not sure unk12 is the critical hit ratio. I mean, I just thought it matched the value of the critical field in BRT most of the time, but I'm not sure it only does critical hit ratio.. setting the value to either signed max, or unsigned max doesn't seem to let you land criticals every times, which is kinda puzzling.. Just by curiosity, have you tried any higher values than 55 ?

For example, look at this video : https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/Test_IronTail_BasePower0_TypeGrass_PP255_Acc124_crit255.avi

I changed the type of iron tail to grass, set the base power to 0, set accuracy to 124 and set unk12 to 255.

Crit would not happen all the time.

96 make hitting the whole floor (I've just looked at perish song to know it)

That's interesting.. That bitflag has a different effects with each different bit toggled on.

0011 0000 => 48 (Hit every enemies in the room)

0110 0000 => 96

And they both share a common bit.

And then if you look at this:

0010 0000 => 32 (Hit every enemy 360 deg around user)

..it seems like bit 6 has something to do with hitting anything within the area of effect..

But this brings the question, what's the difference between 96 and 48 then?

Because I've seen healing and status move have much different values than offensive move do, and I'm not sure why. Like, 115 for example, was taken from a boosting move for the user.

0111 0011 => 115 (Hit user)

This makes even offensive moves hit yourself. And it has also bit 6 toggled on.. And the lower nybble contains a value too.

The high damages was done when I setted my pokemon in unknown type ( 0x12 ) and I didn't writed something accurate, but it was just huge, very huge, I'll try to post a screenshot

You know, I'm not 100% sure Neutral is a legit type xD It looks to me its only a string, and possibly an enum value, but there is probably no data for it.

Its possible the game tries to read the damage multiplier outside the type table, and it just multiply the damage with whatever it read there.. Which would explains the insanely high values!

(Now, I wonder if we can't use this to find the type effectiveness table or the type data table?)

For the cheat I understand but, this time I've just used it to make shinx have my "custum" attack so.. Do you think the problem may comes from it ?

I can't really tell.. Have you tried just running the game normally, without the cheat, and without having the move on your shinx ?

Or maybe you could try modifying a more common move instead, restoring move #467 to default, and see what happens ?

Oh and one thing, If you don't understand what I mean or if it isn't clear, just tell me please. My english REALLY need to be improved, as you can see, so.. I understand if you don't understand xD

Just tell me and I'll make my best for making better explanations

Its all good. ( Tu parlerais pas Français par hasard ? Il me semble que j'ai lu le mot "Ordinateur" plus haut xD )

EDIT : Ok I have a screenshot :

If it's not an attack worthy of Arceus... xD

Weird, it says 1876.... damage, but we can see that Kabuto taking "only" 30232. Surely something to do with what you said

EDIT 2 : The other attacks make usual damage, perhaps it's pokemon neutral + attack neutral that make something that huge

I guess Neutral type is probably not really implemented. Its probably just a string.

I had no idea it was possible to get that much damage though. during testing, setting the field at a int16's limit values only resulted in these:

https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/Test_IronTail_BasePower32767_TypeGrass_PP66.avi

https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/Test_IronTail_BasePower-32767_TypeGrass_PP66.avi

EDIT 3 : Ok the neutral type is cheated xD. The damages are enormous no matter the type of the user. I put quick attack to neutral type and the damages become suddenly huge. Something weird : when I change the type of the attack, (quick attack for exemple) it stills display "Normal" type. But if I change accuracy to 255, it displays "Always hit". Is it because there is a check on the move for accuracy and not for the type ?

EDIT 4 : Oh and it wasn't exactly cheats. I edited RAM, I don't know if it changes something

The type and whether the attack is physical or not is written in the description string of the move, its not replaced at runtime like the rest for some really weird reason.. So if you wanted to change the type that's displayed in the description, you need to modify the description string in the XML data directly.

That was really headache inducing when I was trying to figure out if the move data contained the actual type of the move.. -_-

If you manually edited the ram without using a pre-made cheat, and you know what you're doing, it should be fine.

Btw, do you have any more hints on how to reproduce the bugs you've been having ?

Yep. 17790488 truncated into a 16-bit int is 30232

That's so weird... Why compute the damage value as a 32bits integer, before truncating it like that ? :/

I wonder if the NDS9 has some kind of overflow protection...

Link to comment
Share on other sites

I'm really not sure unk12 is the critical hit ratio. I mean, I just thought it matched the value of the critical field in BRT most of the time, but I'm not sure it only does critical hit ratio.. setting the value to either signed max, or unsigned max doesn't seem to let you land criticals every times, which is kinda puzzling.. Just by curiosity, have you tried any higher values than 55 ?

For example, look at this video : https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/Test_IronTail_BasePower0_TypeGrass_PP255_Acc124_crit255.avi

I changed the type of iron tail to grass, set the base power to 0, set accuracy to 124 and set unk12 to 255.

Crit would not happen all the time.

I didn't ever even think to look hexa number as binary number...Good idea x). So I can't answer your question but I learned when I was looking in Pok conquest NARC files that putting the highest or lowest values was almost never good. I was gropping and I've always make what I wanted even if it took awhile. Here is the same thing. I seen your work, how to interpret data and I thought "Mhhh, good, what if I set this value in this place ?" xD

And from what I seen in other game, I think I'm not able to find out why exactly that works how it works. The way the moves (and other stuffs) are coded is not that simple, I can only make tests as of yet ^^

That's interesting.. That bitflag has a different effects with each different bit toggled on.

0011 0000 => 48 (Hit every enemies in the room)

0110 0000 => 96

And they both share a common bit.

And then if you look at this:

0010 0000 => 32 (Hit every enemy 360 deg around user)

..it seems like bit 6 has something to do with hitting anything within the area of effect..

But this brings the question, what's the difference between 96 and 48 then?

Because I've seen healing and status move have much different values than offensive move do, and I'm not sure why. Like, 115 for example, was taken from a boosting move for the user.

0111 0011 => 115 (Hit user)

This makes even offensive moves hit yourself. And it has also bit 6 toggled on.. And the lower nybble contains a value too.

Same answer as above ^^ I know (more or less) what 32/48/96/115 do, so I'll use it x)

You know, I'm not 100% sure Neutral is a legit type xD It looks to me its only a string, and possibly an enum value, but there is probably no data for it.

Its possible the game tries to read the damage multiplier outside the type table, and it just multiply the damage with whatever it read there.. Which would explains the insanely high values!

Makes sense x)

(Now, I wonder if we can't use this to find the type effectiveness table or the type data table?)

If you have a boring way to find it out, perhaps I can help you, otherwise... Don't know x)

I can't really tell.. Have you tried just running the game normally, without the cheat, and without having the move on your shinx ?

Or maybe you could try modifying a more common move instead, restoring move #467 to default, and see what happens ?

I'll try do redo some test to compare the results (if I change the name, if I don't, with or without cheat, and so on..)

Its all good. ( Tu parlerais pas Français par hasard ? Il me semble que j'ai lu le mot "Ordinateur" plus haut xD )

Yes I'm french, I didn't notice that you come from Quebec, it would be a great help because sometimes I feel like I'm not clear x)

I guess Neutral type is probably not really implemented. Its probably just a string.

I had no idea it was possible to get that much damage though. during testing, setting the field at a int16's limit values only resulted in these:

https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/Test_IronTail_BasePower32767_TypeGrass_PP66.avi

https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/Test_IronTail_BasePower-32767_TypeGrass_PP66.avi

More test to do

The type and whether the attack is physical or not is written in the description string of the move, its not replaced at runtime like the rest for some really weird reason.. So if you wanted to change the type that's displayed in the description, you need to modify the description string in the XML data directly.

That was really headache inducing when I was trying to figure out if the move data contained the actual type of the move.. -_-

It had to be so funny xD

If you manually edited the ram without using a pre-made cheat, and you know what you're doing, it should be fine.

Btw, do you have any more hints on how to reproduce the bugs you've been having ?

More test x)

That's so weird... Why compute the damage value as a 32bits integer, before truncating it like that ? :/

I wonder if the NDS9 has some kind of overflow protection...

I honestly don't know. And I'm wondering what are the effective damage ? 30232 or 17 XXX XXX ? Because if we suppose that the damages are something like (in binary)

10000000000000000000000000 or something, the foe would take 0 damage ? XXX XXX XXX damages ? 0 + XXX XXX XXX damages ? xD Something else ? Have fun with these questions x)

Link to comment
Share on other sites

For example, look at this video : https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/Test_IronTail_BasePower0_TypeGrass_PP255_Acc124_crit255.avi

I changed the type of iron tail to grass, set the base power to 0, set accuracy to 124 and set unk12 to 255.

Crit would not happen all the time.

Shellder and Kabuto have Shell/Battle Armor as an ability, making them immune to critical hits.

Mt. Bristle would be a better dungeon to test crit chance changes in, as no pokemon there has Lucky Chant or the previously mentioned abilities.

Link to comment
Share on other sites

Shellder and Kabuto have Shell/Battle Armor as an ability, making them immune to critical hits.

Mt. Bristle would be a better dungeon to test crit chance changes in, as no pokemon there has Lucky Chant or the previously mentioned abilities.

Yep, I realized that later on.

But I still posted the video because corsola and shellos don't have that ability. And if you look at the vid for a bit, you'll see I hit a few of them and it resulted in no crit.

Link to comment
Share on other sites

  • 2 weeks later...

This time I just put 125 accuracy, 80 power, 96 for unknown 4 if I remember (make hit the whole floor), didn't change the name, but I had to use ram editing to use the move. Huge bug, my screen turns greeny + freeze. Don't know what I'm doing wrong, all this values have already been used by the game. Except for the power perhaps.

It's interesting because it's another kind of freeze xD

EDIT : Seems to be the RAM editing that cause freezing. Perhaps because the move is not "legal" or perhaps because of the editing of the move. Don't know. But when I don't edit RAM it seems to works fine

Link to comment
Share on other sites

Do you mean that it works fine when you edit another move that your pokemon learns naturally, or do you mean it works fine when you play the game with the modified move, but without giving it to your pokemon ?

Also, you do not need to edit the ram to give your poke the move. You can just replace its first move ID in its level-up move list with the move ID you want to try out.

EDIT:

Also, on the topic of research and the progress with the tools, I found out that the pokemon data in Explorers of Time/Darkness is stored in a slightly different format than in EoS, so that's gonna take a while to figure out.. -_-

EoT/D pokemon data is 76 bytes per entry, while EoS is 68..

I might just drop EoT/D support for now, and actually get some more progress done on other areas of the game for EoS.. There are so many quirks that I have to adapt the code for to support those, and frankly, I'm not too motivated to do all that research twice, especially since I still got a lot of trial and error to do to figure out the missing field names for the pokemon and item data.. And I don't really see why someone would make a romhack of Explorers of Time/Darkness over Explorers of Sky anyways..

Link to comment
Share on other sites

Do you mean that it works fine when you edit another move that your pokemon learns naturally, or do you mean it works fine when you play the game with the modified move, but without giving it to your pokemon ?

Also, you do not need to edit the ram to give your poke the move. You can just replace its first move ID in its level-up move list with the move ID you want to try out.

Second one. And yes I know but I wanted that only mine has the move x)

I'll test by giving the move with lvl up though, to see whether the move itself is buggy or editing RAM after changing data in break the ROM.

EDIT:

Also, on the topic of research and the progress with the tools, I found out that the pokemon data in Explorers of Time/Darkness is stored in a slightly different format than in EoS, so that's gonna take a while to figure out.. -_-

EoT/D pokemon data is 76 bytes per entry, while EoS is 68..

I might just drop EoT/D support for now, and actually get some more progress done on other areas of the game for EoS.. There are so many quirks that I have to adapt the code for to support those, and frankly, I'm not too motivated to do all that research twice, especially since I still got a lot of trial and error to do to figure out the missing field names for the pokemon and item data.. And I don't really see why someone would make a romhack of Explorers of Time/Darkness over Explorers of Sky anyways..

Why do you even think about hacking EoT/EoD ? It's like hacking ruby/saphir while you have Emerald to deal with. It's a nonsense xD

I never played EoT/EoD but AFAIK they are just EoT without many things. Or perhaps it was just for "the sport" ? xD

Link to comment
Share on other sites

I made a find while messing around with the game's font.

The font data for most dialog and menus is stored inside the kanji_rd.dat file, and the kanji.dic file has something to do with it.

"/FONT/kanji_rd.dat" is structured this way:

Offset:            Length:             Type:           Description:
-------            -------             -------         -----------------------------------
0x0 NbEntries      4                   uint32           Nb of char in the file.
0x4 DataBlockA     (NbEntries * 28)                     Block that contains all the data in the file.
[
   Entry          28
   [
       CharCode   2                   uint16           The code tied to this particular character.
       Unk#1      2                   uint16           Unknown
       CharData   24                  -                The 16x12 pixels(192 pixels total), 1 bpp, linear image data for the character.
       [
       ]
   ]
   ...
]

There is a lot of redundancy in the /FONT/ folder though, and there are at least 2-4 other files with the same character data as kanji_rd.dat, but only editing kanji_rd.dat actually seems to impact dialog and menu text. Also, there is text data that's 4bpp and up in other files, I'm not sure when it could be used, as most text for titles and chapters are just raster images and not text.

Then, the markfont.dat and markfont.pal files contains a lot of symbols and icons used throughout dialogs and menus in the game. Things like the icons for the NDS's buttons, arrows, bullets, etc..

I'm also going to make another wiki update pretty soon, once I gathered enough info.

Second one. And yes I know but I wanted that only mine has the move x)

I'll test by giving the move with lvl up though, to see whether the move itself is buggy or editing RAM after changing data in break the ROM.

Well, the chances of stumbling on another shinx are pretty low unless you go where they spawn, besides, they'd probably have overwritten the move at the level they spawn.

And be sure to let me know how that goes!

Why do you even think about hacking EoT/EoD ? It's like hacking ruby/saphir while you have Emerald to deal with. It's a nonsense xD

I never played EoT/EoD but AFAIK they are just EoT without many things. Or perhaps it was just for "the sport" ? xD

Well, its always possible that, one of these would turn out to be easier to edit than the others, and it would be nice to have everything figured out already. I mean, some games have quirks that sometimes actually unlock more potential about them, like an exploit fixed in the newer editions and whatnot.

Then, some people just do it out of nostalgia, or maybe they have their own reasons.

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...