Go Back   Smogon Community > Pokémon > Wi-Fi
Register FAQ Social Groups Calendar Search Today's Posts Mark Forums Read

Reply
 
Thread Tools
Old Nov 29th, 2011, 6:28:22 PM   #826
chiizu
PPPPPPPPPPPPPPPPPPPPPPPPP RNG
is a Programmeris a Pokémon Researcher
 
chiizu's Avatar
 
Join Date: Nov 2010
Posts: 369
Default

Quote:
Originally Posted by Fat OmegaDonut View Post
At the moment, we need volunteers with the corresponding language versions to help get DSi\3DS support for those games. Please post if you are able to help (and have lots of patience).
Actually just sent you a PM about this before seeing this post. I've got a volunteer for the German games lined up.
__________________
RNG Abuse for Mac Users: PPRNG 1.15.0
chiizu is online now   Reply With Quote
Old Dec 1st, 2011, 8:50:01 PM   #827
Hazey
 
Hazey's Avatar
 
Join Date: Aug 2011
Posts: 46
Chicago, Illinois
Default

I can buy some different language games or consoles. What do you guys need. I am going to be super bored this winter.
__________________
Best Regards,

Hazey (click name for trading thread)
Hazey is offline   Reply With Quote
Old Dec 1st, 2011, 9:50:19 PM   #828
Njb013
 
Njb013's Avatar
 
Join Date: Apr 2010
Posts: 141
Default

Just wanted to throw a quick note of thanks to all involved in researching for your hard work.

Also, my shiny Misdreavus in a Battle CD in Pokemon XD doesn't provide any revelations in regards to shinies, does it?

I was going to volunteer to take a snapshot, but I believe that the data on my GC memory cards was all lost. I'll check tomorrow when I can, but I'm pretty sure it's gone =(

Last edited by Njb013; Dec 1st, 2011 at 9:50:45 PM. Reason: Spelling fail.
Njb013 is offline   Reply With Quote
Old Dec 2nd, 2011, 7:43:45 AM   #829
chiizu
PPPPPPPPPPPPPPPPPPPPPPPPP RNG
is a Programmeris a Pokémon Researcher
 
chiizu's Avatar
 
Join Date: Nov 2010
Posts: 369
Default

German DSi/3DS Parameters.
...


Thank you to Kokoromori for doing the leg work to get the seeds. This guy was super consistent on his timing!

We still need volunteers for:
French
Italian
Korean
Spanish
__________________
RNG Abuse for Mac Users: PPRNG 1.15.0

Last edited by chiizu; Feb 17th, 2012 at 8:22:42 AM.
chiizu is online now   Reply With Quote
Old Dec 2nd, 2011, 2:49:20 PM   #830
Tux
 
Join Date: Dec 2011
Posts: 11
Default

I don't know if the two following routines have been already analyzed by somebody, but I'll post them

Feebas tiles determination in R/S/E

An unsigned 16bits number, called "feebas seed" is generated everyday, or when changing the "trendy phrase" in Dewford city. It is used to determine the feebas tiles.

The tiles are arranged like this : from left to right, then from up to down.
From tile #133, the order is modified : the row is in fact : #133, #134 etc ...
However, I cannot locate tiles #296 to #299 (included)

...


