Jump to content

Gen 3 Event Generation Algorithm Research (10ANNIV, etc)


Recommended Posts

6 minutes ago, Deoxyz said:

but I propose and prefer the option of a custom tool with identical generation methods used in the distro carts.

See, I personally would love nothing more than something like that. A fan made tool to get new events, the same way as the originals. 

1 minute ago, Invader TAK said:

ROCKS Metang would be cool (considering it ties into Gale of Darkness, easily my favorite of the console games), but if it isn't generated the exact same way as the 10th Anniversary Pokemon, then I wouldn't modify this ROM to distribute that. And that's provided we can modify the ROM.

If that's the case, then I'd be fine with an unofficial tool. Just make versions for GBA, DS and GameCube/Wii as well.

Yeah, I don't know if somebody actually mentioned it or if I interpreted somebody as mentioning it and it's half a figment of my imagination. But at this point, I seriously hope there's a fan made tool that injects event Pokemon into your saves. And creates them exactly like the originals did. Hopefully with a region free switch so I can get cross region events. 

  • Like 2
Link to comment
Share on other sites

I know I only repeat myself when I say this, but hacking a Distribution Multiboot ROM like this isn't as easy as anyone might guess.
It's something I personally would do only for fun and rather not to share it in public since as you already know... it would likely being abused and there would be people out there saying that it is the real thing. Which is not the case and never will be the case to make that clear... 

My idea was actually to hack the ROM to see what happens with the Trash Bytes in case if we simulate the Mystry Mew generation process.
I admit that it was a bit naive to believe that this would work but I never had the chance to research a distribution ROM.
The only thing I was aware of that it is data that is computed and stored during the generation process...
BUT I couldn't imagine how complex it really is... Thanks to the great help of @Sabresite & @Bond697 I do understand it now. 


What we are actually trying right now is a collaboration work.
We research, discovering secrets, document important information...
For now we are just trying to gather as much information together as we can.  
We will document everything and over the time will brainstorming and review the possibilities we have with it.

I personally would like to have better legality check functions. Which I think would be a nice thing to have.
With these information we can create better 3rd Gen legality checking functions than ever before.
I am working together with some collectors and already wiped out some hacks that were traded as being legal for years.
Without them this work wouldn't be possible so I would like to give something back in the first place.
I hope everyone here can understand this.

Link to comment
Share on other sites

It was kinda hard to do without knowing exactly how the Distribution ROM does the seeding, but I managed to download some 10ANNIV Pokemon based on the Seeds I wanted. I noticed that the OTG is not determined using the same method as Wishmkr Jirachi's Berries.
 

Seed   10ANNIV OTG    Wishmkr Berry    rand() / 3 AND 1
0x0000 Female         Ganlon Berry     1
0x0001 Male           Ganlon Berry     1
0x0002 Male           Salac Berry      0
0x0003 Female         Salac Berry      0
0x0004 Male           Salac Berry      0
0x0005 Female         Salac Berry      0
0x0006 Female         Salac Berry      0
0x0007 Male           Ganlon Berry     1


I checked other frames as well. But none of them matched the male/female pattern.
Which brings me to the conclusion that (rand() / 3) & 1 isn't being used for the OTG.

Link to comment
Share on other sites

Nope. I had the same idea, but that's not it...
Maybe we should take a look at what he has sent you.
I would be surprised if it's something far more complicated.

Link to comment
Share on other sites

Oh so the OTG for 10ANNIV can be either Male or Female?
I never noticed that, that's pretty cool. Probably because I was using FR/LG to receive them and they don't display OTG. :P

Link to comment
Share on other sites

I think you got confused.  10anniv otg is:

(rand() >> 7) & 1

if 0, ot gender is 1, if 1, ot gender is 0

 

so take the highest bit of the lower byte of rand().  if it's 0, ot gender is 1, if 1, then otg is 0.

 

0x31 is the ot gender field in the pkm

