Jump to content

Pokémon Mystery Dungeon Rescue Team DX Research


Recommended Posts

Since there's already some good progress in Rescue Team DX modding, I figured I'd create a thread here. I'll add more things in the future. Please feel free to contribute!

Here are my research notes: https://www.notion.so/RTDX-Research-Notes-2a8a4c046e2c42d39a81a3ad1694171e

Other interesting resources:

Edited by techticks
  • Like 1
Link to comment
Share on other sites

Data/StreamingAssets/native_data/pokemon/pokemon_data_info.bin

Data/StreamingAssets/native_data/pokemon/experience.bin (and experience.ent)

Here you can see the data I got from these two files https://mysterydungeonwiki.com/wiki/Rescue_Team_DX:Pokémon

Based on the name Data/StreamingAssets/native_data/pokemon_waza_oshie.bin seems to contain data for Tutor Moves (which you can learn from Gulpin). This file also exists in Super. I haven't looked at it yet.

 

Data/StreamingAssets/native_data/camp/camp_habitat.bin
each entry is 4 bytes
if the Pokémon can't be in a Rescue Team Camp (like Mega Evolutions and unused slots), all 4 bytes are FF
if it can be in a Rescue Team Camp, the first byte is the Rescue Team Camp ID (order here, start from 0)
the other 3 bytes are always 00

 

Data/StreamingAssets/native_data/pokemon_evolution.bin

from 0x0 to 0x24 - SIR0 header

each Pokémon (including Mega Evolutions) has 0x14 bytes long entries for each possible evolution (including normal->shiny and shiny->shiny, but not shiny->normal) if a Pokémon (including Mega Evolutions) doesn't have any evolutions all the bytes will be 00s.
examples: Metapod has 2 evolutions because shiny Butterfree is in the game, Eevee has 9 evolutions because shiny Espeon is in the game

