FindingFeebas/feebasCalcs.py
2023-11-23 00:12:54 +01:00

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