def pick_self(self, state, pad): if self.selected: self.lastState = state pad.release_button(p3.pad.Button.A) else: # Go to yoshi and press A target_x = 4.5 target_y = 18.5 # >>> choose fox >>> # target_x = -23.5 # target_y = 11.5 # <<< choose fox <<< dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < 1.3: pad.press_button(p3.pad.Button.A) self.selected = True pad.tilt_stick(p3.pad.Stick.MAIN, 0.5, 0.5) else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5)
def train(self, state, pad, MEM, DQN): if self.cpu_setter == 10: pad.release_button(p3.pad.Button.START) self.cpu_setter += 1 elif self.cpu_setter == 9: DQN.update_weights(MEM.sample(50)) pad.press_button(p3.pad.Button.START) self.cpu_setter += 1
def pick_marth(self, state, pad): if self.cpu_setter == 1: pad.release_button(p3.pad.Button.A) self.cpu_setter += 1 self.marth_picked = True else: self.move_to(state, pad, 11, 4) if self.in_place: pad.press_button(p3.pad.Button.A) self.cpu_setter += 1 self.in_place = False
def restart(self, state, pad): state.players[1].percent = 0 state.players[2].percent = 0 pad.reset() pad.press_button(Button.L) pad.press_button(Button.R) pad.press_button(Button.A) pad.press_button(Button.B) for x in range(0, 30000): pad.press_button(Button.START) pad.release_button(Button.START) pad.reset()
def make_action(state, pad, mm, fox): if state.menu == p3.state.Menu.Game: pad.release_button(p3.pad.Button.START) if fox.advance(state, pad, mm) == c.game['n_agents']: pad.reset() return False elif state.menu == p3.state.Menu.Characters: mm.pick_falcon(state, pad) print(state.players[1].character) elif state.menu == p3.state.Menu.Stages: mm.press_start_lots(state, pad) elif state.menu == p3.state.Menu.PostGame: mm.press_start_lots(state, pad) return True
def pick_self(self, state, pad): if self.selected: self.lastState = state pad.release_button(p3.pad.Button.A) else: # Go to falco and press A target_x = -29.5 target_y = 11.5 moved = self.move_stick(state, pad, target_x, target_y) if moved: pad.press_button(p3.pad.Button.A) self.selected = True # the sleep is so that the inputs don't get sent at the same time in which case the reset overrides the button press time.sleep(.02) pad.reset()
def set_bot_level(self, state, pad, level=9): if self.bot_level_set: self.lastState = state pad.release_button(p3.pad.Button.A) else: target_x = 0.0 target_y = 0.0 if not self.active: # move cursor above player row to activate p2 target_x = -15.0 target_y = 1.5 moved = self.move_stick(state, pad, target_x, target_y) if moved: pad.reset() self.active = True elif not self.is_bot: target_x = -30.0 target_y = -2.2 moved = self.move_stick(state, pad, target_x, target_y) if moved: pad.press_button(p3.pad.Button.A) time.sleep(0.05) pad.reset() self.is_bot = True elif not self.bot_level_selected: # Go to bot level and press A target_x = -30.9 target_y = -15.12 moved = self.move_stick(state, pad, target_x, target_y) if moved: pad.press_button(p3.pad.Button.A) time.sleep(0.05) # pad.release_button(p3.pad.Button.A) pad.reset() self.bot_level_selected = True elif not self.bot_level_set: target_x = -31.9 + float(level)*1.1 target_y = -15.12 moved = self.move_stick(state, pad, target_x, target_y) if moved: pad.press_button(p3.pad.Button.A) time.sleep(.02) pad.reset() self.bot_level_set = True
def drag_to_9(self, state, pad): if self.dragged_to_9: pad.release_button(p3.pad.Button.A) pad.tilt_stick(p3.pad.Stick.MAIN, 0.5, 0.5) self.get_settings(state, pad) else: target_x = -7.0 target_y = -15.0 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < .5: pad.press_button(p3.pad.Button.A) self.dragged_to_9 = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5)
def pick_cpu(self, state, pad): if self.selected_cpu: pad.release_button(p3.pad.Button.A) pad.tilt_stick(p3.pad.Stick.MAIN, 0.5, 0.5) self.pick_cpu_level_9(state, pad) else: target_x = -16.0 target_y = -2 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < .5: pad.press_button(p3.pad.Button.A) self.selected_cpu = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5)
def pick_itachi(self, state, pad): if self.selected_itachi: # Release buttons pad.release_button(p3.pad.Button.A) else: # Go to itachi and press A target_x = -23.5 target_y = 11.5 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < 0.3: pad.press_button(p3.pad.Button.A) self.selected_itachi = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5)
def set_rules(self, state, pad): if self.rules_set: pad.release_button(p3.pad.Button.B) return True if self.entered_menu: pad.release_button(p3.pad.Button.A) if self.menu_count == 0: pad.tilt_stick(p3.pad.Stick.MAIN, .5, 0) if self.menu_count == 1: pad.tilt_stick(p3.pad.Stick.MAIN, .5, .5) if self.menu_count == 2: pad.tilt_stick(p3.pad.Stick.MAIN, 0, .5) if self.menu_count == 3: pad.tilt_stick(p3.pad.Stick.MAIN, .5, .5) if self.menu_count == 4: pad.tilt_stick(p3.pad.Stick.MAIN, 0, .5) if self.menu_count == 5: pad.tilt_stick(p3.pad.Stick.MAIN, .5, .5) if self.menu_count == 6: pad.tilt_stick(p3.pad.Stick.MAIN, 0, .5) if self.menu_count == 7: pad.tilt_stick(p3.pad.Stick.MAIN, .5, .5) if self.menu_count == 8: pad.tilt_stick(p3.pad.Stick.MAIN, 0, .5) if self.menu_count == 9: pad.tilt_stick(p3.pad.Stick.MAIN, .5, .5) if self.menu_count == 10: pad.press_button(p3.pad.Button.B) self.rules_set = True if state.frame % 30 == 0: self.menu_count += 1 return False else: # Go to cpu and press A target_x = -15.5 target_y = 22 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < 0.35: pad.press_button(p3.pad.Button.A) self.entered_menu = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5) return False
def get_settings(self, state, pad): if self.selected_settings: pad.release_button(p3.pad.Button.A) pad.tilt_stick(p3.pad.Stick.MAIN, 0.5, 0.5) self.change_settings(state, pad) else: target_x = 0.0 target_y = 30.0 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < 5.1: pad.press_button(p3.pad.Button.A) self.selected_settings = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5)
def char_setup(self, state, pad): if not self.marth_picked: self.pick_marth(state, pad) else: if not self.cpu_selected: self.select_cpu(state, pad) else: if not self.diff_set: self.set_diff(state, pad) else: # for some reason, won't press final START # ALSO, dk where cursor is in memory for stage select pad.tilt_stick(p3.pad.Stick.MAIN, 0.5, 0.5) if self.start: pad.release_button(p3.pad.Button.START) else: pad.press_button(p3.pad.Button.START) self.start = True
def pick_falco(self, state, pad): if self.selected_falco: pad.release_button(p3.pad.Button.A) pad.tilt_stick(p3.pad.Stick.MAIN, 0.5, 0.5) self.pick_cpu(state, pad) else: # Go to falco and press A target_x = -30 target_y = 11.5 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < 0.5: pad.press_button(p3.pad.Button.A) self.selected_falco = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5)
def set_diff(self, state, pad): if self.cpu_setter == 9: pad.release_button(p3.pad.Button.A) self.cpu_setter += 1 self.diff_set = True elif self.cpu_setter == 8: pad.release_button(p3.pad.Button.A) self.move_to(state, pad, -21, -15) if self.in_place: pad.press_button(p3.pad.Button.A) self.cpu_setter += 1 self.in_place = False elif self.cpu_setter == 7: self.move_to(state, pad, -30, -15, 0.6) if self.in_place: pad.press_button(p3.pad.Button.A) self.cpu_setter += 1 self.in_place = False
def select_cpu(self, state, pad): if self.cpu_setter == 6: pad.release_button(p3.pad.Button.A) self.cpu_setter += 1 self.cpu_selected = True elif self.cpu_setter == 5: pad.press_button(p3.pad.Button.A) self.cpu_setter += 1 elif self.cpu_setter == 4: pad.release_button(p3.pad.Button.A) self.cpu_setter += 1 elif self.cpu_setter == 3: pad.press_button(p3.pad.Button.A) self.cpu_setter += 1 elif self.cpu_setter == 2: self.move_to(state, pad, -30, -2, 0.4) if self.in_place: self.cpu_setter += 1 self.in_place = False
def pick_fox(self, state, pad): if self.selected: # Release buttons and lazilly rotate the c stick. pad.release_button(p3.pad.Button.A) pad.tilt_stick(p3.pad.Stick.MAIN, 0.5, 0.5) angle = (state.frame % 240) / 240.0 * 2 * math.pi pad.tilt_stick(p3.pad.Stick.C, 0.4 * math.cos(angle) + 0.5, 0.4 * math.sin(angle) + 0.5) else: # Go to fox and press A target_x = -23.5 target_y = 11.5 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < 0.3: pad.press_button(p3.pad.Button.A) self.selected = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5)
def pick_fox(self, state, pad): if self.selected_fox: pad.tilt_stick(p3.pad.Stick.MAIN, .5, .5) pad.release_button(p3.pad.Button.A) return True else: # Go to fox and press A target_x = -23.5 target_y = 11.5 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < 1: pad.press_button(p3.pad.Button.A) self.selected_fox = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5) return False
def pick_fox(self, state, pad): if self.selected_fox: # Release buttons and lazilly rotate the c stick. pad.release_button(p3.pad.Button.A) pad.tilt_stick(p3.pad.Stick.MAIN, 0.5, 0.5) angle = (state.frame % 240) / 240.0 * 2 * math.pi pad.tilt_stick(p3.pad.Stick.C, 0.4 * math.cos(angle) + 0.5, 0.4 * math.sin(angle) + 0.5) else: # Go to fox and press A target_x = -23.5 target_y = 11.5 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < 0.3: pad.press_button(p3.pad.Button.A) self.selected_fox = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5)
def pick_cpu(self, state, pad): if self.setup_cpu: return True if self.selected_cpu: # Release buttons and lazilly rotate the c stick. pad.release_button(p3.pad.Button.A) self.setup_cpu = True return False else: # Go to cpu and press A target_x = -15.5 target_y = -4.0 dx = target_x - state.players[2].cursor_x dy = target_y - state.players[2].cursor_y mag = math.sqrt(dx * dx + dy * dy) if mag < 0.35: pad.press_button(p3.pad.Button.A) self.selected_cpu = True else: pad.tilt_stick(p3.pad.Stick.MAIN, 0.5 * (dx / mag) + 0.5, 0.5 * (dy / mag) + 0.5) return False
def execute(self, actions): pad_path = self.dolphin_dir + '/Pipes/p3' with p3.pad.Pad(pad_path) as pad: for action in actions: if action == 'MR': pad.tilt_stick(p3.pad.Stick.MAIN, .5, .5) elif action == 'MN': pad.tilt_stick(p3.pad.Stick.MAIN, .5, 1) elif action == 'MNW': pad.tilt_stick(p3.pad.Stick.MAIN, 1, 1) elif action == 'MW': pad.tilt_stick(p3.pad.Stick.MAIN, 1, .5) elif action == 'MSW': pad.tilt_stick(p3.pad.Stick.MAIN, 1, 0) elif action == 'MS': pad.tilt_stick(p3.pad.Stick.MAIN, .5, 0) elif action == 'MSE': pad.tilt_stick(p3.pad.Stick.MAIN, 0, 0) elif action == 'ME': pad.tilt_stick(p3.pad.Stick.MAIN, 0, .5) elif action == 'MNE': pad.tilt_stick(p3.pad.Stick.MAIN, 0, 1) if action == 'CR': pad.tilt_stick(p3.pad.Stick.C, .5, .5) elif action == 'CN': pad.tilt_stick(p3.pad.Stick.C, .5, 1) elif action == 'CNW': pad.tilt_stick(p3.pad.Stick.C, 1, 1) elif action == 'CW': pad.tilt_stick(p3.pad.Stick.C, 1, .5) elif action == 'CSW': pad.tilt_stick(p3.pad.Stick.C, 1, 0) elif action == 'CS': pad.tilt_stick(p3.pad.Stick.C, .5, 0) elif action == 'CSE': pad.tilt_stick(p3.pad.Stick.C, 0, 0) elif action == 'CE': pad.tilt_stick(p3.pad.Stick.C, 0, .5) elif action == 'CNE': pad.tilt_stick(p3.pad.Stick.C, 0, 1) if action == 'PA': pad.press_button(p3.pad.Button.A) elif action == 'RA': pad.release_button(p3.pad.Button.A) if action == 'PB': pad.press_button(p3.pad.Button.B) elif action == 'RB': pad.release_button(p3.pad.Button.B) if action == 'PY': pad.press_button(p3.pad.Button.Y) elif action == 'RY': pad.release_button(p3.pad.Button.Y) if action == 'PZ': pad.press_button(p3.pad.Button.Z) elif action == 'RZ': pad.release_button(p3.pad.Button.Z)
def press_start_lots(self, state, pad): if state.frame % 2 == 0: pad.press_button(p3.pad.Button.START) else: pad.release_button(p3.pad.Button.START)
def change_settings(self, state, pad): if self.changed_settings: pad.reset() self.press_start_lots(state, pad) else: if state.frame % 440 == 0: pad.press_button(p3.pad.Button.D_LEFT) elif state.frame % 442 == 0: pad.release_button(p3.pad.Button.D_LEFT) elif state.frame % 444 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 446 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 448 == 0: pad.press_button(p3.pad.Button.D_LEFT) elif state.frame % 450 == 0: pad.release_button(p3.pad.Button.D_LEFT) elif state.frame % 455 == 0: pad.press_button(p3.pad.Button.D_LEFT) elif state.frame % 460 == 0: pad.release_button(p3.pad.Button.D_LEFT) elif state.frame % 465 == 0: pad.press_button(p3.pad.Button.D_UP) elif state.frame % 470 == 0: pad.release_button(p3.pad.Button.D_UP) elif state.frame % 475 == 0: pad.press_button(p3.pad.Button.D_UP) elif state.frame % 480 == 0: pad.release_button(p3.pad.Button.D_UP) elif state.frame % 485 == 0: pad.press_button(p3.pad.Button.A) elif state.frame % 490 == 0: pad.release_button(p3.pad.Button.A) elif state.frame % 495 == 0: pad.press_button(p3.pad.Button.D_UP) elif state.frame % 500 == 0: pad.release_button(p3.pad.Button.D_UP) elif state.frame % 505 == 0: pad.press_button(p3.pad.Button.A) elif state.frame % 510 == 0: pad.release_button(p3.pad.Button.A) elif state.frame % 515 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 520 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 525 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 530 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 535 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 540 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 545 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 550 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 555 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 560 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 565 == 0: pad.press_button(p3.pad.Button.A) elif state.frame % 570 == 0: pad.release_button(p3.pad.Button.A) elif state.frame % 575 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 580 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 585 == 0: pad.press_button(p3.pad.Button.A) elif state.frame % 590 == 0: pad.release_button(p3.pad.Button.A) elif state.frame % 595 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 600 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 605 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 610 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 615 == 0: pad.press_button(p3.pad.Button.A) elif state.frame % 620 == 0: pad.release_button(p3.pad.Button.A) elif state.frame % 625 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 630 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 635 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 640 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 645 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 650 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 655 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 660 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 665 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 670 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 675 == 0: pad.press_button(p3.pad.Button.A) elif state.frame % 680 == 0: pad.release_button(p3.pad.Button.A) elif state.frame % 685 == 0: pad.press_button(p3.pad.Button.D_DOWN) elif state.frame % 690 == 0: pad.release_button(p3.pad.Button.D_DOWN) elif state.frame % 695 == 0: pad.press_button(p3.pad.Button.A) elif state.frame % 700 == 0: pad.release_button(p3.pad.Button.A) elif state.frame % 705 == 0: pad.press_button(p3.pad.Button.B) elif state.frame % 710 == 0: pad.release_button(p3.pad.Button.B) elif state.frame % 715 == 0: pad.press_button(p3.pad.Button.B) elif state.frame % 720 == 0: pad.release_button(p3.pad.Button.B) elif state.frame % 725 == 0: pad.press_button(p3.pad.Button.B) elif state.frame % 730 == 0: pad.release_button(p3.pad.Button.B) self.changed_settings = True