diff options
author | Bryan Bishop <kanzure@gmail.com> | 2013-09-22 11:38:35 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2013-09-22 11:38:35 -0500 |
commit | 54579ad69962d62a7af874635ff4e3e5fb4738b7 (patch) | |
tree | b45ac4fc52e7972fcc455ff00d92e0e999a63aac | |
parent | d0b0b9c5f2e0d302b9150e6eeb5be9b2467fb792 (diff) |
make skippable decorator not always save state
There are some runs where the "skippable" decorator should not save the
state of the game before and after, like if the function is given
different parameters and the after state should not be the canonical
after state.
-rw-r--r-- | pokemontools/vba/autoplayer.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/pokemontools/vba/autoplayer.py b/pokemontools/vba/autoplayer.py index b47634e..c1e36bc 100644 --- a/pokemontools/vba/autoplayer.py +++ b/pokemontools/vba/autoplayer.py @@ -19,11 +19,16 @@ def skippable(func): def wrapped_function(*args, **kwargs): self = args[0] skip = True + override = True if "skip" in kwargs.keys(): skip = kwargs["skip"] del kwargs["skip"] + if "override" in kwargs.keys(): + override = kwargs["override"] + del kwargs["override"] + # override skip if there's no save if skip: full_name = func.__name__ + "-end.sav" @@ -33,9 +38,13 @@ def skippable(func): return_value = None if not skip: - self.cry.save_state(func.__name__ + "-start", override=True) + if override: + self.cry.save_state(func.__name__ + "-start", override=override) + return_value = func(*args, **kwargs) - self.cry.save_state(func.__name__ + "-end", override=True) + + if override: + self.cry.save_state(func.__name__ + "-end", override=override) elif skip: self.cry.vba.state = self.cry.load_state(func.__name__ + "-end") @@ -81,7 +90,7 @@ class SpeedRunner(Runner): self.new_bark_level_grind(10, skip=False) @skippable - def skip_intro(self): + def skip_intro(self, stop_at_name_selection=False): """ Skip the game boot intro sequence. """ @@ -124,6 +133,9 @@ class SpeedRunner(Runner): # read text until name selection self.cry.text_wait() + if stop_at_name_selection: + return + # select "Chris" self.cry.vba.press("d", hold=10, after=1) self.cry.vba.press("a", hold=50, after=1) |