![]() |
Pokemon Mystery Dungeon: Explorers of Time info
Updates:
Hi again! I've started another project, though this one is much harder. I'm going to try to figure out scripting in this game (and anything else I can figure out.) What I have so far is easy enough... After using NDSTOOL to unpack the archive, I started with all those .ssb files in the script folders. And here's what I have so far: .SSB info:
Spoiler:
.SSA Info:
Spoiler:
.SSS Info:
Spoiler:
It seems that the "enterXX.ssb" are used first, upon entrance to the place/dungeon/whatever. I believe that enter.sse (the only one with an SSE extension) somehow chooses the correct enterXX.ssb Counterpoint: Not all script folders have one, and not all those that do have multiple enter files. Counter-counterpoint: It's likely that some were removed later. I've also noticed that any u?XX.sss files are not in the .lsd file. And in fact, there is NO .lsd file if the folder only has 'enter' and 'u?XX' files. (Apparently would be a waste.) It seems that all the u?XXXX.ss? files relate to not allowing the hero to go to certain places, or are looping/conditional constructs. (Which I believe is what 0x2B is.) Current progress:
Numbers seem to work as follows on parameters that are expected to be numbers: If the word has it's leftmost bit set to 0 (0x0000 - 0x7FFF) then it is a SIGNED 15-bit number. If the word's leftmost bit is 1 (0x8000 - 0xFFFF) then it is a fraction/float. I think it's signed as well.. According to what I found, "77" codes are a seperate deal than b0/b1 codes. All 77 codes have a non-77 counterpart that does the same thing. Final remarks: My tool is a BIG help, albeit hard to use. Once I get more info understood, I'll make it easier to use =D If anyone would like to help, they are more than welcome to do so. Whether it be research of their own, or figuring out a format. I'd appreciate any info anyone has. =) As I figure things out, I'll update this thread. And... I'll also update my LeafGreen info thread of all the scripts if I get to working on it again. =P .SSB files can and do control the order of script execution, as outlined in unionall.ssb. However, this is rarely used, except in unionall.ssb, or to do certain scripts like setting BGM or saving (though these can also be done via script.) Find my tool here. |
Quick question for everyone... Since my tool would be mainly for PMD, I'd like to know how much interest there is for this. My goal for this is to create a tool that can look through an PMD ROM and get all the script data from it, in a nice tree format. (Just like it is in the ROM itself) This data can be edited using "assembly" (that I will have to "create") or manually (Assuming you know the raw hex.) This editing will be realtime. Changes to the hex will show up in the assembly, and vice versa.
Basic overview is as follows: Features:
Oh... and one other thing. It will be made in C# I might even add Plugin support for expansion, but I really don't know at this point. Here's a screenie of what I have so far. The GUI is likely to change drastically, however. Spoiler:
|
Quote:
As far as scripting itself is concerned, so far, my best bet is looking at all the .ssb files. That said, however... I'll definitely keep arm9.bin in mind. Right now I'm focusing on PMD: Explorers of Time. It was my own assumption that Blue Rescue Team would follow Red Rescue Team's scripting engine, though I have not yet confirmed this. (I'm also assuming Explorers of Darkness is similar to Explorers of Time AND Sky. This is why I chose Time to start with.) Still, thanks for the info! =D |
Quote:
Quote:
Although I think that you should make an automatic comment on disassembled scripts for the movements. Like so: Action for 0000 at type 0123 'moves running wait animation 0000 Or something crazy like that. But whatever, if you don't want to, I can live with it. |
Quote:
|
=)
Quote:
Oh... and it won't only be movement. Pokepics, Items, everything will be included. I may use the whole @define idea, though. We'll see. =P |
Yeah...
I just realized that PMD is based off of Shiren the Wanderer, so you might want to try to look that up too. |
Quote:
|
Does anybody already know something about te soundengine of PMD Exp. T/D?
Because it seems that the game doesn't use the SDAT file format and the Nitro Composer Kit. |
Quote:
|
Quote:
|
Been a while.
Hi again! I haven't been able to work on this much until today for various reasons, including graduation from College. But that's over and done with now, so all is now good for me to be working on this and hopefully finish it! I'll update the first post with new info soon, as I've figured out a bit more about .SSB files. This is getting interesting. Interesting enough to give a few examples.
Example 1: A simple message from your partner, depending on type. Code:
Code:
|
The most complicated is actions. 0x0077 has many different actions depending on what it is, and its size changes depending on what type of action it is. Same with 0xb0, 0xb1, and 0xb2.
Other than those, however, everything else seems to be pretty basic. And that's what I've been attempting to do. Not random ones, but anything I don't know what does, I edit into an early script (on emulator) and see what it does. Some seem to do nothing, like 0x00FE (Beginning of most scripts) and 0x0072 (No idea what this does, but it likely takes 3 parameters.) And! I figured out something! the .SSA files have the locations of all the displayed Characters =D Still figuring out a few other things, but progress has been made =D |
News! I think I just hit a breakthrough! I finally got unionall.SSB to run through my program (so it disassembles it) and I think I also realized something. That one file references ALL the other script files that currently run. All the levels, dungeons, etc. All of them exist (by name) as what I call "Constants" (I may rename it to references now) in unionall.ssb Because of this, I think I now understand what happens as far as script flow of the game. So, a new theory:
New Theory: The ENTIRE script starts with unionall.ssb This one script controls the order the scripts are run in. It also controls what scripts are run, or are not run. What this means, is that all scripts theoretically have this power, and all use it for partner sayings, and interactions. But the ringleader of it all is unionall.ssb, I now believe. Getting more interesting by the minute =D |
Quick update.
Small little update with huge results. I updated my tool to work with showing exactly where goto commands will lead to, and this has gotten me MUCH better at finding out what things do. The debug menu and tests are a big help as well! Most/all sound related commands are now known, setting dungeon modes known, a few placing commands known, and a bit more about actions known. I might actually release an alpha later this week. Maybe on Saturday. In any case, working on this and getting breakthroughs is awesome =D
|
Tool Update!
I'm currently working on fleshing out my current alpha of the tool a bit. I'll be releasing an alpha of it soon, likely within a week! The tool can currently only view script from PMD Explorers of time, though it does attempt to parse Explorers of Sky as well. (It parses incorrectly, however.)
Current features:
|
If this seems like a noobie question- well, it kinda is. ._.
Um. I've been trying to figure out the hex in the m_attack.bin file and monster.bin file... but I'm a little lost. I noticed that both Sky and Time/Darkness have a pretty regular pattern of two zeros, then two numbers, then back (Though the pattern does seem to break down later), but... That's about it. I'm guessing that the numbers are things like the move's power and accuracy and suchforth, and the zeros are flags, but I can't find where one move ends and the next begins. ._. |
Quote:
Code:
51 02 00 00 -> 00000251 = 0x251 = 512 + 50 + 30 + 1 = 593. So where does that lead us? Ack! It leads to the middle of another offset! Now, what do we know? There's a pattern of offsetts, but what comes after them? Are they ALL offsets? Lets take a closer look at all the "integers" Code:
Code:
I honestly don't know if it helps at all, but that was my thought process from the beginning to now. Learning how to interpret Hex data, is like looking through a random stack of papers, finding patterns, then seeing if these patterns make sense. For example, what I'd do next is simple. If they really are offsets, then I'd test it out more. For example, at the end of this offset table, there are FF bytes, then the beginning of some data. Maybe the first part of this data is offset 0? So is the next part at offset 0x12C0? Trial and eror from there. Eventually, I'd try to figure out exactly how big the first attack is from other clues, and see if it matches anything I know. I hope this helps in your venture =D And actually, I may research further, and eventually create an attack modifier (This is all from m_attack.bin) It is certainly interesting! Note: All of this is speculation on my part. I could certainly be wrong. And if I am, I would love for someone to be able to correct me! =D Edit: As it seems, I'm only partly wrong! The format is as follows: 0x0000 integer(4): offset (of table/base) (always 0?) 0x0004 integer(4): number of entries in table. 0x0008 (numEntries*8): entries (numEntries*8) integer(4): padding (0) Entries: base entryLocation: 0x0000 integer(4): offset to attack data 0x0004 Integer(4): Attack data length Attack Data is still unknown, however. Hope this is helpful =P |
Thanks for all the help!
I think I figured out what the second set of data is- while the first is an offset, the first and second bytes in the second set act as a bookmark of sort, showing where the move data begins, and the third and fourth bytes (aka 00 00) show where the attack data ends! And, to my surprise, it appears that monster.bat (which I'm hopeful contains the data on the pokemon) is organized in the exact same fashion! I'm not entirely sure what each byte corresponds to, but I think the second last one might be the move's power (when you divide them by 16, you get some numbers suspiciously similar to the "Star" rankings for each move). Monster, on the other hand... I'm going through a list of PMD stats, to see if any of them match up. If I do find a match, well, that's good news! ^_^ |
Quote:
I did a bit of research on this, as I was very curious, and I found out a lot of the bin files are simply pack files. So all three of the files in that folder have 593 entries. That's one for every Pokemon. Every one of these entries starts with "PKDPX" and also contains a "SIR0" inside of it. Apparently there's no info on how to unpack PKDPX files, but the SIR0 files seem to be cracked, at least partly. I found info here (Near bottom), and here (Top of page), in case you were interested. As for me, right now, I'm working on cracking the .SSS, .SSE, and .SSA formats. It looks like they are really all the same format, but the only thing I know from them is initial position data for characters. |
=D
Lots of work done. Learned a few more commands, and I'm starting to understand the entire structure of script files. It's pretty interesting. I'll have to create documentation of what I know, but that will come at a later date.
Stuff to do:
|
Also, I have to ask...
Why does the "story" scripts seem to react to change, while the "overworld" (the ones you have to voluntarily activate) doesn't seem to change when you change something? |
Quote:
I don't fully understand the talking to people just yet, so I'm not sure. If you meant the enter events, however, then I haven't a clue why. |
I've checked. And nope, they're all .ssb files. No matter what, they won't change - and surprisingly enough, only one copy of the file exists so I don't know what I'm doing wrong.
For example, if I change Ledyba's script, it does nothing at all to affect the game, but when I changed the Beach Cave events, it changes. |
Quote:
"If you mean the UMXX anf/or USXX files, I haven't tested them... but I do know that there are a lot of repeats in those files. So it could be running from one of the 'repeats' that you didn't happen to change." |
| All times are GMT -8. The time now is 8:59 AM. |
![]()
© 2002 - 2018 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2016 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.
Acknowledgements
Use of PokéCommunity Assets
vB Optimise by DragonByte Technologies Ltd © 2023.