mirror of https://github.com/pret/pokecrystal.git
vba - record/replay button sequences
This commit is contained in:
parent
0fa5d9a162
commit
6a3cf4e393
|
@ -443,6 +443,69 @@ def press(buttons, steplimit=1):
|
||||||
for step_counter in range(0, steplimit):
|
for step_counter in range(0, steplimit):
|
||||||
Gb.step(number)
|
Gb.step(number)
|
||||||
|
|
||||||
|
def get_buttons():
|
||||||
|
"""
|
||||||
|
Returns the currentButtons[0] value (an integer with bits set for which
|
||||||
|
buttons are currently pressed).
|
||||||
|
"""
|
||||||
|
return Gb.getCurrentButtons()
|
||||||
|
|
||||||
|
class State(RomList):
|
||||||
|
name = None
|
||||||
|
|
||||||
|
class Recording:
|
||||||
|
def __init__(self):
|
||||||
|
self.frames = []
|
||||||
|
self.states = {}
|
||||||
|
|
||||||
|
def _get_frame_count(self):
|
||||||
|
return len(self.frames)
|
||||||
|
|
||||||
|
frame_count = property(fget=_get_frame_count)
|
||||||
|
|
||||||
|
def save(self, name=None):
|
||||||
|
"""
|
||||||
|
Saves the current state.
|
||||||
|
"""
|
||||||
|
state = State(get_state())
|
||||||
|
state.name = name
|
||||||
|
self.states[self.frame_count] = state
|
||||||
|
|
||||||
|
def load(self, name):
|
||||||
|
"""
|
||||||
|
Loads a state by name in the state list.
|
||||||
|
"""
|
||||||
|
for state in self.states.items():
|
||||||
|
if state.name == name:
|
||||||
|
set_state(state)
|
||||||
|
return state
|
||||||
|
return False
|
||||||
|
|
||||||
|
def step(self, stepcount=1, first_frame=0, replay=False):
|
||||||
|
"""
|
||||||
|
Records button presses for each frame.
|
||||||
|
"""
|
||||||
|
if replay:
|
||||||
|
stepcount = len(self.frames[first_name:])
|
||||||
|
|
||||||
|
for counter in range(first_frame, stepcount):
|
||||||
|
if replay:
|
||||||
|
press(self.frames[counter], steplimit=0)
|
||||||
|
else:
|
||||||
|
self.frames.append(get_buttons())
|
||||||
|
nstep(1)
|
||||||
|
|
||||||
|
def replay_from(self, thing):
|
||||||
|
"""
|
||||||
|
Replays based on a State or the name of a saved state.
|
||||||
|
"""
|
||||||
|
if isinstance(thing, State):
|
||||||
|
set_state(thing)
|
||||||
|
else:
|
||||||
|
thing = self.load(thing)
|
||||||
|
frame_id = self.states.index(thing)
|
||||||
|
self.step(first_frame=frame_id, replay=True)
|
||||||
|
|
||||||
class Registers:
|
class Registers:
|
||||||
order = [
|
order = [
|
||||||
"pc",
|
"pc",
|
||||||
|
|
Loading…
Reference in New Issue