Skip to content
Lusamine edited this page Apr 7, 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"
    }
    
    • For MMOs, find the encounter table hashes in Encounters_NHO.txt and fill it in for the BaseTable and BonusTable.
    • 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 8 at (617.0, 37.3, 698.3) shows Scyther
SpawnInfo { BaseCount = 9, BonusCount = 6, BaseTable = 16058610644841075940, BonusTable = 3326577062020397902, Type = MMO, HasBase = True, HasBonus = True }
* A1|A1|A1|A1|A2|G1|G1|SB|A2            >>> Bonus Spawn2 = α-Kleavor (F):  7 * 31/05/31/31/16/31 Mild
* A1|A1|A1|A1|A2|G1|G1|SB|A3            >>> Bonus Spawn2 = α-Kleavor (F):  7 * 31/05/31/31/16/31 Mild
* A1|A1|A1|A1|A2|G1|G1|SB|A4            >>> Bonus Spawn2 = α-Kleavor (F):  7 * 31/05/31/31/16/31 Mild
* A1|A2|A2|G1|G2|SB|A1|A1               >>> Bonus Spawn1 = α-Kleavor (F): 11 * 09/31/07/31/31/31 Naive
* A1|A2|A2|G1|G2|SB|A1|A2               >>> Bonus Spawn1 = α-Kleavor (F): 11 * 09/31/07/31/31/31 Naive
* A1|A2|A2|G1|G2|SB|A1|A3               >>> Bonus Spawn1 = α-Kleavor (F): 11 * 09/31/07/31/31/31 Naive
* A1|A2|A2|G1|G2|SB|A1|A4               >>> Bonus Spawn1 = α-Kleavor (F): 11 * 09/31/07/31/31/31 Naive
* A1|A3|A1|G2|SB                        >>> Bonus Spawn3 = α-Kleavor (M): 14 * 31/31/25/04/31/31 Adamant
* A2|A1|A1|A1|G1|G1|SB                  >>> Bonus Spawn4 = α-Kleavor (F): 10 * 31/31/31/31/13/31 Careful
* A2|A2                                 >>> Spawn2 = Scyther (M):  8 * 03/00/07/08/26/20 Bold    -- NOT ALPHA
* A2|A2|A2|SB|A1|A1                     >>> Bonus Spawn1 = α-Kleavor (M):  5 * 31/31/31/10/31/07 Modest
* A2|A2|A2|SB|A1|A2                     >>> Bonus Spawn1 = α-Kleavor (M):  5 * 31/31/31/10/31/07 Modest
* A2|A2|A2|SB|A1|A3                     >>> Bonus Spawn1 = α-Kleavor (M):  5 * 31/31/31/10/31/07 Modest
* A2|A2|A2|SB|A1|A4                     >>> Bonus Spawn1 = α-Kleavor (M):  5 * 31/31/31/10/31/07 Modest
* A2|A3                                 >>> Spawn2 = Scyther (M):  8 * 03/00/07/08/26/20 Bold    -- NOT ALPHA
* A2|A4                                 >>> Spawn2 = Scyther (M):  8 * 03/00/07/08/26/20 Bold    -- NOT ALPHA
* A3|A1|A1|G2|SB                        >>> Bonus Spawn3 = α-Kleavor (M):  2 * 10/12/31/31/31/31 Docile
* A3|A1|A2|SB|A2                        >>> Bonus Spawn2 = α-Kleavor (F): 11 * 31/31/08/31/31/15 Bold
* A3|A1|A2|SB|A3                        >>> Bonus Spawn2 = α-Kleavor (F): 11 * 31/31/08/31/31/15 Bold
* A3|A1|A2|SB|A4                        >>> Bonus Spawn2 = α-Kleavor (F): 11 * 31/31/08/31/31/15 Bold
* A3|A3|SB                              >>> Bonus Spawn4 = α-Kleavor (M):  4 * 20/31/31/31/31/30 Naughty

Spawner 9 at (357.6, 28.4, 604.47) shows Mime Jr.
SpawnInfo { BaseCount = 10, BonusCount = 7, BaseTable = 4906894976004192503, BonusTable = 2245380946159215571, Type = MMO, HasBase = True, HasBonus = True }
* A1|A1|A1|A1|A1|A1|G2|SB               >>> Bonus Spawn2 = Mr.Mime (M):  4 * 31/31/31/19/11/31 Adamant -- NOT ALPHA -- Skittish: Single advances!

Spawner 11 at (399.6, 36.0, 845.15) shows Starly
SpawnInfo { BaseCount = 9, BonusCount = 7, BaseTable = 13216515746133562300, BonusTable = 11383613788447320995, Type = MMO, HasBase = True, HasBonus = True }
* A1|A1|A1|A2|G1|SB|A2|A1               >>> Bonus Spawn1 = α-Starly (M):  7 ■ 31/31/31/11/31/06 Calm    -- Skittish: Aggressive!
* A1|A1|A1|A2|G1|SB|A2|A2               >>> Bonus Spawn1 = α-Starly (M):  7 ■ 31/31/31/11/31/06 Calm    -- Skittish: Aggressive!
* A1|A1|A1|A2|G1|SB|A2|A3               >>> Bonus Spawn1 = α-Starly (M):  7 ■ 31/31/31/11/31/06 Calm    -- Skittish: Aggressive!
* A1|A1|A1|A2|G1|SB|A2|A4               >>> Bonus Spawn1 = α-Starly (M):  7 ■ 31/31/31/11/31/06 Calm    -- Skittish: Aggressive!
  • The coordinates (617.0, 37.3, 698.3) 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 means that when the bonus wave spawns the first 4 Pokémon, the 3rd one is expected to be shiny.
    • α-Starly (M): 7 ■ denotes that this is a shiny alpha Starly that required 7 shiny rolls and the final Pokémon will be a square shiny in games with star/square differentiation. A * means it will appear as star shiny instead. LA has only one shiny type so this is not visible.
  • Skittish refers to a Pokémon that will run away when frightened and cannot be multibattled with other skittish Pokémon.
    • Skittish: Single advances! means this is a path that can be traversed by catching all the skittish Pokémon one by one.
    • Skittish: Aggressive! means that this path has enough aggressive species (e.g. evolved species or alpha species) to allow for multibattling. Any number of aggressive species can be multibattled with one skittish Pokémon by throwing items at the skittish Pokémon, attracting the attention of the aggressive Pokémon, and sending out your own Pokémon.
Clone this wiki locally