Oh, I have made some CBA codes to retreive the seed (and replacing the first party Pokémon's Attack stat), but I can't get them to work.

CBA Codes that don't work


Code:
08084AB0 0400     lsl     r0,r0,10h     ; this is at 0x080B49F2 in Emerald (U), 0x0808196C in R/S (J), 0x080B414A E (J), 0x08084FEC R/S (FR), 0x080B4A06 Emerald (FR)
08084AB2 0C00     lsr     r0,r0,10h
08084AB4 2831     cmp     r0,31h        ; see post #749
08084AB6 D907     bls     8084AC8h      
08084AB8 E03E     b       8084B38h      ; if the calculated slot is not feebas's ([0;49]), skip the feebas tile determination routine
08084ABE 0202     lsl     r2,r0,8h                                
08084AC0 DC00     bgt     8084AC4h       ; DIFFERENT ON R/S JAP and FR                         
08084AC2 0839     lsr     r1,r7,20h                               
08084AC4 2001     mov     r0,1h         ; feebas = true                           
08084AC6 E038     b       8084B3Ah
                                
08084AC8 481F     ldr     r0,=2025734h  ; r0 = 0x03005D8C (pointer) in Emerald (U)                          
08084ACA 4B20     ldr     r3,=2DD6h     ; 0x2E6A in Emerald.                          
08084ACC 18C0     add     r0,r0,r3      ; 0x0202850A in R/S (U and FR), 0x02028896 E (U), 0x0202826A R/S (J), 0x02028542 E (J), 0x02028882 E (FR)                      
08084ACE 8800     ldrh    r0,[r0]		; load feebas seed on r0                                 
08084AD0 F000F850 bl      8084B74h      

	08084B74 0400     lsl     r0,r0,10h                               
	08084B76 0C00     lsr     r0,r0,10h                               
	08084B78 4901     ldr     r1,=202FF80h ; store r0 in 0x202FF80 (R/S U)                            
	08084B7A 6008     str     r0,[r1]  
	08084B7C 4770     bx      r14  
                     
08084AD4 2500     mov     r5,0h         ; r5 (loop counter) = 0;                          
08084AD6 4E1E     ldr     r6,=1BFh      ; r6 = 0x1BF                          
08084AD8 F000F83C bl      8084B54h 

	08084B54 4A04     ldr     r2,=202FF80h                             
	08084B56 6811     ldr     r1,[r2]       ; load full seed                          
	08084B58 4804     ldr     r0,=41C64E6Dh                           
	08084B5A 4348     mul     r0,r1                                   
	08084B5C 4904     ldr     r1,=3039h     ; 0x3039 NOT 0x6073 !                          
	08084B5E 1840     add     r0,r0,r1                                
	08084B60 6010     str     r0,[r2]		; store full (u32) result of (0x41C64E6D * seed + 0x3039) at 0x202FF80                        
	08084B62 0C00     lsr     r0,r0,10h     ; r0 (output) >>= 16                           
	08084B64 4770     bx      r14
                               
08084ADC 0069     lsl     r1,r5,1h		; r1 = 0                                
08084ADE 466A     mov     r2,r13        ; r2 = sp                          
08084AE0 1854     add     r4,r2,r1      ; r4 = r2 + 0                          
08084AE2 0400     lsl     r0,r0,10h                               
08084AE4 0C00     lsr     r0,r0,10h                               
08084AE6 1C31     mov     r1,r6         ; r1 = 0x1BF                          
08084AE8 F15CFA0E bl      81E0F08h      ; r0 = r0 mod r1                          
08084AEC 8020     strh    r0,[r4]       ; store r0 ( tile ) on the stack                          
08084AEE 0400     lsl     r0,r0,10h                               
08084AF0 2800     cmp     r0,0h         ; if r0 is null                          
08084AF2 D100     bne     8084AF6h                 
08084AF4 8026     strh    r6,[r4]       ; store 0x1BF instead                          
08084AF6 8820     ldrh    r0,[r4]       ; load calculated feebas tile                          
08084AF8 3801     sub     r0,1h                                   
08084AFA 0400     lsl     r0,r0,10h                               
08084AFC 0C00     lsr     r0,r0,10h                               
08084AFE 2802     cmp     r0,2h         ; if tile is either 1,2, or 3, (unacessible) don't increment the loop, so generate new tiles number to be checked with                          
08084B00 D902     bls     8084B08h                                
08084B02 1C68     add     r0,r5,1                                 
08084B04 0600     lsl     r0,r0,18h                               
08084B06 0E05     lsr     r5,r0,18h     ; increment r5 by 1.                          
08084B08 2D06     cmp     r5,6h         ; if r5 < 6;                          
08084B0A D1E5     bne     8084AD8h      ; calculate another feebas tile to check with.                          
08084B0C 464B     mov     r3,r9                                 
08084B0E 2100     mov     r1,0h                                   
08084B10 5E58     ldsh    r0,[r3,r1]    ; r0 = rod->map.x                          
08084B12 4642     mov     r2,r8                                   
08084B14 2300     mov     r3,0h                                   
08084B16 5ED1     ldsh    r1,[r2,r3]    ; r1 = rod->map.y                          
08084B18 1C3A     mov     r2,r7                                   
08084B1A F7FFFF33 bl      8084984h      ; from (fishing) coordinates return current tile in r0            
              
08084B1E 0400     lsl     r0,r0,10h                               
08084B20 0C01     lsr     r1,r0,10h                               
08084B22 2500     mov     r5,0h                                   
08084B24 0068     lsl     r0,r5,1h                                
08084B26 4468     add     r0,r13        ; r0 = sp                           
08084B28 8800     ldrh    r0,[r0]                                 
08084B2A 4281     cmp     r1,r0         ; is the current tile a feebas tile ?  SET A BREAKPOINT THERE TO SEE THE CURRENT TILE AND ALL YOUR FEEBAS TILES.
										; in emerald, this opcode is located at 0x080B4A6C (U)                        
08084B2C D0CA     beq     8084AC4h		; if so, feebas = true                          
08084B2E 1C68     add     r0,r5,1       ; increment r5                          
08084B30 0600     lsl     r0,r0,18h                               
08084B32 0E05     lsr     r5,r0,18h                               
08084B34 2D05     cmp     r5,5h                                   
08084B36 D9F5     bls     8084B24h      ; if r5 <= 5 increment                        
08084B38 2000     mov     r0,0h         ; The current tile is not a feebas tile (feebas = false)                         
08084B3A B004     add     sp,10h                                  
08084B3C BC18     pop     r3,r4                                   
08084B3E 4698     mov     r8,r3                                   
08084B40 46A1     mov     r9,r4                                   
08084B42 BCF0     pop     r4-r7                                   
08084B44 BC02     pop     r1                                      
08084B46 4708     bx      r1
In other words :
Code:
inline u32 RNG(u32 seed){
    return (0x41C64E6D * seed + 0x3039)
}

bool isFeebasTile(u16 feebasSeed, u16 currentTile){
    u32 fullRNGResult = (u32) feebasSeed, i = 0;
    u16 tile = 0;
    while(i <=5){ // Not exactly done this way, but equivalent
        fullRNGResult = RNG(fullRNGResult);
        tile = ((fullRNGResult >> 16) & 0xFFFF % 0x1BF);
        if (tile >= 4) i++;
        if (tile == currentTile) return true;
    }
    return false;
}

Munchlax trees determination

Code:
021F5138 B5F8     push    r3-r7,r14		                               
021F513A 1C0C     mov     r4,r1         ; r4 = current slathered tree                          
021F513C 0E02     lsr     r2,r0,18h		; r0 = SIDTID. For example r0 = 0x78CA5E96 when TID = 0x5E96 and SID = 0x78CA                      
021F513E A900     add     r1,sp,0h      ; r1 = sp                          
021F5140 700A     strb    r2,[r1]       ; set (SID >> 16) & 0xFF on the stack                          
021F5142 0C02     lsr     r2,r0,10h                               
021F5144 704A     strb    r2,[r1,1h]    ; set SID & 0xFF on the stack (+1)                          
021F5146 0A02     lsr     r2,r0,8h                                
021F5148 708A     strb    r2,[r1,2h]    ; set (TID >> 16) & 0xFF on the stack (+2)                          
021F514A 70C8     strb    r0,[r1,3h]    ; set TID & 0xFF on the stack (+3)
                          
021F514C 7808     ldrb    r0,[r1]       ; for each byte of the SID then the TID (byte #0)                         
021F514E 2115     mov     r1,15h                                  
021F5150 F6F6ED96 blx     20EBC80h		                               
021F5154 A800     add     r0,sp,0h                                
021F5156 7001     strb    r1,[r0]       ; store : byte mod 0x15 (=21). It corresponds to a tree number.                       
021F5158 7840     ldrb    r0,[r0,1h]    ; same order than precedently (byte #1)                         
021F515A 2115     mov     r1,15h                                  
021F515C F6F6ED90 blx     20EBC80h                                
021F5160 A800     add     r0,sp,0h                                
021F5162 7041     strb    r1,[r0,1h]                              
021F5164 7880     ldrb    r0,[r0,2h]    ; byte #2                          
021F5166 2115     mov     r1,15h                                  
021F5168 F6F6ED8A blx     20EBC80h                                
021F516C A800     add     r0,sp,0h                                
021F516E 7081     strb    r1,[r0,2h]                              
021F5170 78C0     ldrb    r0,[r0,3h]    ; byte #3                          
021F5172 2115     mov     r1,15h                                  
021F5174 F6F6ED84 blx     20EBC80h                                
021F5178 A800     add     r0,sp,0h                                
021F517A 70C1     strb    r1,[r0,3h]    
                          
021F517C 2000     mov     r0,0h         ; r0 = 0                          
021F517E 2301     mov     r3,1h         ; r3 = 1                          
021F5180 A900     add     r1,sp,0h      ; r1 = sp                          
021F5182 1C02     mov     r2,r0         ; r2 = 0                          
021F5184 1C15     mov     r5,r2         ; r5 = 0                          
021F5186 2B00     cmp     r3,0h         ; if r3 <= 0, r3++                           
021F5188 D90E     bls     21F51A8h                                
021F518A 5D4F     ldrb    r7,[r1,r5]                              
021F518C 5CCE     ldrb    r6,[r1,r3]    ; load two tree IDs                          
021F518E 42B7     cmp     r7,r6         ; if a same tree is chosen two times                         
021F5190 D105     bne     21F519Eh                                
021F5192 1C76     add     r6,r6,1       ; increment the second one                          
021F5194 54CE     strb    r6,[r1,r3]    ; store it                          
021F5196 5CCE     ldrb    r6,[r1,r3]    ; reload it                          
021F5198 2E15     cmp     r6,15h        ; if the chosen tree, r6, has an ID >= 21 (tree #21 doesn't exist)                          
021F519A D300     bcc     21F519Eh                                
021F519C 54C8     strb    r0,[r1,r3]    ; store 0 instead                          
021F519E 1C6D     add     r5,r5,1       ; r5++                          
021F51A0 062D     lsl     r5,r5,18h                               
021F51A2 0E2D     lsr     r5,r5,18h                               
021F51A4 429D     cmp     r5,r3         ; if r5 >= r3                          
021F51A6 D3F0     bcc     21F518Ah                                
021F51A8 1C5B     add     r3,r3,1       ; r3 ++                           
021F51AA 061B     lsl     r3,r3,18h                               
021F51AC 0E1B     lsr     r3,r3,18h                               
021F51AE 2B04     cmp     r3,4h         ; (if r3 >= 4, stop comparing trees)                          
021F51B0 D3E8     bcc     21F5184h      ; r5 = 0
										; r5 will take the following values : 0 0 1 0 1 2
										; r3 will take the following ones   : 1 2 2 3 3 3                          
021F51B2 2200     mov     r2,0h         ; r2 = 0                          
021F51B4 A900     add     r1,sp,0h      ; r1 = sp                          
021F51B6 5C88     ldrb    r0,[r1,r2]    ; load each tree ID                          
021F51B8 4284     cmp     r4,r0         ; is the tree being slathered a Munchlax one ?                          
021F51BA D101     bne     21F51C0h      ; if not ...                          
021F51BC 2001     mov     r0,1h         ; if the tree being slathered is a Munchlax tree, stop comparing, and return 1                          
021F51BE BDF8     pop     r3-r7,r15                               
021F51C0 1C50     add     r0,r2,1                                 
021F51C2 0600     lsl     r0,r0,18h                               
021F51C4 0E02     lsr     r2,r0,18h     ; ... increment r2                           
021F51C6 2A04     cmp     r2,4h         ; if r2 >= 4 stop comparing                          
021F51C8 D3F5     bcc     21F51B6h                                
021F51CA 2000     mov     r0,0h         ; and return 0                          
021F51CC BDF8     pop     r3-r7,r15
In other words :

Code:
bool isMunchlaxTree(u8 currentTree, u16 TID, u16 SID) //Not done this way, but equivalent      
        u8 trees[4];
	for(u8 num = 0;num < 2; num++){
		trees[num]= ((sid >> ((1-num) * 8)) & 0xFF) % 0x15;
		trees[num+2]= ( (tid >> ( (1-num) * 8)) & 0xFF) % 0x15; 
	}
	u8 i = 0, j = 1, k = 0;
	while(j < 4){
		if(trees[i] == trees[j])
			if(++trees[j] == 21) trees[j] = 0;
		if(++i == j){
			i = 0;
			j++;
		}
	}
        while(k < 4){
                if(currentTree == trees[k]) return true;
                k++;
        }
        return false;
}

Last edited by Tux; Dec 9th, 2011 at 1:49:16 PM.
Tux is offline   Reply With Quote
Old Dec 3rd, 2011, 11:21:19 AM   #831
AdroMaster
 
AdroMaster's Avatar
 
Join Date: Nov 2011
Posts: 12
Galicia, Spain
Default

Quote:
Originally Posted by Fat OmegaDonut View Post
At the moment, we need volunteers with the corresponding language versions to help get DSi\3DS support for those games. Please post if you are able to help (and have lots of patience).
Hi! I can help you to add DSi Spanish support. I understand basic english. Tell me the steps and I will give you the results as soon as possible.
__________________
AdroMaster is offline   Reply With Quote
Old Dec 12th, 2011, 8:13:56 AM   #832
ΩDonut
sometimes experimentation begins with "let's multi battle strip pokémon"
is a Forum Moderatoris a Programmeris a Pokémon Researcheris a Contributor to Smogon
 
ΩDonut's Avatar
 
Moderator
Join Date: Aug 2006
Posts: 3,692
Default

I can't believe I didn't think of this sooner. We don't need to give ourselves a headache by messing around with a New Game and multiple trainer ID possibilities in order to calculate an initial seed for DSi research.

We just need to get people to catch just two wild Pokemon on sequential PIDRNG frames, that have the IVs of the initial IVRNG seed. That is all we need to calculate the initial seed, and we know both Pokemon come from the same timer0 because of the IVs.

New procedure:
Quote:
You will need
- A Chatot (remember to record a Chatter first)
- A Sweet Scenter
- to save your game in a cave with no NPCs (like the top of Victory Road)
- your MAC address (instructions for 3DS)

1) Change your DSi\3DS clock to 12\11\2011 and change the clock to 10:15. Start the game from the DSi\3DS menu at 10:15:25.

2) Get in the game (do not turn on the C-Gear), and use Sweet Scent to capture a Pokemon. Check its IVs and save the game.

3) Repeat step 1. This time, do ONE Chatter flip. Then use Sweet Scent again to capture a Pokemon.

