Jump to content

[SNIPPET] Python code to generate shiny TID/SIDs from a PID


Recommended Posts

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 by ILOVEPIE
code glitch found and fixed
Link to comment
Share on other sites

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 by arcee
Link to comment
Share on other sites

take the upper half of the PID, make that the SID

take 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

Link to comment
Share on other sites

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

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.

Link to comment
Share on other sites

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

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