RAM:02013A66 FC F7 D9 FE                 BL      rand
RAM:02013A6A C0 11                       ASRS    R0, R0, #7      ; rand >> 7 & 1
RAM:02013A6C 38 40                       ANDS    R0, R7          ; gender decision
RAM:02013A6E 00 28                       CMP     R0, #0
RAM:02013A70 0C D0                       BEQ     loc_2013A8C
RAM:02013A72 00 20                       MOVS    R0, #0
RAM:02013A74 41 46                       MOV     R1, R8          ; r8 is sp+0x15
RAM:02013A76 08 70                       STRB    R0, [R1]        ; set sp+0x15 to 0
RAM:02013A78 0A E0                       B       loc_2013A90
RAM:02013A78             ; ---------------------------------------------------------------------------
RAM:02013A7A 00 00                       ALIGN 4
RAM:02013A7C A0 B7 01 02 off_2013A7C     DCD pp_name             ; DATA XREF: createPkm+Er
RAM:02013A7C                                                     ; createPkm+58r
RAM:02013A80 14 60 00 03 dword_2013A80   DCD 0x3006014           ; DATA XREF: createPkm+14r
RAM:02013A84 00 00 FF FF dword_2013A84   DCD 0xFFFF0000          ; DATA XREF: createPkm+2Cr
RAM:02013A88 FF FF 00 00 dword_2013A88   DCD 0xFFFF              ; DATA XREF: createPkm+30r
RAM:02013A8C             ; ---------------------------------------------------------------------------
RAM:02013A8C
RAM:02013A8C             loc_2013A8C                             ; CODE XREF: createPkm+C0j
RAM:02013A8C 40 46                       MOV     R0, R8          ; r8 is sp+0x15
RAM:02013A8E 07 70                       STRB    R7, [R0]        ; set sp+0x15 to 1
RAM:02013A90
RAM:02013A90             loc_2013A90                             ; CODE XREF: createPkm+C8j
RAM:02013A90 30 1C                       MOVS    R0, R6          ; pkm
RAM:02013A92 31 21                       MOVS    R1, #0x31       ; ot gender
RAM:02013A94 42 46                       MOV     R2, R8          ; this is the data ptr with the ot gender decision
RAM:02013A96 FE F7 83 FA                 BL      setPkmPartyData
RAM:02013A9A 07 B0                       ADD     SP, SP, #0x1C
RAM:02013A9C 38 BC                       POP     {R3-R5}
RAM:02013A9E 98 46                       MOV     R8, R3
RAM:02013AA0 A1 46                       MOV     R9, R4
RAM:02013AA2 AA 46                       MOV     R10, R5
RAM:02013AA4 F0 BC                       POP     {R4-R7}
RAM:02013AA6 01 BC                       POP     {R0}
RAM:02013AA8 00 47                       BX      R0

 

Link to comment
Share on other sites

I was just remembering this after we talked about フェスタ メタング...
Sorry for the bad quality. It's from an old video. 




フェスタ メタング 1.png

ポケモンをうけとっています。
でんげんを切らないでください。

フェスタ メタング 2.png

ポケモンがやってきました!
たいせつにしてね。
でんげんを切って、 ケーブルをぬいて
ください。


Source of the video: http://www.filb.de/events/pokemonfesta2005



Looks a bit familiar, right?

10ANNIV LUGIA 1.png

10ANNIV LUGIA 2.png
 

Edited by ajxpk
Link to comment
Share on other sites

43 minutes ago, Ammako said:

What does this show us, other than they used similar graphics for the receiving end? :P Just with white background instead of black.

He might be showing that the 10ANNIV generation method (or at least the multiboot ROM interface) is older than we think.

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

3 hours ago, ajxpk said:

ポケモンをうけとっています。
でんけんを切らないでください。

-----

ポケモンがやってきました!
たいせつにしてね。
でんけんを切って、 ケーブルなぬいて
ください。

Google translate cracks me up sometimes.

I have received Pokemon.
Please do not break the snack.

-----

Pokemon has arrived!
Make it important.
Cut the staple and hold the cable
Please give me.

  • Like 1
Link to comment
Share on other sites

@zeropain

I just tried VBALink 1.8, and almost every case when trying to link with the 10ANNIV, the first window just starts lagging so badly that it's unusable.

However I do sometimes eventually get it to work without the lag and start multiboot mode, and right when it says it's transferring, it freezes the second window completely. I eventually got it to work once, but not again.

H9h6bLf.png

So in theory it should always work perfectly fine if it doesn't lag or freeze. It never lagged when I was trying to figure it out on 1.7, but there it just straight out doesn't emulate a multiboot link.