0x0 and 0x1 - ID of the evolution (example: Bulbasaur's evolution ID is 02)
0x2 - unknown. usually 00. E2 sometimes (Pichu, Pikachu, Eevee, Porygon, Porygon2, probably more)
0x3 - always 00?
0x4 - amount of Evolution Crystals required
from 0x5 to 0xb - always 00s?
0xc - level required
0xd - evolution method (01 requires a certain level, 02 requires a certain amount of Evolution Crystals)
from 0xe to 0x13 - always 00s?

amount of entries: 0x40a
the last entry starts at adress 0x50ec

Edited by Blue587
updated wiki link
Link to comment
Share on other sites

  • 1 month later...
11 hours ago, wrathsoffire76 said:

Has anyone researched into the Wonder Mail structure?

https://mid-kid.root.sx/pmdrtdx/

https://github.com/mid-kid/pmdrtdx_passwords

That is, assuming you meant rescue passwords, and not Wonder Mail. The format of wonder_mail.bin is close to that of GtI and Super. The passwords are just there, but I don't know about the rest of the data. Wonder Mail isn't all that interesting in these games since it's just a way to get predefined items (and missions in RTDX).

Edited by Blue587
  • Thanks 1
Link to comment
Share on other sites

  • 1 month later...
Guest maxim7w

Internal scripts ( stored in Data/StreamingAssets/native_data/script ) are written in LUA source and can be read easily with any text editor.
Explanations of a few functions and their syntax:

 

Spoiler

 

PlaySe

Plays a sound effect.


Syntax:


PlaySe:{"isWait":[true/false],"symbol":"sound name","fadeInTime":[time in secs],"volume":[float from 0-1],"volumeSymbol":"DEFAULT"}


Example taken from a script: 


PlaySe:{"isWait":false,"symbol":"SE_ENV_BREEZE_LP","fadeInTime":0.5,"volume":1.0,"volumeSymbol":"DEFAULT"}

 

 

 
 
 
 
 
 
 
 
 
Spoiler

PlayManpu

 

Plays a "manpu" (2D sprite, like burn status next to the Pokémon in a dungeon) in a character channel (for example CH:KAMEKKUSU)

Syntax:


PlayManpu:{"isWait":[false/true],"symbol":"internal name"}

Example:


PlayManpu:{"isWait":false,"symbol":"MP_LAUGH_LP"}

 

Spoiler

 

Play2DAnim
 

Plays a 2D animation (for example reaction effects) from the files.

Syntax:


Play2DAnim:{"isWait":[true/false],"id":"internal ID","bundleName":"AB name (for example, ui) ","animName":"animation file name"}

Example taken from script:


Play2DAnim:{"isWait":false,"id":"2D_015","bundleName":"ui","animName":"Anime_Mepachi1_5"}


 

 
 
 
 
 
 
 
 

 

Spoiler

 

SetFace

 

Will change the face of a character ( in a channel like CH:PARTNER:{} ) to a specific eye/mouth emotion type.

Syntax:


SetFace:{"faceType":[number],"eyeType":[number],"mouthType":[number]}

Example taken from script:


SetFace:{"faceType":15,"eyeType":8,"mouthType":8}

Notes: find out the type ids

 

 

Spoiler

 

PlayBgm

 

Plays a music track.

Syntax:
 


PlayBgm:{"symbol":"sound id","fadeInTime":[time in secs],"isLoop":[true/false],"channel":0,"volume":[0-1],"volumeSymbol":"DEFAULT"}

Example taken from script:


PlayBgm:{"symbol":"BGM_EVE_SEPARATION_01","fadeInTime":0.0,"isLoop":true,"channel":1,"volume":1.0,"volumeSymbol":"DEFAULT"}

Notes: Channel? volumesymbol?

 

 

Spoiler

 

LuaWINDOW.DrawFace

 

Draws a portrait face.

Syntax:


LuaWINDOW.DrawFace(FACE_POS.RIGHT_X, FACE_POS.RIGHT_Y, LuaSymAct("japanese/internal Pokémon name"), FACE_TYPE.[EMOTION])

valid FACE_TYPEs: NONE, NORMAL, EMOTION, DECIDE, THINK, HAPPY, SURPRISE, TEARS, SPECIAL[number], SAD, PAIN, ANGRY

Example taken from script:


LuaWINDOW.DrawFace(FACE_POS.RIGHT_X, FACE_POS.RIGHT_Y, LuaSymAct("RIZAADON"), FACE_TYPE.HAPPY)


 

 
 
 
 
 
 
 
 
 

 

Spoiler

 

LuaWINDOW.Talk

 

Writes a message in the globally set language.

Example taken from script:


LuaWINDOW.Talk(LuaSymAct("RIZAADON"),TextID("A04P01_M01E10A_8C_01_0020","★NONE★",[[
  {今日|きょう}は お{祝|いわ}いだな!]]) )

Syntax:
 


LuaWINDOW.Talk(LuaSymAct("Character"),TextID("Internal Text ID","????",[[backup text i guess]]) )


 

 
 
 
 
 
 
 
 
 

Will probably extend this or port this to an own page. 

Link to comment
Share on other sites

15 minutes ago, maxim7w said:

PlaySe:{"isWait":[true/false],"symbol":"sound name","fadeInTime":[time in secs],"volume":[float from 0-1],"volumeSymbol":"DEFAULT"}

It's interesting to note that these Lua files don't consist entirely of Lua. It's instead composed of blobs identified by text such as the following:

-- <<★ActAssetBlob
-- <<★ActCommandBlob
-- <<★LuaBlob

Text that appears after any of these blob identifiers is treated as such. For example, text after "-- <<★LuaBlob" is treated as Lua until the next blob declaration.

Link to comment
Share on other sites

Guest maxim7w

That makes more sense, seems like it's a combination of Lua (LuaBlob), and some kind of internal game scripting language (ActCommandBlob and ActAssetBlob for asset code)

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