Advertisement
Guest User

Untitled

a guest
Oct 21st, 2014
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.24 KB | None | 0 0
  1. import math #import math library
  2. import operator #import operators
  3.  
  4. #rngr
  5. #reverse rng, runs the PRNG state backwards for j iterations
  6. def rngr(seed,j):
  7. k = 0
  8. while (k < j):
  9. seedr = (0x00003155*(seed%65536)+((0x0000B9B3*(seed%65536)+0x00003155*math.floor(seed/65536))%65536)*65536+0xA170F641)%(4294967296) #formula
  10. seed = seedr
  11. k += 1
  12. return seedr
  13.  
  14. #rng
  15. #forward rng, runs PRNG state forwards for j iterations
  16. def rng(seed,j):
  17. k = 0
  18. while (k <= j):
  19. newseed = seed
  20. seed = (0x000043FD*(seed%65536)+((0x00000003*(seed%65536)+0x000043FD*math.floor(seed/65536))%65536)*65536+0x00269EC3)%(4294967296) #formula
  21. k += 1
  22. return seed
  23.  
  24. #Nature lock PID
  25. #Finds the nature lock based on user inputted case (1 shadow mon, 2 shadowmons,
  26. # 2 shadowmons, 1 set)
  27. def findpid(seed,case):
  28. seedint = seed
  29. if case == 1:
  30. casen = 3
  31. if case == 2:
  32. casen = 8
  33. if case == 3:
  34. casen = 10
  35. pseed = int(rngr(seed,casen)) #run backwards appropriate amount per case
  36. seedint = int(rng(pseed,0)) #get the prng state one infront of pseed
  37. print "pseed: " + str(hex(pseed))
  38. lockpid = int(((pseed >> 16)*0x10000 + (seedint>>16))) #calc PID formula
  39. naturelock = int(lockpid%25) #get pid nature
  40. return lockpid
  41.  
  42. #nature array 0 - 24
  43. def nature(naturelock):
  44. natures = ['hardy', 'lonely', 'brave', 'adamant', 'naughty', 'bold', 'docile', 'relaxed', 'impish', 'lax', 'timid', 'hasty', 'serious', 'jolly', 'naive', 'modest', 'mild', 'quiet', 'bashful', 'rash', 'calm', 'gentle', 'sassy', 'careful', 'quirky']
  45. return natures[naturelock]
  46.  
  47. def main():
  48. #if doagain = "y":
  49. #seed = int(raw_input('newseed: ', 16))
  50. #else:
  51. #seed = int(raw_input('seed: '), 16) #user inputted base seed
  52. #nsmons = int(raw_input('number of nonshadows: '), 10) #number of non shadow mons
  53. #naturelocks = int(raw_input('naturelock array: '), 10) #user inputted array of nature locks
  54. #genderlocks = int(raw_input('genderlock array: '), 10) #user inputted array of genderlocks. 0 for female, 1 for male
  55. #gthresh = int(raw_input('genderthresholds: '), 10) #gender thresholds
  56. #128 for 50:50 etc, 256 + 0 for genderless,
  57. #case = int(raw_input('case: '), 10) #which case? 1: 1 shadowmon, 2: 2 shadowmons, one set 3: 2 shadowmons, first one not set
  58. case = 2
  59. seed = 0xd1ae12a5
  60. inputseed = seed
  61. naturelocks = [12, 18, 0]
  62. genderlocks = [0, 0, 0]
  63. nsmons = 3
  64. gthresh = [256, 128, 256]
  65. for i in range(0,1):
  66. #main loop, finds the nature lock based on case and then does a logic loop to decide whether that matches what you want, if not it will output what is wrong.
  67. seedr = seed
  68. lockpid = int(findpid(seed, case))
  69. naturelock = int(lockpid%25)
  70. print "PID: " + str(hex(lockpid)) #obtain nature, genderval, ability of PIDlock
  71. print "nature lock: " + nature(int(lockpid%25))
  72. print "ability lock: " + str(int(lockpid%2))
  73. print "gender lock: " + str(int(lockpid%256))
  74. #print hex(seed)
  75. print "hex seed: " + str(hex(seedr))
  76. if naturelock == naturelocks[0] :
  77. if genderlocks[0] == 1:
  78. if int(lockpid%256) >= gthresh[0]:
  79. listgen(naturelocks, genderlocks, gthresh, nsmons, inputseed, case)
  80. else:
  81. print "gender does not match"
  82. else:
  83. if int(lockpid%256) < gthresh[0]:
  84. listgen(naturelocks, genderlocks, gthresh, nsmons, inputseed, case)
  85. else:
  86. print "gender does not match"
  87. else:
  88. print "naturelock doesnt match"
  89.  
  90.  
  91. #main list maker, will output a list of all frame matches based on your target (base seed) on frame 401, it will out put as many lists as non shadow mons + the corresponding nature/gender
  92. def listgen(naturelocks, genderlocks, gthresh, nsmons, inputseed, case):
  93. seed = inputseed
  94. d = 0
  95. matchlist = []
  96. currentpid = 0
  97. currentnature = 0
  98. pseed = int(rngr(seed,400))
  99. pseed0 = pseed
  100. for s in range(0,nsmons):
  101. pseed = pseed0
  102. matchlist = []
  103. pidlist = []
  104. for r in range(1,400):
  105. seedint = int(rng(pseed,0))
  106. currentpid = int(((pseed >> 16)*0x10000 + (seedint>>16)))
  107. currentnature = int(currentpid%25)
  108. pseed = seedint
  109. if currentnature == naturelocks[s]:
  110. if genderlocks[s] == 1:
  111. if int(currentpid%256) >= gthresh[s]:
  112. matchlist.append(r-4)
  113. pidlist.append(hex(currentpid))
  114. else:
  115. if int(currentpid%256) < gthresh[s]:
  116. matchlist.append(r-4)
  117. pidlist.append(hex(currentpid))
  118. if genderlocks[s] == 0:
  119. gender = "female"
  120. if genderlocks[s] == 1:
  121. gender = "male"
  122. if gthresh[s] == 256:
  123. gender = "genderless"
  124. print str(nature(naturelocks[s])) + " " + gender
  125. for y in range (1,len(matchlist)):
  126. print str(matchlist[y]) + " " + str(pidlist[y])
  127. print " "
  128. if case == 1:
  129. print "target on frame 401, primary nature lock on 394"
  130. if case == 2:
  131. print "target on frame 401, primary nature lock on 389"
  132. if case == 3:
  133. print "target on frame 401, primary nature lock on 387"
  134. #doagain = input("input another base seed? y/n")
  135. #if doagain = "y":
  136. # main()
  137. # if doagain = "n":
  138. # quit()
  139.  
  140. # Execute Script:
  141. if __name__ == "__main__":
  142. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement