Skip to content
Lusamine edited this page Mar 30, 2022 · 43 revisions

Before Starting

Yes, CFW is needed to export data from RAM or savedata.

Inputs

  • Your main savedata can be exported using any save manager. This is used to obtain accurate shiny rolls from Pokédex completion and Shiny Charm. Update this save file if you complete more Pokédex entries.

  • Your MMO and MO block can be added in several ways. This must be from while you are in Jubilife Village.

    • If you are exporting your main savedata each time, the program will fetch the save block from the save file if no mmo.bin or mo.bin exists.

    • It is also possible to read these MMO blocks separately. Export block key 7799EB86 and name this mmo.bin. Export block key 1E0F1BA3 and name this mo.bin.
      image

    • Your MO block and MMO block can be exported as a combined file named combo.bin. This should include the 0x190 bytes of the MO block immediately followed by the 0x3980 bytes of the MMO block. This is only available if dumped from RAM, which is not covered here.

  • Place your main savedata and optional mmo.bin/mo.bin or combo.bin in the directory like so.

    image

  • It is possible to have the program check a single spawner by adding a file named spawner.json into the directory. It should be formatted thusly:

    {
      "Seed": "16045686375800883966",
      "Species": 393,
      "BaseCount": 10,
      "BaseTable": "0xD50704A9B3BC059C",
      "BonusCount": 7,
      "BonusTable": "0x4D93B808270B420B"
    }
    
    • Leave BonusTable as 0 for no bonus table.
    • Leave both BaseTable and BonusTable as 0 to simulate a regular MO.
  • The program first checks for the presence of the spawner.json file, then combo.bin file, then the mmo.bin and mo.bin files, then pulls from the save file.

Interpreting Output

Example output from PermuteMMO:

Spawner 10 at (754.6, 44.0, 568.85) shows Kricketot
SpawnInfo { BaseCount = 8, BonusCount = 6, BaseTable = 10966396905780186375, BonusTable = 17605661661388701891, Type = MMO, HasBase = True, HasBonus = True }
* A2|A1|A1|G1|G1|G1|SB           >>> Bonus Spawn1 = Kricketune (F): 12 *(^12) -- NOT ALPHA -- Timid, multi :(
* A4|G1|G1|G1|SB                 >>> Bonus Spawn2 = Kricketune (M):  9 *(^14) -- NOT ALPHA -- Timid, multi :(

Spawner 12 at (454.8, 59.2, 346.7) shows Bronzor
SpawnInfo { BaseCount = 10, BonusCount = 7, BaseTable = 11703510605404349505, BonusTable = 14695981039346656837, Type = MMO, HasBase = True, HasBonus = False }
* A2|A3                          >>> Spawn3 = Bronzor: 17 *(^ 3) -- NOT ALPHA
* A2|A4                          >>> Spawn3 = Bronzor: 17 *(^ 3) -- NOT ALPHA
  • The coordinates (754.6, 44.0, 568.85) are in (x, y, z) format. Look at the first and last coordinate values; y is the distance off the ground and is not represented on a 2D map. Each map is 1024 x 1024 in the (x, z) directions, and (0, 0) is the top left of the map.
  • SpawnInfo shows the size of the outbreak as well as which encounter tables it draws from.
  • Following the paths requires at least a basic understanding of how MMO permutation RNG works.
    • A is for advances. A1 means to clear 1 Pokémon. A2 means to clear 2 Pokémon at once.
      • For multiple advances, it is suggested to engage Pokémon in battle and either defeat or capture multiple before leaving the battle.
      • Timid species such as Starly cannot be multi-battled; many others can be multi-battled if stunned with items prior to sending out your Pokémon.
    • G is for ghost spawns. G2 in this case means to remove 2 spawns in any way (when the first wave is down to the last 4 spawns, multi-battling no longer matters), leave, and return.
      • This refers to the mechanic where if the first wave of the outbreak has fewer than 4 Pokémon remaining, leaving the area and returning advances the seed for ghost spawns that are not populated in game.
      • You can set a flag marker and travel at least 120 meters away. You can also fast travel to a nearby camp that is farther than that just to be sure.
    • SB is for start bonus. Clear everything remaining in the first wave in any way desired to start the bonus wave.
    • Bonus Spawn3 in this case means that when the bonus wave spawns the first 4 Pokémon, the 3rd one is expected to be shiny.
    • Bronzor: 17 *(^ 3) denotes that this is a shiny Bronzor that required 17 shiny rolls and the final Pokémon will have a xor value of 3. A xor value of 0 will be denoted with a ; this means it can appear as square shiny in future games that allow it.
Spawner at (266.5, 69.8, 907.6) shows Clefairy
SpawnInfo { BaseCount = 12, BonusCount = 0, BaseTable = 35, BonusTable = 0, Type = Outbreak, HasBase = True, HasBonus = False }
* A1|A1|A1|A1|A1                 >>> Spawn1 = Clefairy (F): 25 *(^12) -- NOT ALPHA -- TIMID, NOT MULTI
* A1|A1|A1|A1|A2                 >>> Spawn1 = Clefairy (F): 25 *(^12) -- NOT ALPHA -- Timid, multi :(
* A1|A1|A1|A1|A3                 >>> Spawn1 = Clefairy (F): 25 *(^12) -- NOT ALPHA -- Timid, multi :(
* A1|A1|A1|A1|A4                 >>> Spawn1 = Clefairy (F): 25 *(^12) -- NOT ALPHA -- Timid, multi :(
* A1|A2|A2|A1|A2                 >>> Spawn2 = Clefairy (F): 26 *(^ 1) -- NOT ALPHA -- Timid, multi :(
  • Timid, multi :( means the path requires multibattling with a timid species as the predominant spawn. This path can still be possible if the first few spawns generate enough aggressive species or alpha Pokémon to multibattle. This is not tracked by the program and you will have to check yourself. In this case, a Mass Outbreak cannot spawn anything except the original species, so the last 4 paths are not possible through normal gameplay.
  • TIMID, NOT MULTI means this is a possible path with a timid Pokémon.
Clone this wiki locally