ILOVEPIE Posted August 22, 2011 Posted August 22, 2011 (edited) Requires this class: class bf(object): def __init__(self,value=0): self._d = value def __getitem__(self, index): return (self._d >> index) & 1 def __setitem__(self,index,value): value = (value&1L)<<index mask = (1L)<<index self._d = (self._d & ~mask) | value def __getslice__(self, start, end): mask = 2L**(end - start) -1 return (self._d >> start) & mask def __setslice__(self, start, end, value): mask = 2L**(end - start) -1 value = (value & mask) << start mask = mask << start self._d = (self._d & ~mask) | value return (self._d >> start) & mask def __int__(self): return self._d Function: def shinygen(pokemonid): """Returns Tuple of Shiny TID and SID for given PID""" shiny=False n=0 while shiny == False: tid=bf(random.getrandbits(16)) sid=bf(random.getrandbits(16)) pid=bf(pokemonid) n +=1 shiny = True for i in range(0,13): if int(pid[15-i]) + int(pid[31-i])+ int(tid[15-i])+ int(sid[15-i])== 3: shiny = False break elif int(pid[15-i])+ int(pid[31-i])+ int(tid[15-i])+ int(sid[15-i])== 1: shiny = False break if shiny: return (tid,sid) else: return False Demo Program that generates shiny TID/SIDs: (on dropbox because py2exe is too big to upload [barely]) http://dl.dropbox.com/u/20328726/MakeShiny.zip Edited August 28, 2011 by ILOVEPIE code glitch found and fixed
arcee Posted August 22, 2011 Posted August 22, 2011 (edited) so basically.. you're generating random tids/sids and finding a match. That's sort of .. silly, as there are more efficient ways to do it. disregarding the number of errors thrown when running your 'snippet' (you should add you need to do things like setting 'pokemonid' as an input value, defining random), the program downloaded from your dropbox doesn't work. to clarify, it doesn't give you a shiny tid/sid. only one close to it. bond and i tested it. nevermind; it's oddly not working with pokegen for me (but bond's managed to get it work, so i suppose it's fine). Edited August 22, 2011 by arcee
Kaphotics Posted August 22, 2011 Posted August 22, 2011 take the upper half of the PID, make that the SID take the lower half of the PID, make that the TID bam shiny
ILOVEPIE Posted August 22, 2011 Author Posted August 22, 2011 I don't know of any better way of generating Shiny TIDs & SIDs considering how shiny calculations are described here: http://www.smogon.com/ingame/rng/pid_iv_creation#how_shiny anyways the computor will go through over 3000 combinations in less than a second... it doesn't take long... and the program does work i checked it with pokegen...
ILOVEPIE Posted August 22, 2011 Author Posted August 22, 2011 take the upper half of the PID, make that the SIDtake the lower half of the PID, make that the TID ok what if your pid is 11229867 1010101101011|010 1010101101011|010 1010101101011|010 nope not shiny... or even 9132715 that will not work either... there are many times that algorithm will fail
ILOVEPIE Posted August 22, 2011 Author Posted August 22, 2011 the answer to the random problem is simply: import random the answer to the other problem is to convert to an integer before you call the function
arcee Posted August 22, 2011 Posted August 22, 2011 the answer to the random problem is simply: import random exactly .. so shouldn't you, you know, add that in at the top? it's sort of important for the thing to run : p
Kaphotics Posted August 22, 2011 Posted August 22, 2011 ok what if your pid is 112298671010101101011|010 1010101101011|010 1010101101011|010 nope not shiny... or even 9132715 that will not work either... there are many times that algorithm will fail it's referring to the hexidecimal PID, not the decimal. each half of the PID is 4 hex characters long, same deal with the TID/SID.
ILOVEPIE Posted August 22, 2011 Author Posted August 22, 2011 yes i am aware of that but the way to determine shiny is through binary not hex... you can't just set the TID to the upper half and then have the SID set to the lower half... it will work more often than normal but it still fails if you have a PID like 9132715 which if you split it in half has on bits that overlap 3 times
Kaphotics Posted August 22, 2011 Posted August 22, 2011 BEEFCAFE BEEF^CAFE BEEF^CAFE BEEF^CAFE^BEEF^CAFE = BEEF^BEEF^CAFE^CAFE = 0 ie always shiny if you do it that way
ILOVEPIE Posted August 29, 2011 Author Posted August 29, 2011 nevermind; it's oddly not working with pokegen for me (but bond's managed to get it work, so i suppose it's fine). Thats because it was checking all values between position 0 and position 11 not between 0 and position 12
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now