5th Gen PRNG Help / Info - Latest: RNG Reporter 9.96.5, PPRNG 1.15.0

I'm having issues with the new RNG Reporter. Apparently when I download and try to open it, my computer sees it as a security risk and deletes it. Is there a way to fix it?
 
Does ID/SID effect the syncability of swarm pokemon? I'm searching for shiny seeds and for the wild pokemon encounter type, some frames are syncable, but when I change the encounter type to swarms some of the same frames become non-syncable. And then when I change my ID/SID they become syncable.
 
Hello all,

Two questions:
I was using my DS Lite to RNG, but now I can use my 3DS. Do I have to recalibrate?
What's the delay on the 3DS between pressing A, and the game starting?

Thanks!
 

Toast++

Nexus is literally the worst.
is a Site Content Manager Alumnusis a Battle Simulator Admin Alumnusis a Programmer Alumnusis a Top Researcher Alumnusis a Top Smogon Media Contributor Alumnusis an Administrator Alumnus
Hello all,

Two questions:
I was using my DS Lite to RNG, but now I can use my 3DS. Do I have to recalibrate?
What's the delay on the 3DS between pressing A, and the game starting?

Thanks!
1) Yes. They parameters are hardware based, so different hardware will give you different results.
2) I don't know. Someone else can get that part.
 
I may as well start throwing this stuff up here:

Item or Encounter Decision for Bridges

Code:
----------------------------------------------------------------------------------------------------------------------------
(bridge item/encounter) - driftveil


