summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan Bishop <kanzure@gmail.com>2013-09-22 11:38:35 -0500
committerBryan Bishop <kanzure@gmail.com>2013-09-22 11:38:35 -0500
commit54579ad69962d62a7af874635ff4e3e5fb4738b7 (patch)
treeb45ac4fc52e7972fcc455ff00d92e0e999a63aac
parentd0b0b9c5f2e0d302b9150e6eeb5be9b2467fb792 (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.py18
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)