#!/usr/bin/env python3 import sys import os import zipfile GBP_BUTTON_A = 0x0001 GBP_BUTTON_B = 0x0002 GBP_BUTTON_SELECT = 0x0004 GBP_BUTTON_START = 0x0008 GBP_BUTTON_RIGHT = 0x0010 GBP_BUTTON_LEFT = 0x0020 GBP_BUTTON_UP = 0x0040 GBP_BUTTON_DOWN = 0x0080 GBP_BUTTON_L = 0x0100 GBP_BUTTON_R = 0x0200 MAPPING = (GBP_BUTTON_UP, GBP_BUTTON_DOWN, GBP_BUTTON_LEFT, GBP_BUTTON_RIGHT, GBP_BUTTON_START, GBP_BUTTON_SELECT, GBP_BUTTON_B, GBP_BUTTON_A, GBP_BUTTON_L, GBP_BUTTON_R) CYCLES_PER_FRAME = 280896 bk2_path = sys.argv[1] if not os.path.isfile(bk2_path): print('ERROR: File does not exist!') sys.exit(1) bk2_abs = os.path.abspath(bk2_path) bk2 = zipfile.ZipFile(bk2_abs) inputs = bk2.open('Input Log.txt') lastInput = "" def convert_frame(data): out = 0 for index, button in enumerate(MAPPING): if data[index] != ".": out ^= button return out cycle = -83776 with open("GBItimestamps.txt", "w") as f: for line in inputs: sline = line.decode().rstrip() if sline[0] == "|": cycle += CYCLES_PER_FRAME data = sline.split(",")[4][:-1] if data != lastInput: f.write(f"{cycle//4096:08X} {convert_frame(data):04X}\n") lastInput = data