The Aurora Ticket works with 1.8 just as it did with 1.7, Mystery Gifts work fine. Your guide has all the steps right, it just seems that there is always a problem with the multiboot emulation. That's me though, you said it worked for you so idk.

Link to comment
Share on other sites

6 minutes ago, Invader TAK said:

With all the BS you guys have had getting this thing to work with emulators, I'll stick to actual hardware.

Luckily I can and prefer to use actual hardware as well :D

It would just be nice if we knew a method where the 10ANNIV worked with an emulator just as well as everything else.

Edited by Deoxyz
  • Like 2
Link to comment
Share on other sites

Just now, Deoxyz said:

Luckily I can use actual hardware as well :D

It would just be nice if we knew a method where the 10ANNIV worked with an emulator just as well as everything else.

I can see the uses. Look at the people who managed to get emulators working with Colosseum's e-Reader functionality.

Link to comment
Share on other sites

2 minutes ago, Invader TAK said:

I can see the uses. Look at the people who managed to get emulators working with Colosseum's e-Reader functionality.

That, and for those who actually play on emulators and/or don't have a GBA flashcart

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

1 hour ago, Deoxyz said:

I just tried VBALink 1.8, and almost every case when trying to link with the 10ANNIV, the first window just starts lagging so badly that it's unusable.

This happens to me as well. When i load the 10ANNIV distribution rom and pick the Pokemon i want to send, the first window will freeze, but when i open the Pokemon game in my second VBA Link window, the first window will work as it should be and the ''Waiting...'' message appears immediately.

1 hour ago, Deoxyz said:

However I do sometimes eventually get it to work without the lag and start multiboot mode, and right when it says it's transferring, it freezes the second window completely. I eventually got it to work once, but not again.

The second VBA Link window will freeze for me when the ''Transferring...'' message from the first window of VBA Link disappears (meaning you come to the selection screen). Then i close the first window and the second one will have no problems and it works like it should be (the ''You are receiving the Pokemon now. Please do not turn off the power.'' message appears right after i close the first window).

I dont know if there is a solution to all these ''problems'', but its working more or less (at least for me).

Edited by Guest
Link to comment
Share on other sites

9 hours ago, pMD said:

Was the Aurora Ticket distribution rom ever released to the public?

If you're interested it's at the same sources as the 10ANNIV :^)

 

8 hours ago, zeropain said:

This happens to me as well. When i load the 10ANNIV distribution rom and pick the Pokemon i want to send, the first window will freeze, but when i open the Pokemon game in my second VBA Link window, the first window will work as it should be and the ''Waiting...'' message appears immediately.

The second VBA Link window will freeze for me when the ''Transferring...'' message from the first window of VBA Link disappears (meaning you come to the selection screen). Then i close the first window and the second one will have no problems and it works like it should be (the ''You are receiving the Pokemon now. Please do not turn off the power.'' message appears right after i close the first window).

I dont know if there is a solution to all these ''problems'', but its working more or less (at least for me).

I figured out that much. If you open the windows and roms in a proper sequence, it'll start to connect to transfer everytime. But no matter what, even if I close the first window after it says "Transferring", the second window remains permanently frozen. I have no idea how I got it to work that one time.

Edit: It looks that like after it goes back to the pokemon selection screen in the first window, if you select a pokemon again, it'll unfreeze the second window and will finish the transfer of your original selection successfully. Works every time. It's a little weird from the way it's supposed to work, but it does transfer in the end.

Edited by Deoxyz
Link to comment
Share on other sites

Already shared this with Sabresite.
Yesterday I discovered another unknown 3rd Gen Event Pokemon Algorithm.
A special PID Type that is only used for the PCJP03 Shiny Pichu Eggs! 
 

1st rand() (Unknown)
2nd rand() (Unknown)
3rd rand() PID High (tid ^ sid ^ (rand() >> 0x10 for PID low)
4th rand() (Unknown - Used for Shiny PID?)
5th rand() (Or this one? Or both?)
6th rand() (IV1)
7th rand() (IV2)


It's still an unsolved puzzle but I can say that it looks a little bit like a hybrid between the rand()3 Algorithm + the BGF Zigzagoon's Algorithm.

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