Requires this class:
Function:Code: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
Demo Program that generates shiny TID/SIDs:Code: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
(on dropbox because py2exe is too big to upload [barely])
http://dl.dropbox.com/u/20328726/MakeShiny.zip
Last edited by ILOVEPIE; Aug 28th, 2011 at 05:05 PM. Reason: code glitch found and fixed
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).
Last edited by arcee; Aug 22nd, 2011 at 12:59 AM.



take the upper half of the PID, make that the SID
take the lower half of the PID, make that the TID
bam shiny
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...tion#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...
the answer to the random problem is simply:
the answer to the other problem is to convert to an integer before you call the functionCode:import random



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



BEEFCAFE
BEEF^CAFE
BEEF^CAFE
BEEF^CAFE^BEEF^CAFE = BEEF^BEEF^CAFE^CAFE = 0
ie always shiny if you do it that way :P
Bookmarks