4) Check the IVs of the second Pokemon. If they are the same as the first Pokemon, save your game. If not, repeat step 3.

5) Trade me both Pokemon. Tell me which one is first and which one is second.
ΩDonut is offline   Reply With Quote
Old Dec 13th, 2011, 6:41:18 AM   #833
AdroMaster
 
AdroMaster's Avatar
 
Join Date: Nov 2011
Posts: 12
Galicia, Spain
Default

Hi OmegaDonut. Here are the Pokémon:

WHITE

First Pokémon

Second Pokémon (After a Chatot Call)


Characteristics:
  • Spanish DSi --> MAC Address: 0024F3FCE2C2
  • Pokémon White Version (Spanish)
  • Giant Chasm (Inner Cave)
  • Pressing A button in DSi menu to run the game at December 11th ,2011 at 10:15:25 (maybe 10:15:26, but I do not think so)
  • I transferred Pokémon to computer using IR-GTS-BW.
BLACK


First Pokémon

Second Pokémon (After a Chatot Call)


Characteristics:

  • Spanish DSi --> MAC Address: 0024F3FCE2C2
  • Pokémon Black Version (Spanish)
  • Mistralton Cave (Guidance Chamber)
  • Pressing A button in DSi menu to run the game at December 11th 2011, 10:15:25 (maybe 10:15:26, but I do not think so)
  • I transferred Pokémon to computer using Pokécheck.
