Jump to content
Sign in to follow this  
XJ55

Getting to Mirage Island

Recommended Posts

Hello

Bulbapedia says: "Every day, a random number between 0 and 65535 is generated by the game. If this number matches the last two bytes of the personality value of any of the Pokémon in the party (that is, the remainder when their personality value is divided by 65536), Mirage Island will appear for that day. "

My Ruby/Sapphire/Emerald's batteries have run dry, so I think the random number generated will always be the same. How can I find out what is that number and check if any of my Pokémon's last two bytes of the personality value match that number or at least create a Pokémon whose last two bytes of the personality value match the Mirage Island number?

Thanks

Share this post


Link to post
Share on other sites

Nobody answered here yet?

Mirage Island Bytes are in the Ruby/Sapphire save file at offset 0x2408.

They also appear several times in the RAM. First time is at 0x02026ABC (0x26ABC in the WRAM).

For example the 2 bytes at 0x2408 in my Ruby save are 86 B0.

That means the PID from one of the Pokemon in my party converted to hex should match XX XX B0 86.

It's also possible to create a Pokemon with a matching PID.

I took that two bytes in reversed order, added two random bytes at the beginning (e.g. D5 62 B0 86) and converted it to decimal to get 3580014726.

Then I used A-Save to change the PID from one of my Pokemon to 3580014726 and I was abled to see Mirage Island!

I'm not sure about Emerald but it seems the bytes are at 0x9460 in the save file.

A better explanation is in my post below!

Edited by BlackShark

Share this post


Link to post
Share on other sites

Thanks. After some PMs we sent each other I was able to get there on my Ruby, Sapphire and Emerald Carts!

Share this post


Link to post
Share on other sites

id need some further information on how this can be done. loading my save file in a hex editor will not do the job for me since the offsets mentioned are either not found or all zero. what kind of tool should be used there?

also: are the offsets the same for all regions?

Share this post


Link to post
Share on other sites

In my post above I forgot about the block shifting in the GBA save files which alters the offsets. I helped XJ55 to find his value through a PM conversation.

Well, I rewrote my explanation and hope it's better to understand now. Sorry for my English in advance. :)

-------------------------------------------------------------------------

Mirage Island Appearance (Ruby, Sapphire & Emerald)

Mirage Island will appear on Route 130 if the 2 bytes from the Mirage Island value in reversed order match the last

2 bytes of the PID from one of the Pokemon in the players party.

The value changes everytime a day passes by. This means if the battery had run dry the value won't change anymore.

It is even possible to visit the island when you already started your game with dry battery. In that case the value will

always be 00 00 (Thanks to XJ55 for letting me know that!).

Mirage Island value location in save file

The save file is splitted into 2 save blocks (and a third unimportant/unknown block).

Each save block is again splitted into 14 sections (IDs 00 - 0D) with 1000 bytes each.

The section ID is located at the end of each section at offset 0xYFF4. Y can be any value from 0 to D.

To find the right section just replace Y with any of those values and look for the byte 02.

The Mirage Island Value are 2 bytes that are located in the section 02 at the following offsets:

[table=width: 250][tr][td]Ruby & Sapphire[/td][td]0xY408 - 0xY409[/td][/tr]

[tr][td]Emerald[/td][td]0xY464 - 0xY465[/td][/tr][/table]

Example (Ruby/Sapphire):

At 0x2FF4 I have found the section ID 02, so I had to look at 0x2408 for my value.

The 2 bytes at 0x2408 in my save are 86 B0.

That means the PID from one of the Pokemon in my party converted to hex should match XX XX B0 86.

Knowing this it is also possible to create a Pokemon with the required PID.

I took that two bytes from 0x2408 in reversed order, added two random bytes at the beginning (e.g. D5 62 B0 86)

and converted it to decimal to get 3580014726.

Then I used A-Save to change the PID from one of my Pokemon to 3580014726 and Mirage Island appeared!

How it looks in the Hexeditor

Note: This example is from Emerald!

tAIH2dn.png

Edited by BlackShark
image added

Share this post


Link to post
Share on other sites

thanks a ton for your answer! i was now able to get this working. i was using the correct value previously but i didnt know you have to reverse the number in order to match your pokemon.

btw, do you know when a mirage island value is created for the very first time? apparently when you start a new game it set to 0 and if your battery is dry it obviously never changes. i would be interested in what event triggers the number in the first place.

also do you know anything about rng manipulation of the lottery? is it similar to mirage island?

Share this post


Link to post
Share on other sites
btw, do you know when a mirage island value is created for the very first time? apparently when you start a new game it set to 0 and if your battery is dry it obviously never changes. i would be interested in what event triggers the number in the first place.

It seems like it will be first generated when the first day passed by.

also do you know anything about rng manipulation of the lottery? is it similar to mirage island?

I knew a little about how to RNG (only gen 5 and maybe gen 4) but nothing about any of the mechanics behind it, sorry.

All I can tell you is where the lottery number is written into the save.

It is near the Mirage Island value in section 02.

In Ruby/Sapphire it is at 0xY456 - 0xY457 and in Emerald it is at 0xY4B2 - 0xY4B3.

You also have to reverse that number.

Share this post


Link to post
Share on other sites

I'm going to ask a very stupid question, and I may be over-simplifying.

If I started Sapphire, with no active battery, then the Mirage Island number is 00 00

If this is correct, and all "100% male" pokemon have a value of 00000000 for their Binary Gender PID, does this mean that a pokemon, like Nidoran-Male, would ALWAYS activate Mirage Island? (I'm really pissed, because I just reset Sapphire).

Share this post


Link to post
Share on other sites
I'm going to ask a very stupid question, and I may be over-simplifying.

If I started Sapphire, with no active battery, then the Mirage Island number is 00 00

If this is correct, and all "100% male" pokemon have a value of 00000000 for their Binary Gender PID, does this mean that a pokemon, like Nidoran-Male, would ALWAYS activate Mirage Island? (I'm really pissed, because I just reset Sapphire).

Unfortunately not.

The last 2 bytes of the PID should be 00 00. That are 16 digits, while the binary for the gender is only 8 digits.

Share this post


Link to post
Share on other sites

And I thought I had something so friggin' simple.

So, I just need to continue with the restarted Sapphire, and use Pokemon that I know the IVs for (because then I know their PID)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...