From e0c0ffd548d92b07c78abc48f3b0676f5e129315 Mon Sep 17 00:00:00 2001 From: Lincoln-LM Date: Wed, 19 Jan 2022 02:41:20 -0700 Subject: [PATCH] Add ability to reidentify in a noisy pokemons room --- src/player_blink_gui.py | 24 +++++++++++++++++++----- src/rngtool.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/player_blink_gui.py b/src/player_blink_gui.py index a496fa7..8771956 100644 --- a/src/player_blink_gui.py +++ b/src/player_blink_gui.py @@ -131,6 +131,11 @@ class Application(tk.Frame): self.menu_check.grid(column=7,row=0) self.menu_check_var.set(1) + self.reident_noisy_check_var = tk.IntVar() + self.reident_noisy_check = ttk.Checkbutton(self, text="Reident 1 PK NPC", variable=self.reident_noisy_check_var) + self.reident_noisy_check.grid(column=5,row=6) + self.reident_noisy_check_var.set(0) + self.pos_x = tk.Spinbox(self, from_= 0, to = 99999, width = 5) self.pos_x.grid(column=7,row=1) self.pos_y = tk.Spinbox(self, from_= 0, to = 99999, width = 5) @@ -482,10 +487,18 @@ class Application(tk.Frame): self.s01_23.insert(1.0,s01+"\n"+s23) print([hex(x) for x in state]) - observed_blinks, observed_intervals, offset_time = rngtool.tracking_blink(self.player_eye, *self.config_json["view"], MonitorWindow=self.config_json["MonitorWindow"], WindowPrefix=self.config_json["WindowPrefix"], crop=self.config_json["crop"], camera=self.config_json["camera"], tk_window=self, th=self.config_json["thresh"], size=7) - # self.rng, adv = rngtool.reidentifyByBlinks(Xorshift(*state), observed_blinks, return_advance=True, npc=self.config_json["npc"]) - self.rng, adv = rngtool.reidentifyByIntervals(Xorshift(*state), observed_intervals, return_advance=True, npc=self.config_json["npc"]) - + if self.reident_noisy_check_var.get(): + self.pokemon_npc.delete(0,tk.END) + self.pokemon_npc.insert(0,1) + observed_blinks, observed_intervals, offset_time = rngtool.tracking_blink(self.player_eye, *self.config_json["view"], MonitorWindow=self.config_json["MonitorWindow"], WindowPrefix=self.config_json["WindowPrefix"], crop=self.config_json["crop"], camera=self.config_json["camera"], tk_window=self, th=self.config_json["thresh"], size=20) + self.rng, adv = rngtool.reidentifyByIntervalsNoisy(Xorshift(*state), observed_intervals) + self.timelining = True + self.count_down = 0 + auto_timeline = True + else: + observed_blinks, observed_intervals, offset_time = rngtool.tracking_blink(self.player_eye, *self.config_json["view"], MonitorWindow=self.config_json["MonitorWindow"], WindowPrefix=self.config_json["WindowPrefix"], crop=self.config_json["crop"], camera=self.config_json["camera"], tk_window=self, th=self.config_json["thresh"], size=7) + self.rng, adv = rngtool.reidentifyByIntervals(Xorshift(*state), observed_intervals, return_advance=True, npc=self.config_json["npc"]) + auto_timeline = True self.reidentify_button['text'] = "Reidentify" self.reidentifying = False @@ -498,7 +511,8 @@ class Application(tk.Frame): self.advances = adv+diff*(self.config_json["npc"]+1) self.tracking = True - self.count_down = None + if not auto_timeline: + self.count_down = None while self.tracking: if self.count_down is None: if self.timelining: diff --git a/src/rngtool.py b/src/rngtool.py index a1870c9..fc3e21e 100644 --- a/src/rngtool.py +++ b/src/rngtool.py @@ -522,6 +522,41 @@ def reidentifyByIntervals(rng:Xorshift, rawintervals:List[int], npc = 0, search_ return None +def reidentifyByIntervalsNoisy(rng:Xorshift, rawintervals:List[int], search_max=10**5, search_min=0)->Xorshift: + intervals = rawintervals[1:] + blink_bools = [True] + for interval in intervals: + blink_bools.extend([False]*(interval-1)) + blink_bools.append(True) + reident_time = len(blink_bools) + possible_length = int(reident_time*4//3) + + possible_advances = [] + go = Xorshift(*rng.getState()) + go.getNextRandSequence(search_min) + blink_rands = [int((r&0b1110)==0) for r in go.getNextRandSequence(search_max)] + for advance in range(search_max-possible_length): + blinks = blink_rands[advance:advance+possible_length] + i = 0 + j = 0 + differences = [] + try: + while i < reident_time: + diff = 0 + while blink_bools[i] != blinks[j]: + diff += 1 + j += 1 + if diff != 0: + differences.append(diff) + j += 1 + i += 1 + except IndexError: + continue + pokemon_blink_count = sum(differences) + possible_advances.append((pokemon_blink_count,advance)) + correct = min(possible_advances) + rng.advance(search_min+sum(correct)+reident_time) + return rng, search_min+sum(correct)+reident_time def recovByMunchlax(rawintervals:List[float])->Xorshift: """Recover the xorshift from the interval of Munchlax blinks.