__________________

Last edited by AdroMaster; Dec 13th, 2011 at 8:08:57 AM. Reason: Add Black information
AdroMaster is offline   Reply With Quote
Old Dec 13th, 2011, 6:55:17 AM   #834
ΩDonut
sometimes experimentation begins with "let's multi battle strip pokémon"
is a Forum Moderatoris a Programmeris a Pokémon Researcheris a Contributor to Smogon
 
ΩDonut's Avatar
 
Moderator
Join Date: Aug 2006
Posts: 3,692
Default

That's perfect! Yes, it would be great if you could do the same for Black, because Black and White could RNG differently.

chiizu:
AdroMaster's initial seed for Spanish White is 83FA39C71957E373.
For Spanish Black it's 29F0C5F9E14ED208.

Last edited by ΩDonut; Dec 13th, 2011 at 8:52:09 AM.
ΩDonut is offline   Reply With Quote
Old Dec 13th, 2011, 8:17:05 AM   #835
AdroMaster
 
AdroMaster's Avatar
 
Join Date: Nov 2011
Posts: 12
Galicia, Spain
Default

I added Black Spanish Pokémon in my previous post. I hope that serves for all Spanish community.
__________________
AdroMaster is offline   Reply With Quote
Old Dec 13th, 2011, 11:27:18 PM   #836
chiizu
PPPPPPPPPPPPPPPPPPPPPPPPP RNG
is a Programmeris a Pokémon Researcher
 
