mirror of
https://github.com/Goppier/FindingFeebas.git
synced 2026-03-28 13:04:49 -05:00
170 lines
6.5 KiB
Python
170 lines
6.5 KiB
Python
from tkinter import ttk
|
|
from tkinter import *
|
|
|
|
from trendyPhrase import group_conditions, group_lifestyles, group_hobbies, DewfordTrend
|
|
from FeebasCoordinates import FEEBAS_COORDINATES
|
|
|
|
class FeebasCalculator:
|
|
def __init__(self, trainer_id, lottery_number, trendy_phrase_1, trendy_phrase_2, is_rs):
|
|
self.is_feebas_found = False
|
|
if not((trendy_phrase_1 in group_conditions) and ((trendy_phrase_2 in group_lifestyles) or (trendy_phrase_2 in group_hobbies))):
|
|
return
|
|
if(trainer_id == '' or lottery_number == ''):
|
|
return
|
|
self.trainer_id = int(trainer_id)
|
|
self.secret_id = 0
|
|
self.lottery_number = int(lottery_number)
|
|
self.trendy_phrase_1 = trendy_phrase_1
|
|
self.trendy_phrase_2 = trendy_phrase_2
|
|
self.starting_seeds = []
|
|
self.calculated_feebas_spots = []
|
|
self.rng_counter = 0
|
|
self.vblank = 0xFFFFFFFF
|
|
|
|
if(is_rs):
|
|
self.seedRng(0x5A0)
|
|
else:
|
|
self.seedRng(self.trainer_id)
|
|
|
|
self.findFeebasStartingPoint()
|
|
for x in self.starting_seeds:
|
|
self.findFeebasSpotsEmerald(x)
|
|
if(self.is_feebas_found == True):
|
|
break
|
|
if(self.is_feebas_found == False):
|
|
print("FUCK")
|
|
return
|
|
|
|
self.seedRng(self.dewford_trends[0].getRandomValue())
|
|
|
|
x = 0
|
|
while(x != 6):
|
|
feebas_id = self.getFeebasRandomValue() % 447
|
|
if(feebas_id == 0):
|
|
feebas_id = 447
|
|
if(feebas_id >= 4):
|
|
self.calculated_feebas_spots.append(FEEBAS_COORDINATES[feebas_id])
|
|
x += 1
|
|
|
|
return
|
|
|
|
def isFeebasFound(self):
|
|
return self.is_feebas_found
|
|
|
|
def getFeebasSpotCoordinates(self):
|
|
return self.calculated_feebas_spots
|
|
#return FEEBAS_COORDINATES
|
|
|
|
def seedRng(self, seed):
|
|
self.random_value = seed & 0xFFFFFFFF
|
|
|
|
def getFeebasRandomValue(self):
|
|
self.random_value = 0x41C64E6D * self.random_value + 0x00003039
|
|
self.random_value &= 0xFFFFFFFF
|
|
return (self.random_value >> 16)
|
|
|
|
def getRandomValue(self):
|
|
self.random_value = 0x41C64E6D * self.random_value + 0x00006073
|
|
self.random_value &= 0xFFFFFFFF
|
|
self.rng_counter += 1
|
|
if(self.vblank == self.rng_counter):
|
|
self.random_value = 0x41C64E6D * self.random_value + 0x00006073
|
|
self.random_value &= 0xFFFFFFFF
|
|
self.rng_counter += 1
|
|
print(self.vblank)
|
|
return (self.random_value >> 16)
|
|
|
|
def getPreviousRandomValue(self):
|
|
self.random_value = 0xEEB9EB65 * self.random_value + 0x0A3561A1;
|
|
self.random_value &= 0xFFFFFFFF
|
|
return (self.random_value >> 16)
|
|
|
|
def findFeebasStartingPoint(self):
|
|
self.starting_seeds = []
|
|
for x in range(20000):
|
|
random_value = self.getRandomValue()
|
|
if(random_value == self.lottery_number):
|
|
self.starting_seeds.append(self.random_value)
|
|
print(self.starting_seeds)
|
|
|
|
def findFeebasSpotsRubySapphire(self, lottery_seed):
|
|
self.seedRng(lottery_seed)
|
|
self.rng_counter = 0
|
|
for x in range(50):
|
|
self.getPreviousRandomValue()
|
|
# if((self.random_value >> 16) == self.trainer_id)
|
|
def findFeebasSpotsEmerald(self, lottery_seed):
|
|
reverse_steps = 50
|
|
lottery_no = 0
|
|
final_trendy_prase = ["NO", "FEEBAS"]
|
|
while((self.lottery_number != lottery_no) or (final_trendy_prase[0] != self.trendy_phrase_1 or final_trendy_prase[1] != self.trendy_phrase_2)):
|
|
self.seedRng(lottery_seed)
|
|
#print(lottery_seed)
|
|
self.rng_counter = 0
|
|
for x in range(reverse_steps):
|
|
self.getPreviousRandomValue()
|
|
self.generateDewfordPhrases()
|
|
|
|
final_trendy_prase = self.dewford_trends[0].getPhrase()
|
|
|
|
lottery_no = self.getRandomValue()
|
|
|
|
reverse_steps -= 1
|
|
if(reverse_steps < 30):
|
|
print("UGH")
|
|
return
|
|
print("FOUND!!!!!")
|
|
print(self.dewford_trends[0].getRandomValue())
|
|
self.is_feebas_found = True
|
|
|
|
def generateDewfordPhrases(self):
|
|
self.dewford_trends = []
|
|
for x in range(5):
|
|
new_trend = DewfordTrend()
|
|
phrase_1 = group_conditions[self.getRandomValue() % len(group_conditions)]
|
|
if(self.getRandomValue() & 1 == 1):
|
|
phrase_2 = group_lifestyles[self.getRandomValue() % len(group_lifestyles)]
|
|
else:
|
|
phrase_2 = group_hobbies[self.getRandomValue() % len(group_hobbies)]
|
|
new_trend.setPhrase(phrase_1, phrase_2)
|
|
#print(phrase_1)
|
|
new_trend.setIsGainingTrendiness(self.getRandomValue() & 1)
|
|
|
|
rando = self.getRandomValue() % 98
|
|
if (rando > 50):
|
|
rando = self.getRandomValue() % 98
|
|
if (rando > 80):
|
|
rando = self.getRandomValue() % 98
|
|
|
|
new_trend.setMaxTrendiness(rando + 30)
|
|
new_trend.setTrendiness((self.getRandomValue() % (rando + 1)) + 30)
|
|
new_trend.setRandomValue(self.getRandomValue())
|
|
|
|
self.dewford_trends.append(new_trend)
|
|
self.sortTrends()
|
|
|
|
|
|
def sortTrends(self):
|
|
for x in range(5):
|
|
y = x + 1
|
|
while(y < 5):
|
|
if(self.compareTrends(y, x)):
|
|
self.SWAP(self.dewford_trends, y, x)
|
|
y += 1
|
|
|
|
def compareTrends(self, a, b):
|
|
if(self.dewford_trends[a].getTrendiness() > self.dewford_trends[b].getTrendiness()):
|
|
return True
|
|
if(self.dewford_trends[a].getTrendiness() < self.dewford_trends[b].getTrendiness()):
|
|
return False
|
|
if(self.dewford_trends[a].getMaxTrendiness() > self.dewford_trends[b].getMaxTrendiness()):
|
|
return True
|
|
if(self.dewford_trends[a].getMaxTrendiness() < self.dewford_trends[b].getMaxTrendiness()):
|
|
return False
|
|
|
|
return (self.getRandomValue() & 1)
|
|
|
|
def SWAP(self, list, pos1, pos2):
|
|
list[pos1], list[pos2] = list[pos2], list[pos1]
|
|
return list
|