troptrop

stuff

Feb 25th, 2024
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.85 KB | None | 0 0
  1. import os
  2.  
  3. dir = os.getcwd()
  4. path = dir+"\\search.txt"
  5. outputDir=dir+"\\drilbur.txt"
  6. seedLst = open(path, "r+", encoding="Shift-JIS")
  7. seedLst.readline()
  8. output = open(outputDir,"w",encoding="UTF-8")
  9. springDates = ["1", "2", "6", "7", "8", "9", "10", "14", "15", "16", "17", "18", "19", "22", "23", "24", "25", "26", "30", "31"]
  10. autumnDates = ["1", "2", "3", "6", "7", "8", "9", "10", "11", "14", "15", "16", "17", "18", "19", "22", "23", "24", "25", "26", "27", "30", "31"]
  11. winterDates = ["4", "6", "7", "12", "13", "15", "16", "17", "20", "23", "24", "26", "27", "29"]
  12. 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']
  13.  
  14. def rngAdvance(prev):
  15. next=0x5D588B656C078965 * prev + 0x0000000000269EC3
  16. return next%0x10000000000000000
  17.  
  18. def rngOf(seed,frame):
  19. prev=seed
  20. for x in range(0,frame):
  21. prev=rngAdvance(prev)
  22. return prev
  23.  
  24. def getLandSlot(sel):
  25. parts=[20, 40, 50, 60, 70, 80, 85, 90, 94, 98, 99, 100]
  26. for x in range(0,12):
  27. if sel<parts[x]:
  28. return x
  29.  
  30. def dustGen(seed,frame):
  31. trigger = rngOf(seed,frame+2)
  32. slot = rngAdvance(trigger)
  33. slot = rngAdvance(slot)
  34. ability = rngAdvance(slot)
  35. ability = rngAdvance(ability)
  36. pokenat = rngAdvance(ability)
  37. isEncounter = int((((trigger>>32)*1000)>>32))
  38. if isEncounter <400:
  39. appear = True
  40. else:
  41. appear = False
  42. sel =((slot>>32)*100)>>32
  43. natsel = ((pokenat>>32)*25)>>32
  44. id = ability>>32^0x10000^0x80000000
  45. ability = id>>16&1
  46. gender = (id&255)
  47. return [appear,frame,isEncounter,getLandSlot(sel),natures[natsel],ability,gender]
  48.  
  49. def drilSearch(seed,min,max):
  50. drills=[]
  51. for x in range(min,max+1):
  52. poke = dustGen(seed,x)
  53. if poke[0] == True and poke[3] in [6,7,8,9,10,11] and poke[5]==1 and poke[5]<128 and poke[4]=="Adamant":
  54. drills.append(poke)
  55. return drills
  56.  
  57. ptable = [[50,100,100,100,100],[50,50,100,100,100],[30,50,100,100,100],[25,30,50,100,100],[20,25,33,50,100],[100,100,100,100,100]]
  58.  
  59.  
  60. def getInitialFrame(seed):
  61. fc = 0
  62. for x in range (0,5):
  63. for y in range(0,6):
  64. for z in range (0,5):
  65. if ptable[y][z] == 100:
  66. break
  67. fc+=1
  68. seed=rngAdvance(seed)
  69. rng = seed>>32
  70. rng = rng*101
  71. rng = rng>>32
  72. if rng <= ptable[y][z]:
  73. break;
  74. if x == 0:
  75. adv = 3
  76. for j in range (0,adv):
  77. fc+=1
  78. seed = rngAdvance(seed)
  79. fc = extra(seed,fc)
  80. return fc
  81.  
  82. def extra(seed,fc):
  83. loop = True
  84. limit = 0
  85. while loop and limit<100:
  86. loop = False
  87. tmp = [0,0,0]
  88. fc+=3
  89. for x in range (0,3):
  90. seed = rngAdvance(seed)
  91. rng = seed>>32
  92. rng = rng*15
  93. rng = rng>>32
  94. tmp[x] = rng
  95. for i in range (0,3):
  96. for j in range (0,3):
  97. if i==j:
  98. continue
  99. if tmp[i] == tmp[j]:
  100. loop = True
  101. limit+=1
  102. return fc
  103.  
  104. def dustSearch(seed,min,max):
  105. clouds = []
  106. rng = rngOf(seed,min-1)
  107. for x in range(min,max+1):
  108. rng = rngAdvance(rng)
  109. if rng>>60 == 0:
  110. clouds.append(x)
  111. return clouds
  112.  
  113. for line in seedLst:
  114. parsed = line.split(",")
  115. seed = parsed[16]
  116. seed = int(seed,16)
  117. hour = int(parsed[3])
  118. minute = int(parsed[4])
  119. month = parsed[1]
  120. day = parsed[2]
  121. acceptableDate = False
  122. if((month != "2") and (month != "6") and (month != "10")):
  123. if((month == "1") or (month == "5") or (month == "9")):
  124. if (day in springDates):
  125. acceptableDate = True
  126. elif((month == "4") or (month == "8") or (month == "12")):
  127. if (day in winterDates):
  128. acceptableDate = True
  129. else:
  130. if (day in autumnDates):
  131. acceptableDate = True
  132. if(acceptableDate):
  133. init = getInitialFrame(seed)
  134. dusts = dustSearch(seed,init+26,init+30)
  135. if(len(dusts) >= 0):
  136. ##drills = drilSearch(seed,dusts[0]+4,dusts[0]+30)
  137.  
  138. output.write("Seed: " + str(hex(seed))+"\n")
  139. output.write("Time: 20"+str(parsed[0])+"/"+str(parsed[1])+"/"+str(parsed[2])+" "+"{:02d}".format(int(parsed[3]))+":"+"{:02d}".format(int(parsed[4]))+":"+"{:02d}".format(int(parsed[5]))+"\n")
  140. output.write("Key Presses: "+str(parsed[17]).strip()+"\n")
  141. output.write("Dust Clouds: ")
  142.  
  143. output.write("\n\n")
  144. seedLst.close()
  145. output.close()
  146.  
  147.  
Advertisement
Add Comment
Please, Sign In to add comment