chiizu's Avatar
 
Join Date: Nov 2010
Posts: 369
Default

Quote:
Originally Posted by Fat OmegaDonut View Post
chiizu:
AdroMaster's initial seed for Spanish White is 83FA39C71957E373.
For Spanish Black it's 29F0C5F9E14ED208.
My Internet connection has been kind of flaky for the last day, but anyway just confirming that the search is started. I don't have time to babysit it, so I set it to search a wider than usual search space. I expect there will be some results when I get home this evening (Japan time).

Edit:
Nothing found yet in the close range of other known values for seconds 25, 26, or 27, though still plenty to cover. I just wanted to check regarding the seeds, since I'm assuming you're using the PIDs in this process. Is the wild encounter PID modification is being accounted for?
__________________
RNG Abuse for Mac Users: PPRNG 1.15.0

Last edited by chiizu; Dec 14th, 2011 at 11:25:56 AM.
chiizu is online now   Reply With Quote
Old Dec 14th, 2011, 12:07:00 PM   #837
ΩDonut
sometimes experimentation begins with "let's multi battle strip pokémon"
is a Forum Moderatoris a Programmeris a Pokémon Researcheris a Contributor to Smogon
 
ΩDonut's Avatar
 
Moderator
Join Date: Aug 2006
Posts: 3,692
Default