02005736 6863     ldr     r3,[r4,#0x4]
02005738 F096EC98 blx     #0x209C06C // switch to ARM, go forth and prosper to 0209C06C
-----RNG advancement here branch with link and exchange(link back to link register,  exchange- THUMB<->ARM)

(rng.multiply())
0209C06CE92D4030  stmfd r13!, (r4,r5,r14)   //push to the stack- highest to  lowest  registers(link reg, 0x64, lower half rng-location, not value)p
0209C070 E0845290  umull r5, r4, r0, r2       //mult.  r0 x r2, move result to r4/r5
0209C074 E0244390  mla   r4, r0, r3, r4       // seems to always resolve to 0
0209C078 E0244192  mla   r4, r2, r1, r4       // seems to always resolve to 0
0209C07C E1A01004 mov  r1, r4                 // (upper half of next rng seed is set)
0209C080 E1A00005 mov  r0, r5                 // (lower half of  next rng seed is set)
0209C084 E8BD4030 ldmfd r13!,(r4, r5, r14)//unwind the stack!  the math is done!
0209C088 E12FFF1E bx    r14                   //follow the link register home!(02005701)

0200573C 6922     ldr     r2,[r4,#0x10]
0200573E 6963     ldr     r3,[r4,#0x14]
02005740 1810     add     r0,r2,r0
02005742 414B     adc     r3,r1
02005744 6020     str     r0,[r4]
02005746 6063     str     r3,[r4,#0x4]
02005748 1C18     mov     r0,r3
0200574A 2100     mov     r1,#0x0
0200574C 2300     mov     r3,#0x0
0200574E 1C2A     mov     r2,r5
02005750 F096EC8C blx     #0x209C06C

//this is where does the u32 x1000 from the dust clouds.  it turns out a bit different in the end, though
64bit_Mult();

02005754 1C08         mov  r0, r1   // final result
02005756 BD38         pop  (r3-r5,r15)  // restore stack, jump back to restored r15

021AA9D0  0400        lsl        r0, r0, #0x10 // r0 = result of rng call for some range of values shifted left by 16 bits
021AA9D2  0C01        lsr        r1, r0, #0x10 // r1 == result shifted back down 16 bits  (upper 16 bits cleared)
021AA9D4  7B20        ldrb     r0, [r4, #0xC]  // r0 == value at 2257044
021AA9D6  2807        cmp    r0, #0x7 //  r0 == 7
021AA9D8  D10B       bne    #0x21aa9f2 // nope, branching down..
021AA9DA 29C8     cmp     r1,#0xC8 // 
021AA9DC D200     bcs     #0x21AA9E0 // branch if greater than or equal to 200dec - branch to a battle if less than 200(to 21AAA06)
021AA9DE E012     b       #0x21AAA06 // to 21AAA06

021AA9E0 F000FB56 bl      #0x21AB090

021AB090 B510     push    {r4,r14}
021AB092 24FA     mov     r4,#0xFA
021AB094 00A4     lsl     r4,r4,#0x2 // fa -> 3e8
021AB096 1C20     mov     r0,r4 // save 1000dec as an argument to pass to the multiplication/adv function
021AB098 F65AFB46 bl      #0x2005728 // to rng.advance to prep for item calc


--to battle if less than 200dec
021AAA06 1C28     mov     r0,r5 // r0 == 23647D8
021AAA08 2101     mov     r1,#0x1
021AAA0A F7FFFAA9 bl      #0x21A9F60
So, what is happening here:

Code:
-Advance the RNG using the 64-bit multiplication function
-Multiply the u32 of the RNG by 3E8(1000dec) then right-shift 32 bits
-If that result is under 200, you will encounter a poke.  If the result is 200 or greater, you will find a feather.
The item decision is just about done. It's sort of similar to dust cloud items. And just to note: yes, this means that you have an 80% chance of finding a feather when you run into a shadow on a bridge.

And here's the item decision
Code:
bridge item decision
----------------------------

02005736 6863     ldr     r3,[r4,#0x4]
02005738 F096EC98 blx     #0x209C06C // switch to ARM, go forth and prosper to 0209C06C
-----RNG advancement here branch with link and exchange(link back to link register,  exchange- THUMB<->ARM)

(rng.multiply())
0209C06CE92D4030   stmfd r13!, (r4,r5,r14)   //push to the stack- highest to  lowest   registers(link reg, 0x64, lower half rng-location, not value)p
0209C070 E0845290  umull r5, r4, r0, r2       //mult.  r0 x r2, move result to r4/r5
0209C074 E0244390  mla   r4, r0, r3, r4       // seems to always resolve to 0
0209C078 E0244192  mla   r4, r2, r1, r4       // seems to always resolve to 0
0209C07C E1A01004 mov  r1, r4                 // (upper half of next rng seed is set)
0209C080 E1A00005 mov  r0, r5                 // (lower half of  next rng seed is set)
0209C084 E8BD4030 ldmfd r13!,(r4, r5, r14)//unwind the stack!  the math is done!
0209C088 E12FFF1E bx    r14                   //follow the link register home!(02005701)

0200573C 6922     ldr     r2,[r4,#0x10] // put the rng back, get ready to do the standard u32 * XXX(or skip it for pid calcs)
0200573E 6963     ldr     r3,[r4,#0x14]
02005740 1810     add     r0,r2,r0
02005742 414B     adc     r3,r1
02005744 6020     str     r0,[r4]
02005746 6063     str     r3,[r4,#0x4]
02005748 1C18     mov     r0,r3
0200574A 2100     mov     r1,#0x0
0200574C 2300     mov     r3,#0x0
0200574E 1C2A     mov     r2,r5
02005750 F096EC8C blx     #0x209C06C

//this is where does the u32 x1000 same as the dust clouds.  it turns out a bit different in the end, though
64bit_Mult();

02005754 1C08         mov  r0, r1   // final result
02005756 BD38         pop  (r3-r5,r15)  // restore stack, jump back to restored r15

021AB09C 0400     lsl     r0,r0,#0x10  // clearing up the multiplied out result from u32 * X
021AB09E 0C00     lsr     r0,r0,#0x10 // /\
021AB0A0 3C64     sub     r4,#0x64 // 1000 - 100 == 900dec
021AB0A2 42A0     cmp     r0,r4 // compare the last u32 multiply with 900dec
021AB0A4 D20E     bcs     #0x21AB0C4 // branch here if greater than or equal to 900
021AB0A6 2496     mov     r4,#0x96 // r4(900dec) is done, set it to 0x96 and get ready to set it up for the next multiplier
021AB0A8 00A4     lsl     r4,r4,#0x2 // set r4 to 0x258(600dec)
021AB0AA 1C20     mov     r0,r4 // move the 600dec to r0 as an argument for the next multiplication
021AB0AC F65AFB3C bl      #0x2005728

--less than 900, so u32 * 600dec multiplier
rng.advance();
02005728 B538     push    {r3-r5,r14} // this all just sets up the rng for multiplication
0200572A 1C05     mov     r5,r0
0200572C 480A     ldr     r0,=#0x20AA1B4
0200572E 6904     ldr     r4,[r0,#0x10]
02005730 68A0     ldr     r0,[r4,#0x8]
02005732 68E1     ldr     r1,[r4,#0xC]
02005734 6822     ldr     r2,[r4]
02005736 6863     ldr     r3,[r4,#0x4]
02005738 F096EC98 blx     #0x209C06C

(rng.multiply())(via 64-bit multiply function)

0200573C 6922     ldr     r2,[r4,#0x10] // put the rng back, get ready to do the standard u32 * XXX(or skip it for pid calcs)
0200573E 6963     ldr     r3,[r4,#0x14]
02005740 1810     add     r0,r2,r0
02005742 414B     adc     r3,r1
02005744 6020     str     r0,[r4]
02005746 6063     str     r3,[r4,#0x4]
02005748 1C18     mov     r0,r3
0200574A 2100     mov     r1,#0x0
0200574C 2300     mov     r3,#0x0
0200574E 1C2A     mov     r2,r5
02005750 F096EC8C blx     #0x209C06C

u32 * XXX multiplier
rnd.calc();

02005754 1C08         mov  r0, r1   // final result
02005756 BD38         pop  (r3-r5,r15)  // restore stack, jump back to restored r15

021AB0B0 2164     mov     r1,#0x64  // r1 to 100dec
021AB0B2 F6F1E90A blx     #0x209C2C8

--switch statement?--
0209C2C8 E3510000 cmp     r1,#0x0 // r1 to 0 and then...
0209C2CC 012FFF1E bxeq    r14 // not equal, no branch
0209C2D0 E1500001 cmp     r0,r1 // r0 to r1 and then
0209C2D4 31A01000 movcc   r1,r0 // false
0209C2D8 33A00000 movcc   r0,#0x0 // false
0209C2DC 312FFF1E bxcc    r14 // false
0209C2E0 E3A0201C mov     r2,#0x1C 
0209C2E4 E1A03220 mov     r3,r0,lsr #0x4 // right-shift r0 by 4, place in r3 - knock off rightmost digit
0209C2E8 E1510623 cmp     r1,r3,lsr #0xC  (if r1 < 0)
0209C2EC D2422010 suble   r2,r2,#0x10 // r1 isn;t so don't
0209C2F0 D1A03823 movle   r3,r3,lsr #0x10 // same here
0209C2F4 E1510223 cmp     r1,r3,lsr #0x4  (if r1 < 1)
0209C2F8 D2422008 suble   r2,r2,#0x8 // don;t
0209C2FC D1A03423 movle   r3,r3,lsr #0x8 // no
0209C300 E1510003 cmp     r1,r3 (if r1 < r3)
0209C304 D2422004 suble   r2,r2,#0x4 // false
0209C308 D1A03223 movle   r3,r3,lsr #0x4 // false
0209C30C E1A00210 mov     r0,r0,lsl r2 // left-shift r0 by 28 bits, leaving just the lowest digit
0209C310 E2611000 rsb     r1,r1,#0x0 // this does the "opposite" subtract.  instead of 64-0, it's 0-64, leaving it as FFFFFF9C, not 64
0209C314 E0900000 adds    r0,r0,r0 // double r0- hasn't overflowed yet
0209C318 E0822082 add     r2,r2,r2,lsl #0x1
0209C31C E08FF102 add     r15,r15,r2,lsl #0x2 // i think this is sort of the "switch" part . 1c << 1 = 38 << 2 = E0 == 224dec; this tells it how much to skip.  add E0 to r15(program counter) to make it skip to a specific spot in the list -> to C474
0209C320 E1A00000 nop
0209C474 E0B13083 adcs    r3,r1,r3,lsl #0x1
0209C478 30433001 subcc   r3,r3,r1
0209C47C E0B00000 adcs    r0,r0,r0
0209C480 E0B13083 adcs    r3,r1,r3,lsl #0x1
0209C484 30433001 subcc   r3,r3,r1
0209C488 E0B00000 adcs    r0,r0,r0
0209C48C E0B13083 adcs    r3,r1,r3,lsl #0x1
0209C490 30433001 subcc   r3,r3,r1
0209C494 E0B00000 adcs    r0,r0,r0
0209C498 E0B13083 adcs    r3,r1,r3,lsl #0x1
0209C49C 30433001 subcc   r3,r3,r1
0209C4A0 E0B00000 adcs    r0,r0,r0 // last add with carry - single digit 
0209C4A4 E1A01003 mov     r1,r3
0209C4A8 E12FFF1E bx      r14

[b]
021AB0B6 0400     lsl     r0,r0,#0x10 // prepping result of adcs operations
021AB0B8 0C00     lsr     r0,r0,#0x10 // here too
021AB0BA 3C23     sub     r4,#0x23 // this is the 258(600dec) from the last u32 multiply calc-> gives us 258-23 == 235(value of the first wing in hex)
021AB0BC 1900     add     r0,r0,r4 // add result of the adcs calcs with the "base" wing value to give a wing hex number to give the player
021AB0BE 0400     lsl     r0,r0,#0x10 // prep result of operation
021AB0C0 0C00     lsr     r0,r0,#0x10 // still...
021AB0C2 BD10     pop     {r4,r15}
[/b]
---------------------------------------------------------------------------------------------------------
021AB0A4 D20E     bcs     #0x21AB0C4 // branch here if greater than or equal to 900

--if greater than or equal to 900
[b]021AB0C4 4800     ldr     r0,=#0x23B // this is the item to give if >=900 and then jump back to the program[/b]
021AB0C6 BD10     pop     {r4,r15}

--------------------------------------------------------------------------------------
So, what's happening here:
Code:
-If the item or encounter calc resulted in an item, continue to the RNG advancement function 
-After advancement, do u32 * 1000dec again
-If the result of this calc is 900 or over, the player receives a Pretty Wing
-If it is under 900, back to the RNG advancement function again
-After advancing, multiply the u32 by 600dec and run the result through the switch statement(I guess?)
-Once it's run through, add the result(number 0-6)  to 235, giving you a number 235-23A.  This number corresponds to the item you will receive
I'll provide some notes and an explanation in the morning. It's rather long and annoying. The only thing I will say quickly now is that once you hit that 80% chance of a feather, it's a 90% shot you'll get one of:

0235 Health Wing*
0236 Muscle Wing*
0237 Resist Wing*
0238 Genius Wing*
0239 Clever Wing*
023A Swift Wing*

and a 10% chance you'll get a Pretty Wing(023B).
 
Exactly what DOES the timer0 mean/do?

Also, I'm trying to calibrate, I caught Kyurem, found it's IV range via the Pokedex-IV checker, punched in the time/date I reset the game, choose my DS system and game, hit search, and nothing comes up. What gives?
 
Exactly what DOES the timer0 mean/do?

Also, I'm trying to calibrate, I caught Kyurem, found it's IV range via the Pokedex-IV checker, punched in the time/date I reset the game, choose my DS system and game, hit search, and nothing comes up. What gives?
Expand the Timer0 search range and make sure you're not soft-resetting.

Can the Victini from the Wifi event be shiny?
Nope.
 

Kaphotics

Remodeling Kitchens
is a Top Researcher Alumnusis a Top Contributor Alumnus
It's a little too much.

If you want you can change it to *5 and just look for zeroes.

From the Research Thread
Code:
0	Initial
1	Sync
[U]2	Item or Pokemon Calc[/U]
[U]3	ESV - Land[/U]
[U]4	PID[/U]
5	Nature
4 - PID
3 - ESV (you don't care about this)
2 - I/P Decision

In all you have to go backwards twice, not three times. Just delete one of the previous customs and shift all the calcs upwards. Change the *1000 to *5 for ease of viewing.

Maybe the structure isn't right (missing level calc frame), if this is true then your current setup is fine.
5 - PID
4 - Level
3 - ESV
2 - I/P Decision
1 - Sync
0 - Initial

Looks like no full mapping of that structure was posted since the Level Calc and I/P decision were figured out.
 
Thank you very much for this work and for the RngReporter, but in the 9.92 version there's a problem: In "seed to time" for C-gear Seed the minutes are 4 minutes after the effective time.
Example:
in 9.9 version my seed was at "15.53.59 at 4-12-2011, and with this I've Hitted my seed; in 9.92 version is at 15.57.59 at 4-12-2011 and It doesn't it my seed.
Thank you

I hope that in next version of RngReporter this mistake will correct...
 
It's a little too much.

If you want you can change it to *5 and just look for zeroes.

From the Research Thread
Code:
0	Initial
1	Sync
[U]2	Item or Pokemon Calc[/U]
[U]3	ESV - Land[/U]
[U]4	PID[/U]
5	Nature
4 - PID
3 - ESV (you don't care about this)
2 - I/P Decision

In all you have to go backwards twice, not three times. Just delete one of the previous customs and shift all the calcs upwards. Change the *1000 to *5 for ease of viewing.

Maybe the structure isn't right (missing level calc frame), if this is true then your current setup is fine.
5 - PID
4 - Level
3 - ESV
2 - I/P Decision
1 - Sync
0 - Initial

Looks like no full mapping of that structure was posted since the Level Calc and I/P decision were figured out.
Oh, so what do you suggest I do?
 
Do you know if the PIDRNG frame is advanced by the seasonal weather conditioons in Route1/Unova? I think those don't occur when you set your season to Summer, right? We would like to test it ourself but we haven't access to a DSlite in the moment.
 
I'm having trouble currently rng a shiny flawless volcarona with modest nature
My result. In time finder! Is Frame 5 nearby shiny is 367
I calculated my starting frame in pid and i got 47 then. I walked 128 steps with 4 pokemon in party to advanced the iv frame by 5 which my target iv frame and I also advanced my pid frame by 256(128 steps ) + 47 for my starting pid frame at the same time I got. now. 303 in my pid frame .I only need to do is chatter 64 times to hit my shiny frame but instead of shiny i caught a modest with perfect iv why it is not shiny? Pls help me understand this and sorry for my bad english
 
Do you know if the PIDRNG frame is advanced by the seasonal weather conditioons in Route1/Unova? I think those don't occur when you set your season to Summer, right? We would like to test it ourself but we haven't access to a DSlite in the moment.
I believe it is. Not 100% sure on it but I heard so when I was learning to RNG 5th Gen roamers.
 
Could you clarify that a little? I don't understand how C-Gear Seeds could be more convenient, unless you don't have a DS Lite. (And I may have heard that it's possible on other system variants now too)
 
Okay so I have a problem with RNG reporter 9.9 (just updated today)
I try to calculate my parameters and it finds no result. I am inputting my mac address, selecting my game and DS type and everything else but it seems to just not want to work for me. It worked fine in 9.81 same DS.
 

Sprocket

P(n) = 1 - (1 - P(1))^n
Okay so I have a problem with RNG reporter 9.9 (just updated today)
I try to calculate my parameters and it finds no result. I am inputting my mac address, selecting my game and DS type and everything else but it seems to just not want to work for me.
Are you inputting the correct date and time? You might also try increasing the time range from a 10 second window to a 60 second window.

Also consider that your DS's clock is rolling over to the next minute. There is a lag from when you start your game on the DS Menu to when your actual seed is generated. For a standard DS/DSLite, you have a 1 second lag, but for a DSi/DSiXL it's 3 seconds, and for a 3DS it's a 9 second lag (meaning if you hit A on your DS Menu at 12:34:56, on a DSLite it will tick to 12:34:57, on a DSi it will tick to 12:34:59, and on a 3DS it will tick to 12:35:05). This will have an impact on your parameter search.

I was using my DS Lite to RNG, but now I can use my 3DS. Do I have to recalibrate?
What's the delay on the 3DS between pressing A, and the game starting?
1. Yes
2. For me, i get around 9 seconds. However I suspect it's more like 8.5 seconds. It's also a lot harder to RNG abuse on a 3DS without an external clock to synchronize to.
 
Yeah I've been re-checking everything from my MAC Code to my time and date, everythings all good there and I'm on a DS Lite oops forgot to say and I know about the 1 second delay.
 

Users Who Are Viewing This Thread (Users: 1, Guests: 12)

Top