Jump to content

Recommended Posts

Posted

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

Posted (edited)

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
Posted

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

  • 2 weeks later...
Posted

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?

Posted (edited)

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
Posted

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?

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

  • 1 month later...
  • 4 months later...
Posted

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

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

  • 2 weeks later...
  • 7 years later...
Posted (edited)
On 2014/12/7 at AM4点45分, TungstenMudkip said:

我要问一个非常愚蠢的问题,我可能过于简单化了。

如果我启动 Sapphire,没有活动电池,那么 Mirage Island 编号为00 00

如果这是正确的,并且所有“100% 男性”口袋妖怪的二进制性别 PID 值为 00000000,这是否意味着像 Nidoran-Male 这样的口袋妖怪总是会激活幻影岛?(我真的很生气,因为我刚刚重置了蓝宝石)。

In fact, Mirage Island Value has a one-to-one correspondence the elapsed days since the creation of the save file ( the elapsed days started from 0 after you set clock at the begining of game ). It means if you start game at 2000/01/01(rtc) and play to 2099/12/31, you can meet 36525 Mirage Island values in total (removing duplicate values, the number is reduced to 27925). Which also means if you catch a wild Pokémon, its PID must landed in 27925/65536 and those PID landed in 37611/65536 will never let you get to Mirage Island. If you start game laterly, the number of Mirage Island values will decrease less than 36525 (27925).

And this can make a list to check what Mirage Island Value you'll meet in which day.《幻之岛值与经过RTC天数的标准对应表》

Like Mirage Island Value 0x0000,  it will appears in 0, 1 and 7410 days after  you set your clock in game. If you have a pokemon with PID xxxx0000, you can use it in whole time on dry battery RSE or the first and second days on powered battery RSE to launch Mirage Island. I've checked wheather there is a pokemon from in game trade or gift pokemon who has this PID in GEN3, however it didn't exist.

So I created a totally new method last year which different from the past method cheating or rng abusing etc. and can be used on cartidge. It's a little complicated, so I just describe it in simple and you can see whole theory in links or just follow steps in video. I also made a web calculator to help use this method( theory and video links are also posted in web calculator). (GEN3 Mirage island calculator v1.3)

There are two important things: PID value and MIrage Island value. The porblem is how we get it.

First, PID value. Normally, we cant get it without dumping sav or use other tools to check internal data. However in GEN3, there is a pokemon who can help us —— Spindas. We can calculate it PID value through it dots. and there also web calculator to check it.

Second, MIrage Island value. Through the list I have already made (the link above and it's also added to my web calculator), you can check when will Spindas' PID launch Mirage Island. Then using RTCread( a tool normally used to fix berry glitch and new battery glitch, it wont do change to sav) jump to this time. (you need to know when you start your game in RTC and the elapsed days , it can also calculator without dump or cheat).

Then you can take your Spinda and get to Route 130 to launch Mirange Island.

 

Edited by Wokann
  • 1 year later...
Posted
On 5/25/2014 at 5:59 AM, BlackShark said:

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!

http://i.imgur.com/tAIH2dn.png

Are you able to help me? I’m trying to reach Mirage Island but I’m not reach savvy to figure this out myself with the PID and such. 

Posted
5 hours ago, Kbuzz said:

Are you able to help me? I’m trying to reach Mirage Island but I’m not reach savvy to figure this out myself with the PID and such. 

There is a random value that has to match the higher half of one of your Pokemons PID (the last 4 characters you see in PKHeX).

So here's what you could do:

In the Event Constants you could edit the Mirage Island RND (High). Keep in mind that the values in the Event Constants are shown as decimal while the PID is hexadecimal. You have to convert it.
In this case 2670 converted to decimal is 9840, so I would have to set Mirage Island RND (High) to 9840.

Untitled-2.png.def3fe1672c9affaec61f7134378ca66.png

 

Alternatively there's a PKHeX plugin that simplifies the process a bit. It shows if you already have a Pokemon with a matching PID somewhere. If you don't have one, simply change the seed value to match a PID.
In this case both valus are hexadecimal so you won't have to convert.

Untitled-1.png.d5756752aea1792a65e001b8591f0216.png

 

  • Thanks 1
Posted
16 hours ago, BlackShark said:

There is a random value that has to match the higher half of one of your Pokemons PID (the last 4 characters you see in PKHeX).

So here's what you could do:

In the Event Constants you could edit the Mirage Island RND (High). Keep in mind that the values in the Event Constants are shown as decimal while the PID is hexadecimal. You have to convert it.
In this case 2670 converted to decimal is 9840, so I would have to set Mirage Island RND (High) to 9840.

Untitled-2.png.def3fe1672c9affaec61f7134378ca66.png

 

Alternatively there's a PKHeX plugin that simplifies the process a bit. It shows if you already have a Pokemon with a matching PID somewhere. If you don't have one, simply change the seed value to match a PID.
In this case both valus are hexadecimal so you won't have to convert.

Untitled-1.png.d5756752aea1792a65e001b8591f0216.png

 

Thank you! I will try this soon 🤩 I may have more questions (sorry I’m advance) and thank you so much for the help!!

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