Quote:
Originally Posted by Fat chiizu View Post
My Internet connection has been kind of flaky for the last day, but anyway just confirming that the search is started. I don't have time to babysit it, so I set it to search a wider than usual search space. I expect there will be some results when I get home this evening (Japan time).

Edit:
Nothing found yet in the close range of other known values for seconds 25, 26, or 27, though still plenty to cover. I just wanted to check regarding the seeds, since I'm assuming you're using the PIDs in this process. Is the wild encounter PID modification is being accounted for?
Yeah. I took the PIDs, XOR'd both by 0x10000, then tested all possible combinations with the PIDs XOR'd by 0x80000000 and not.

Example with Boldore (PID 4466412A) and Axew (PID CF77155F)
Code:
Set 1 = a & b
4467412A4B4F0374
4467412AC22843FD
Set 2 = a & b (XOR'd)
4467412A18D16D07 <- seed, when rolled back matches the IVs obtained
Set 3 = a (XOR'd) & b
C467412A18D16D07
Set 4 = a (XOR'd) & b (XOR'd)
C467412A4B4F0374
C467412AC22843FD
ΩDonut is offline   Reply With Quote
Old Dec 14th, 2011, 8:35:22 PM   #838
chiizu
PPPPPPPPPPPPPPPPPPPPPPPPP RNG
is a Programmeris a Pokémon Researcher
 
chiizu's Avatar
 
Join Date: Nov 2010
Posts: 369
Default

Seeds matched on second 28, a longer delay than I would expect for a start on 25 on a DSi.

Spanish Dsi Parameters
__________________
RNG Abuse for Mac Users: PPRNG 1.15.0
chiizu is online now   Reply With Quote
Old Dec 16th, 2011, 5:07:27 PM   #839
AdroMaster
 
AdroMaster's Avatar
 
Join Date: Nov 2011
Posts: 12
Galicia, Spain
Default

My friend will borrow me a 3DS to make the procedure. When I finish it, I will post the results in the same way that DSi. Probably tomorrow (Saturday).
__________________
AdroMaster is offline   Reply With Quote
Old Dec 16th, 2011, 5:24:33 PM   #840
ΩDonut
sometimes experimentation begins with "let's multi battle strip pokémon"
is a Forum Moderatoris a Programmeris a Pokémon Researcheris a Contributor to Smogon
 
ΩDonut's Avatar
 
Moderator
Join Date: Aug 2006
Posts: 3,692
Default

Quote:
Originally Posted by Fat AdroMaster View Post
My friend will borrow me a 3DS to make the procedure. When I finish it, I will post the results in the same way that DSi. Probably tomorrow (Saturday).
That is not necessary. Since you gave us DSi information, that will work for a 3DS as well.
ΩDonut is offline   Reply With Quote
Old Dec 17th, 2011, 8:50:16 AM   #841
ΩDonut
sometimes experimentation begins with "let's multi battle strip pokémon"
is a Forum Moderatoris a Programmeris a Pokémon Researcheris a Contributor to Smogon
 
ΩDonut's Avatar
 
Moderator
Join Date: Aug 2006
Posts: 3,692
Default

Entralink PID Calculation

As Bond showed us earlier, the PIDs of Entralink Pokémon have the lower byte zeroed out and replaced with an unknown random value that forces a Pokémon to be either male or female, depending on the Pokémon caught in the Dream World. Bond and I did some debugging yesterday and uncovered more of the mystery:

(Gender threshold comes from the table of gender values listed here.)

Code:
For genderless Pokémon:
0 Initial
1 PID
5 Nature
No other modifications.

For all-male Pokémon such as Tyrogue:
0 Initial
1 PID
2 PID lower byte ((u32 * 0xF6 >> 32) + 8)
6 Nature

For all-female Pokémon such as Kangaskhan:
0 Initial
1 PID
2 PID lower byte ((u32 * 0x8 >> 32) + 1)
6 Nature

For all other males:
0 Initial
1 PID
2 PID lower byte ((u32 * (0xFE - gender threshold) >> 32) + gender threshold
6 Nature

For all other females:
0 Initial
1 PID
2 PID lower byte ((u32 * (gender threshold - 1) >> 32) + 1
6 Nature
We still don't know how the game determines whether an EL PID is XOR'd with 0x10000 or not. The game ANDs the PID with 0x10000. If the result is 0x10000, it XORs it with 0x10000.

Relevant ASM


EDIT: It looks like the PID calculation is still incorrect for species that don't have a 50\50 gender ratio. Fixed. I didn't notice the 254 - gender value part.

Last edited by ΩDonut; Dec 17th, 2011 at 3:11:53 PM.
ΩDonut is offline   Reply With Quote
Old Dec 18th, 2011, 3:42:23 AM   #842
ΩDonut
sometimes experimentation begins with "let's multi battle strip pokémon"
is a Forum Moderatoris a Programmeris a Pokémon Researcheris a Contributor to Smogon
 
ΩDonut's Avatar
 
Moderator
Join Date: Aug 2006
Posts: 3,692
Default

Kaphotics was testing the 3rd Gen Shiny Egg feature in (the yet unreleased) RNG Reporter 9.93, but found that none of the spreads he saw matched the IV inheritance he saw here. This really shouldn't come as a surprise to anyone by now, but Ruby\Sapphire also has a "split" breeding method like Emerald does. For split egg frames, the base IVs come from a Method 4 frame (which was what was programmed into RNG Reporter), while Kaphotics only saw Method 1 frames.
ΩDonut is offline   Reply With Quote
Old Dec 18th, 2011, 11:13:50 PM   #843
Kaphotics
Remodeling Kitchens
is a Pokémon Researcheris a Contributor to Smogon
 
Kaphotics's Avatar
 
Join Date: Apr 2009
Posts: 758
Berkeley, CA
Default

RuSa Inheritance Spreads (Reference)

Split Spreads
Non-Split Spreads


Alternate spread was recently added to RNG Reporter; don't feel like making another list.
There's only one flawless spread for Alternate Inheritance in the first 10 minutes.

Flawless Spreads:

Code:
18825	5:13.75    72F9	 B /  A / 31 / 31 / 31 /  B
Note: Split Spread

23746	06:35.8    F0DB	 A / 31 / 31 / 31 /  B /  A
Note: Alternate Spread

Last edited by Kaphotics; Feb 3rd, 2012 at 4:21:02 AM. Reason: added flawless alt, done
Kaphotics is offline   Reply With Quote
Old Dec 20th, 2011, 1:32:43 AM   #844
GoldenBanana
 
GoldenBanana's Avatar
 
Join Date: Apr 2010
Posts: 126
Default

I've RNG bred several pokemon on my retail Ruby cart, and most of the spreads I've seen use the inheritance from HGSS breeding 3 frames (not 4) after the Method 1 frame the base IVs come from. I have also seen spreads like the non-split ones Kaphotics listed.
I think the base IVs I've been seeing may have come from Method 2. I'm not experienced with Emerald egg abuse, but is this similar to its Alternate Inheritance?

Last edited by GoldenBanana; Dec 23rd, 2011 at 10:29:58 PM.
GoldenBanana is offline   Reply With Quote
Old Dec 20th, 2011, 8:30:13 AM   #845
Bruno Magno
 
Bruno Magno's Avatar
 
Join Date: May 2011
Posts: 746
Italy
Default

Quote:
Originally Posted by Fat chiizu View Post
We still need volunteers for:
French
Italian
Korean
Spanish
Well, i'll (if i can) do that, during holidays :)
__________________
On hiatus due to parents
[AWE]MichaelK: Ive been doin lc for a bit and I gotta say its kinda fun
Billy Pones: Is LC overcentralized as OU? I was planning to start
testtestaway: Nothing is as overcentralied as OU. I'd rather drink diarrhea than play OU.
Bruno Magno is offline   Reply With Quote
Old Dec 20th, 2011, 9:46:29 PM   #846
Kaphotics
Remodeling Kitchens
is a Pokémon Researcheris a Contributor to Smogon
 
Kaphotics's Avatar
 
Join Date: Apr 2009
Posts: 758
Berkeley, CA
Default

If people are looking to help research, you can chip in observations or data from gen3/4/5. We forgot about these abilities and their generation effects.

Code:
Cute Charm		66.7% chance to encounter opposite gender - done 100%!
Vital Spirit		50% chance for Higher Level Pokemon to be summoned.
Intimidate/Keen Eye	decreases the chance of encountering a lower-level wild Pokémon by 50%. 
Magnet Pull		50%+ Chance for Steel Type
Static			50%+ Chance for Electric Type
Possible Theories:

Cute Charm -- Might reinitiate the PID routine again, either ignoring the predefined Nature or not. Or, it can modify the PID (unlikely).
Vital Spirit -- Either Inflates the default levels, or Selects higher level slots. Probably inflates levels.
Intimidate/Keen Eye -- See above.
u16%(maxlevel-minlevel)+minlevel - - - base calc

Magnet Pull -- Replaces certain slots with a different table, or only selects from valid slots if the calc passes. Probably the latter.
Static -- Same as above.

Open for research, this may allow different spreads to be hit in the same effect of a synchronizer. Emerald (no RSFRLG) onward.

Last edited by Kaphotics; Jan 5th, 2012 at 1:21:32 AM. Reason: CuteCharm done
Kaphotics is offline   Reply With Quote
Old Dec 20th, 2011, 11:14:13 PM   #847
Hozu
RNGenius
is a Pre-Contributor
 
Hozu's Avatar
 
Join Date: Feb 2011
Posts: 1,181
Orre
Default

Some results with encounters in Emerald with an Intimidate pokemon in the lead slot :
Picture

I know 50 results is extremely low but if not a single pokemon is lower than the range given in the encounter slot info I'm willing to bet that Intimidate doesn't simply lower the levels of the encounters when it kicks in.

This was done on a retail cart btw so I can't tell what method was used for the encounters btw. Tomorrow I will take a look at Petalburg Woods on an emulator for some more information.
__________________
McGillicuddy's Bazaar - Hidden Grotto encounter RNG guide for RNG reporter - Emerald Egg PID RNG guide - Misc 3rd gen info - incl. Emerald frontier/Orre Colosseum, frame offsets - Free events
If I CMT in your thread please respond in mine. If I really wanted a Pokémon that is more common than herpes, I'd get it myself from Pokécheck.
Hozu is offline   Reply With Quote
Old Dec 20th, 2011, 11:29:16 PM   #848
Kaphotics
Remodeling Kitchens
is a Pokémon Researcheris a Contributor to Smogon
 
Kaphotics's Avatar
 
Join Date: Apr 2009
Posts: 758
Berkeley, CA
Default

Petalburg Woods with Vigoroth (Vital Spirit)

Data Examples


Basically another calc in between ESV and Nature, but there's still a level calc involved. Here's my guess - pass 50% to bias the level calc to higher numbers; kinda like sync. For now we don't care what the calc is, but we just need to know it operates with another calc in between ESV/Nature.

Last edited by Kaphotics; Jan 5th, 2012 at 1:19:34 AM. Reason: guess added
Kaphotics is offline   Reply With Quote
Old Dec 20th, 2011, 11:35:18 PM   #849
Dark Ray
 
Dark Ray's Avatar
 
Join Date: Sep 2010
Posts: 576
Default

I've been meaning to test Cute Charm for awhile (mainly to see if I can use my female adamant spread to catch a male ralts) so when I saw Reject's post I leapt into action.

English (US) HG rom used.
Memory viewer used to find my seed (40160205)
Pokemon were caught in Ilex Forest while riding the bike.
Female CC Igglybuff, standard Oddish SweetScenter and a boring Skiploom were used.
The Zubats are available below as PKM. files if anyone more knowledgable wants to look at them under different programs.

Zubat caught with Skiploom lead.
Zubat caught with CC Iggly lead.
Another zubat caught with Iggly Lead. (1 irwin call used to advance frame)

Note that Legal.exe lists the CCed Zubats as unknown/hacked, i'll be testing some more later (getting late here) but it looks to me like Cute Charm modifies the PID, not just causes a re-roll.
Dark Ray is offline   Reply With Quote
Old Dec 20th, 2011, 11:53:03 PM   #850
Kaphotics
Remodeling Kitchens
is a Pokémon Researcheris a Contributor to Smogon
 
Kaphotics's Avatar
 
Join Date: Apr 2009
Posts: 758
Berkeley, CA
Default

0x000000A3 first CC zubat,
IVs appeared Method 1 frame 2.
0x000000A5 second CC zubat
IVs appeared as Method 1 frame 3.

what the @$*# is this &*@%? Those are the most grotesque PID's I've ever seen.

Either way, it's a PID method akin to Chain Shiny. When it's convenient, can you keep going until you find a fail? So far all dem zubats have passed. Cool stuff!

Last edited by ΩDonut; Dec 22nd, 2011 at 6:30:04 PM. Reason: :D
Kaphotics is offline   Reply With Quote
Reply Smogon Community > Pokémon > Wi-Fi

Tags
NULL

« Previous Thread | Next Thread »
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off



All times are GMT -4. The time now is 6:39:43 PM.