From a5463094e22d33bd1d6dfa43bf24abb6d2403e31 Mon Sep 17 00:00:00 2001 From: Trysdyn Black Date: Wed, 26 Sep 2018 17:33:07 -0700 Subject: [PATCH] Initial commit --- main.pyw | 222 ++++++++++++++++++++++++++++ profiles/genesis/base.png | Bin 0 -> 19699 bytes profiles/genesis/config.txt | 76 ++++++++++ profiles/nes/base.png | Bin 0 -> 1604 bytes profiles/nes/config.txt | 76 ++++++++++ profiles/psx/base.png | Bin 0 -> 2205 bytes profiles/psx/config.txt | 82 ++++++++++ profiles/snes/base.png | Bin 0 -> 4799 bytes profiles/snes/config.txt | 96 ++++++++++++ profiles/universal - sfc/base.png | Bin 0 -> 3433 bytes profiles/universal - sfc/config.txt | 73 +++++++++ profiles/universal/base.png | Bin 0 -> 3433 bytes profiles/universal/config.txt | 103 +++++++++++++ 13 files changed, 728 insertions(+) create mode 100644 main.pyw create mode 100644 profiles/genesis/base.png create mode 100644 profiles/genesis/config.txt create mode 100644 profiles/nes/base.png create mode 100644 profiles/nes/config.txt create mode 100644 profiles/psx/base.png create mode 100644 profiles/psx/config.txt create mode 100644 profiles/snes/base.png create mode 100644 profiles/snes/config.txt create mode 100644 profiles/universal - sfc/base.png create mode 100644 profiles/universal - sfc/config.txt create mode 100644 profiles/universal/base.png create mode 100644 profiles/universal/config.txt diff --git a/main.pyw b/main.pyw new file mode 100644 index 0000000..9a33666 --- /dev/null +++ b/main.pyw @@ -0,0 +1,222 @@ +import json +import os +import sys +import pygame +import time + + +class Visualizer: + def __init__(self, profile): + # Change to script dir to allow loading of configs relative to script + if getattr(sys, 'frozen', False): + # The application is frozen, figure out the path of the EXE + pathname = os.path.dirname(sys.executable) + else: + # The application is not frozen, get PWD + pathname = os.path.dirname(__file__) + if pathname: + os.chdir(pathname) + + # Load config + self.config = self.load_config(profile)["profile"] + + # initialize the screen + self.win_size = self.config["size"] + pygame.init() + self.screen = pygame.display.set_mode(self.config["size"], pygame.RESIZABLE) + pygame.display.set_caption("SRTK Gamepad Visualizer: %s" % profile) + + # Load and prep the background + background_file = os.path.join("profiles", profile, self.config["background_image"]) + self.background = pygame.image.load(background_file).convert_alpha() + + # Create the buffer image to draw on, set to the size of the background image + self.buffer = pygame.surface.Surface(self.background.get_size()) + + # Create the font + self.text_font = pygame.font.SysFont(self.config["font_face"], self.config["font_size"]) + self.font_color = self.config["font_color"] + self.text_pos = self.config["text_pos"] + + # APS counter + self.actions = [] + self.aps_min = self.config["aps_minimum"] + self.aps = 0 + self.aps_throttle = 3 + + # Set up our inputs + # Inputs are defined as key = (light position, light surface object) + self.active_inputs = set() + self.last_inputs = set() + self.inputs = {} + + inputs = self.config["inputs"] + for i in inputs: + if "enabled" in inputs[i] and not inputs[i]["enabled"]: + continue + + pos = inputs[i]["pos"] + size = inputs[i]["size"] + color = inputs[i]["color"] if "color" in inputs[i] else self.config["default_color"] + + img = pygame.Surface(size) + img.fill(color) + + try: + i = int(i) + except: + pass + + self.inputs[i] = (pos, img) + + def load_config(self, profile): + infile_name = os.path.join("profiles", profile, "config.txt") + infile = open(infile_name, "r") + config = json.load(infile) + + return config + + def button_down(self, button_id): + self.active_inputs.add(button_id) + self.actions.append(time.time()) + + def button_up(self, button_id): + try: + self.active_inputs.remove(button_id) + except: + pass + + def axis_change(self, axis, value): + if value > 0.1: + self.active_inputs.add("A%dP" % axis) + elif value < -0.1: + self.active_inputs.add("A%dM" % axis) + else: + for a in ["A%dM" % axis, "A%dP" % axis]: + try: + self.active_inputs.remove(a) + except: + pass + + def hat_change(self, hat, value): + # H0U, H0D, H0L, H0R + if value[0] < 0: + self.active_inputs.add("H%dL" % hat) + elif value[0] > 0: + self.active_inputs.add("H%dR" % hat) + else: + for a in ["H%dL" % hat, "H%dR" % hat]: + try: + self.active_inputs.remove(a) + except: + pass + + if value[1] < 0: + self.active_inputs.add("H%dD" % hat) + elif value[1] > 0: + self.active_inputs.add("H%dU" % hat) + else: + for a in ["H%dU" % hat, "H%dD" % hat]: + try: + self.active_inputs.remove(a) + except: + pass + + def update(self): + """ + Handles screen drawing. Blits images to a buffer image, resizes the + buffer to the size of the screen, then blits the buffer to the screen. + """ + if self.active_inputs == self.last_inputs: + return None + + self.last_inputs = set(self.active_inputs) + + buf = self.buffer + screen = self.screen + + # Blank the buffer, draw the button hilights + buf.fill(self.config["background_color"]) + + for i in self.active_inputs: + try: + loc, img = self.inputs[i] + buf.blit(img, loc) + except KeyError: + pass + + # Draw the background overtop as a mask + buf.blit(self.background, (0, 0)) + + # Draw APS + # Throttle keeps us from "Vibrating number syndrome" + self.aps_throttle -= 1 + if self.aps_throttle < 1: + self.aps_throttle = 3 + + # Only score APS off the last 30 actions and last 5s + while self.actions and self.actions[0] < (time.time() - 5): + self.actions.pop(0) + if len(self.actions) > 30: + self.actions = self.actions[-30:] + + # Time from last action to current time, to get APS + # We want at least 5 actions before we consider drawing APS + if len(self.actions) > 5: + aps_len = time.time() - self.actions[0] + 0.01 + self.aps = len(self.actions) / aps_len + else: + self.aps = 0 + + # We only care about APS if we're mashing, so only draw it if it's over aps_min + if self.aps > self.aps_min: + aps_surf = self.text_font.render("%0.1f" % self.aps, 1, self.font_color) + buf.blit(aps_surf, self.config["text_pos"]) + + # Scale the buffer to the screen size if necessary + if buf.get_size() != screen.get_size(): + buf = pygame.transform.scale(buf, screen.get_size()) + + # Blit buffer to screen + screen.blit(buf, (0, 0)) + pygame.display.flip() + +if __name__ == "__main__": + # Read in a profile name from commandline + if len(sys.argv) == 2: + profile = sys.argv[1] + else: + profile = "universal" + + # Initialize all our joysticks so we get the one we want + # Since this is a one-player app, this should be fine... + pygame.joystick.init() + joysticks = [pygame.joystick.Joystick(x) for x in range(pygame.joystick.get_count())] + for joy in joysticks: + joy.init() + + # Initialize our visualizer context + vis = Visualizer(profile) + + quit = False + + while not quit: + + # Note that we wait for pygame events before doing any redraws + # This limits redraws to when button states change, normally + event = pygame.event.wait() + if event.type == pygame.VIDEORESIZE: + vis.win_size = (event.w, event.h) + vis.screen = pygame.display.set_mode(vis.win_size, pygame.RESIZABLE) + elif event.type == pygame.QUIT: + quit = True + elif event.type == pygame.JOYBUTTONDOWN: + vis.button_down(event.button) + elif event.type == pygame.JOYBUTTONUP: + vis.button_up(event.button) + elif event.type == pygame.JOYAXISMOTION: + vis.axis_change(event.axis, event.value) + elif event.type == pygame.JOYHATMOTION: + vis.hat_change(event.hat, event.value) + + vis.update() diff --git a/profiles/genesis/base.png b/profiles/genesis/base.png new file mode 100644 index 0000000000000000000000000000000000000000..f30026785f0e9ddb6334468c325c2d3e83e97389 GIT binary patch literal 19699 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 aTOU(vig!K5#(*c;Ivm#4ve4Y+-v0r^o)S<1 literal 0 HcmV?d00001 diff --git a/profiles/genesis/config.txt b/profiles/genesis/config.txt new file mode 100644 index 0000000..8581b4b --- /dev/null +++ b/profiles/genesis/config.txt @@ -0,0 +1,76 @@ +{ + "profile": { + "name": "SNES", + "background_image": "base.png", + "background_color": [0, 0, 0], + "size": [270, 159], + "color_key": [255, 255, 255], + "default_color": [255, 244, 61], + "inputs": { + "0": { + "comment": "Square (A)", + "size": [25, 25], + "pos": [172, 73] + }, + "1": { + "comment": "Cross (B)", + "size": [25, 25], + "pos": [198, 59] + }, + "2": { + "comment": "Circle (C)", + "size": [25, 25], + "pos": [226, 47] + }, + "9": { + "comment": "Start", + "size": [31, 20], + "pos": [178, 23] + }, + "6": { + "comment": "Split", + "size": [42, 20], + "pos": [114, 25], + "color": [0, 255, 0] + }, + "12": { + "comment": "Reset", + "size": [55, 15], + "pos": [107, 49], + "color": [255, 0, 0] + }, + "A0M": { + "size": [18, 11], + "pos": [34, 65] + }, + "A0P": { + "size": [18, 11], + "pos": [66, 65] + }, + "A1M": { + "size": [11, 18], + "pos": [54, 45] + }, + "A1P": { + "size": [11, 18], + "pos": [54, 77] + }, + "H0L": { + "size": [18, 11], + "pos": [34, 65] + }, + "H0R": { + "size": [18, 11], + "pos": [66, 65] + }, + "H0U": { + "size": [11, 18], + "pos": [54, 45] + }, + "H0D": { + "size": [11, 18], + "pos": [54, 77] + } + } + } +} diff --git a/profiles/nes/base.png b/profiles/nes/base.png new file mode 100644 index 0000000000000000000000000000000000000000..67034c78dbbc141fb7d29add3b0bfe0120fc1e15 GIT binary patch literal 1604 zcmZWpeLT~79RGDCX$^I1NR(8>k=9gZ=eA)hkHdMG^DyOE@ycxBJe)*DMsz|X%UX&J zQF$)8m#4YyJWgfxy10#LrM5K>x!>sSkGns#(&wL|Jh4_k(JHM>VSh${FcX>~E zb-4-gOP(I>iS4_w*;}b5RZug=r_(-8qF(lmKMF`6eotI(Sem`S*@a$aGRC6k`rb;I zb&{V>bbVoK%a)f>S{!ZrFI^+!RHBM72`EuF#RfuD_cJgkk<@11D%{^wO&y#FKeyPO9#5MOGLWsZ5nt2A84$5MlfY@Pmo z56*pD6qWrbCZ^46D8AZ$#uJotpe6tBuUsr+@x_%*E>WmPBzLj)!zBN{2j|a_doGQ; ze73X<;p*5)?A8ahNniC5$zc|zvn3qOzLRHEcXYjz5qv1F5MlxGOwC=2YNFuzG|UQH zsR(y*^NK{WwJAlkXQig$Ws!}I}i+JdO@Ou>H-S{Z5&84_4o)iZu zdT54KKPIqYPAjZCxca?(9lLr3;Z8we){?P1@%q2=+WxS`ouPx|Le-s3 zuzWnl2zdc-^;wm%{%v$>*FbUZd{CFna9eNg=`hXSjVqnxw3}zRunN7B<3j}f=$^iy{BD!Q*Q`9~9L;cm;uv(Badz7!yEWHOZDaQ-Jh?h*eWqkJx!WxR zc$jtH1?Y=xybV1-HM+IgdM{c5YmTk?eqr#Y z$XMg)`>KcUeCO{~z_;by?WYVg}xDbp~rg>xu+)f!f)o?15PBI$7m$#4sJkQJ}+&JaZFs>-kwr zDXg*(_|PxihjfE2I&dA|zKn(yzo}R+wvUTs;w(x&UKqqP^`v?s4H}B&0AznCV|_O1 z$n$^{TFQaPeDlNfboDw_&NwzXk(*;ccEC(A|1vI3?vcnRe68SM|Iqiy=94}lpK>Vq zI@`&YaD9991FIdu305sa)cJ^N*Q*0~W!1D|U@;m}g=O3-eYPq` z`{Fc8N2x#;aj_B>Sm7YPjj{?II=A%z9louQ72aMrF;J{-#>k>)lYdp3bke}VL}p6D l%1LTjb)YNwq=r-~u_fj}SVj6Hj^GprPT0HH)nbCu{|2g54CDX+ literal 0 HcmV?d00001 diff --git a/profiles/nes/config.txt b/profiles/nes/config.txt new file mode 100644 index 0000000..240b407 --- /dev/null +++ b/profiles/nes/config.txt @@ -0,0 +1,76 @@ +{ + "profile": { + "name": "NES", + "background_image": "base.png", + "background_color": [0, 0, 0], + "size": [197, 56], + "color_key": [255, 255, 255], + "default_color": [255, 244, 61], + "inputs": { + "1": { + "comment": "Square (B)", + "size": [25, 25], + "pos": [164, 27] + }, + "0": { + "comment": "Cross (A)", + "size": [25, 25], + "pos": [135, 27] + }, + "23": { + "comment": "Split", + "size": [40, 19], + "pos": [58, 3], + "color": [0, 255, 0] + }, + "22": { + "comment": "Reset", + "size": [51, 14], + "pos": [139, 4], + "color": [255, 0, 0] + }, + "6": { + "comment": "Select", + "size": [22, 10], + "pos": [65, 36] + }, + "7": { + "comment": "Start", + "size": [22, 10], + "pos": [98, 36] + }, + "A0M": { + "size": [10, 10], + "pos": [6, 22] + }, + "A0P": { + "size": [10, 10], + "pos": [35, 22] + }, + "A1M": { + "size": [10, 10], + "pos": [20, 8] + }, + "A1P": { + "size": [10, 10], + "pos": [20, 37] + }, + "H0L": { + "size": [10, 10], + "pos": [6, 22] + }, + "H0R": { + "size": [10, 10], + "pos": [35, 22] + }, + "H0U": { + "size": [10, 10], + "pos": [20, 8] + }, + "H0D": { + "size": [10, 10], + "pos": [20, 37] + } + } + } +} diff --git a/profiles/psx/base.png b/profiles/psx/base.png new file mode 100644 index 0000000000000000000000000000000000000000..88535e817f318b49da2dbc523f8811cd939706ff GIT binary patch literal 2205 zcmai$c~p~E7Qn+2F(F~38X7XtK^UqvvNc5%42u%L0tO0v2?NCBltsc8X)4H~5{48U zWzj=jP*AX}fn->QHITrx1v-d;#M9JZ7*GjRi~_O<$-H0%>dZOw$Nj$Z-E;4|_uYHn z?|nIb$34+V91;eDp^tgFe*xb8K%nj0z%y5j$OkXoC^ug>80_zP`l}2$_(rh2g1>^n z3`82yVoGulK#60MsO*4*NOlqmAlA14KxohDe@Tie-r&K+@p!L}P8b9W0& zrajNs&;9-YN+(tA-CXKcq1u~M<`t|%)rT9g3_iY~L^Yv7ll3 zbDHtsZP^@z7Qz>7u+Nej@ObHd*-<~WcANn;Cozhf{SN05e8#c8zI0$%$h-L@>f)PP zOx)9|b*)na(5?Zk#l+Z2Qqh?ju0K?K?=#I3BmH4x!?R6LWAI;@*oY^J*hXNQUdx*- zJP>l7R0Ry{B5~ge*)I5mS9mEgVbr$2f7GX^{_1ShlW2p+*t^1+T3mUww1yjf<8?LT zM!AqV#r#ZKq@a0}3O~G!Yg>j(+ZE0pWkO@k$FA17r7zyl+OFbz$1FqJbz{WUcZ$gQ zYdRj@bfRp;DLe{MSHdZzkKP{$3Qyvcg$QoUDvUoRh-Y?U;Wga&IeUzw`SE;&@E*nhJB%QnO3RB-{$_9?;^|n(+{ah=l5!?^c#~#h_M9? zc%GFU%lj>}kN(m7Ge%;>LP2O*$C0Ob@+QQ^VPf2-Rn_iRV~A~be6f*qZ&r|!;^1n} z4mg@f;7z%LhW+iPjIl5uf1Wv2&Yg^;4rLsajTjwj@0nJ}V59ea(R~AgQk_$66;_F- zvzp*0nL$S#?Emc0bHU)BisCJiALKtm;T?BWq)N@BDAW*<9msbhh$1`OS}+Uq7ieJ?zbT?_2dAF==r-f7!caj%qK9h$^ipJTDnu<0B}wE%vlkS%yshsy)*^{uQ4g zTQ{+y!VVi@uQM(oplb}@j3I?ObI2yRAb~>th(YKta1l@UmvM?ysI!vR6L zs8Up^^YXu}f^1JRLh183iB(SwpB|Jkq&1=A-W5*j3}eJ$(|$mMX}Y_Xr@JGU1=a#q zVmzM_mf^4G2{+--ADM|?08-oAjOU><2V2Ba?c7Fn!9HxGt+j0mdgfbs;X^^4s4}xm zJC~Aj=j&#TK$E|iLf?q?Jfg>Gc}mq@R#*s&!3sG+dGb+;pjtF_{-sta9{(zi^RQxU z=t5eNe4#3-(fo0p-~h^bVq1*t+GTjV5iAex5lQ`$gNdXD(Ag_$Iy-{Y>8o6M;PjVGUyOt+ zj(V3JUVa$^b#TAV8(-*7{z$ykznRd-$?4Ok@9!NFS?YJ3?YlzM*L0W9>upBRN>V)E zZD+mNtffaW;2dY)0~6J&JT=BkT;L*gL9jZfVDm!qT z42kN3Qt<>?-ZUt>ve72m?m5dA)idSe)~uNdde)fQ%TPXEp`4DA_u+;2+d?!#$tPlR zn={p8x<5A43!UHGIV>uJsD=i`EB054#}^d_b>PGjc-KUG(_fr0dqL}NB8wX`1LV~k zcma$wrumCC;M+vR7DO_=;<*^p>=EK<{wfBX9}|GO4T!NfdARBPzxV>G-VH`mgJ<03 zA_htC-)u4{D-z7oHo)PHApeJybExY?E@hAH=Uef)L1HIf@fg|1*@dZ}>GTV)#O z*Cg9cc+I*J30iFcEYmJLI+IqFZX^4N5FW{SxW`uG{x+2jKmuNOxu!bEdV<0!SrZ`w z94IC(=QX&%hE67ItK>#cGj~Zt+}>V%*UA;+E^3vY4eS{$(D-{-@GAj3Mmp|ZcZAOQ E5BY36X#fBK literal 0 HcmV?d00001 diff --git a/profiles/psx/config.txt b/profiles/psx/config.txt new file mode 100644 index 0000000..b47d124 --- /dev/null +++ b/profiles/psx/config.txt @@ -0,0 +1,82 @@ +{ + "profile": { + "name": "PSX", + "background_image": "base.png", + "background_color": [0, 0, 0], + "size": [202, 86], + "color_key": [255, 255, 255], + "default_color": [255, 244, 61], + "inputs": { + "3": { + "comment": "Triangle", + "size": [21, 21], + "pos": [155, 17] + }, + "1": { + "comment": "Circle", + "size": [21, 21], + "pos": [177, 39] + }, + "0": { + "comment": "Cross", + "size": [21, 21], + "pos": [155, 61] + }, + "2": { + "comment": "Square", + "size": [21, 21], + "pos": [133, 39] + }, + "4": { + "comment": "L1", + "size": [16, 10], + "pos": [25, 2] + }, + "5": { + "comment": "R1", + "size": [17, 10], + "pos": [153, 2] + }, + "A2P": { + "comment": "L2", + "size": [17, 10], + "pos": [34, 2] + }, + "A2M": { + "comment": "R2", + "size": [18, 10], + "pos": [161, 2] + }, + "6": { + "comment": "select", + "size": [18, 12], + "pos": [79, 48] + }, + "7": { + "comment": "start", + "size": [18, 12], + "pos": [105, 48] + }, + "H0L": { + "comment": "left", + "size": [26, 15], + "pos": [5, 41] + }, + "H0R": { + "comment": "right", + "size": [26, 15], + "pos": [42, 41] + }, + "H0U": { + "comment": "up", + "size": [15, 26], + "pos": [29, 17] + }, + "H0D": { + "comment": "down", + "size": [15, 26], + "pos": [29, 54] + } + } + } +} diff --git a/profiles/snes/base.png b/profiles/snes/base.png new file mode 100644 index 0000000000000000000000000000000000000000..34a9e1a6509cf0db86e1a317d922fd10ed634858 GIT binary patch literal 4799 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 literal 0 HcmV?d00001 diff --git a/profiles/snes/config.txt b/profiles/snes/config.txt new file mode 100644 index 0000000..7f28a52 --- /dev/null +++ b/profiles/snes/config.txt @@ -0,0 +1,96 @@ +{ + "profile": { + "name": "SNES", + "background_image": "base.png", + "background_color": [0, 0, 0], + "size": [270, 122], + "color_key": [255, 255, 255], + "default_color": [255, 244, 61], + "inputs": { + "2": { + "comment": "Square (Y)", + "size": [25, 25], + "pos": [176, 53] + }, + "0": { + "comment": "Cross (B)", + "size": [25, 25], + "pos": [201, 73] + }, + "1": { + "comment": "Circle (A)", + "size": [25, 25], + "pos": [225, 52] + }, + "3": { + "comment": "Triangle (X)", + "size": [25, 25], + "pos": [200, 32] + }, + "4": { + "comment": "L1 (L)", + "size": [55, 10], + "pos": [27, 3] + }, + "5": { + "comment": "R1 (R)", + "size": [55, 10], + "pos": [188, 3] + }, + "6": { + "comment": "Select", + "size": [25, 25], + "pos": [100, 64] + }, + "7": { + "comment": "Start", + "size": [25, 25], + "pos": [130, 64] + }, + "8": { + "comment": "Split", + "size": [40, 19], + "pos": [108, 15], + "color": [0, 255, 0] + }, + "12": { + "comment": "Reset", + "size": [51, 14], + "pos": [105, 42], + "color": [255, 0, 0] + }, + "A0M": { + "size": [10, 10], + "pos": [40, 58] + }, + "A0P": { + "size": [10, 10], + "pos": [66, 58] + }, + "A1M": { + "size": [10, 10], + "pos": [53, 45] + }, + "A1P": { + "size": [10, 10], + "pos": [53, 72] + }, + "H0L": { + "size": [10, 10], + "pos": [40, 58] + }, + "H0R": { + "size": [10, 10], + "pos": [66, 58] + }, + "H0U": { + "size": [10, 10], + "pos": [53, 45] + }, + "H0D": { + "size": [10, 10], + "pos": [53, 72] + } + } + } +} diff --git a/profiles/universal - sfc/base.png b/profiles/universal - sfc/base.png new file mode 100644 index 0000000000000000000000000000000000000000..833744dacbf03c23a8b69f97d06ae782ea5287de GIT binary patch literal 3433 zcmeH}X;f257J#E*6BZ$aO=S@u!4QlIBm2@eU;;^y9R)--O+-f&3_;R^l17OT5ttAJ z7Z#<%(kd91Rs#qGX=y;fMg`QMfP@%Kg93ueHZO_i%=E9BpL0%k)v5QYzN)(SzFO{m zEI%L5^=g~cAP~rUA^{fwfvjl*>-A72@M+a0+zh^yW8A#mAds3I^`+=_5Qq}QZ+8$L zmExPPo@Rq zR!TzwccaPO+`dR|a+!zEjT!MvhP74qxJI(YkHVT0Hcxi<@>Hxf^mAg0J2%eLC-}8g zmsyZ?SoblRsv8bd&lUZUI;nGl4)Lc=z(Gt$xFqZT!R7 zw{2}79$7m+FzIs%-kbeZxL{16A!9u@NwG#<7ND4#M**bEEJjJkj{hr@P-S@mm8(Ee z__FCfZd^Q>T4i==B>iLm zSdo70bnnLnX&tv{@ z-G|g*T*LnFIm*l$p&lC({0iX~jZVUIyO~I$|HiI8+7jw0F(Bw1bq}r~cJWN3OW{?Z zzij8I%6ouFGUKCw@JXE%2sW2%llxyfkna&F%Uyg+AROaDJm2M4eV$OTEiU((RemGT zFY3CAu(%+q&Y^;b%VpOx8X38o@3gQGcgjl zac|;(RH$#los>HgB5@5udV!|kgV2DD`L1dA*~ccr4Q$LpQ;%Be>3i0|GWJ6^7L9%$ z$-7TpZEK5*KY;u4dNk?aiOvyRV`IhV8_p(T@^|`JFa&(MA<`sCL}^VxX#Lb zJ#iA4(6we){6#_z8Q0)B^K>asQ?OpwS$U8^V|j2JalVhVByjJ*ckuAq*GNP56z5xP z%a2|*-c?>S!AVyKz!p~ef%6Y&m!gER9)e9ZFcWt2je#iAPn*LXAvqY z3oncY2Dy)+EE%EQzp)77w}qL{6(ACAj>2;}dA;r9MADj3M47sJ=ss-;x=QD7^xObf z2jY?0Fs(0X;>B|lJ^^Y_B0!BDY+EJ&Ll_mgrursxKK5`mC~g^wy#*w|vmOXn1quCT)pER#u)t zY+Tv>sAQ(=c@n_|FS;sHW@gaNw0U%S&D#e=)V6p4Zd<@Snw@p&6wYaDOV*Snd%I0A z>lTdQC(HL@kO&jDCM&MAfkamC*#q3f!F6TXWavD>lWW!=cDS1J-1S7!?z4WN0&~Pl z`yu(hzjCj0v+%v`R_SJeC@zJ=8Heur+5yAJ#?%9xko>)zkjx-(@lmEt=|NU%aHk%@&R+uHF)j-hRrUQ4=A|#3k4@}cUb|$TP}U&`miba8RfZEdSig$ ztp%VAnH+uiw1VSr$Pauz_oP9^G5o4e8 zgw=15b}Y&fTh_5__o9+JSC~xmMfE$c$0{@C77G=I-eJ%D`>xqLqJd>hg{^$f{WjH* z{k5yD1G%Ts&3)f%OY9wQ$#qEantUFQ%n;1yE~~4z2w2*ZyAGgvp!!%-gDTiiy0cmT zbbLT&(3O3ePhBy8hrKv!C?ow&m)GkKc4~~5Dm+9=I%h8{_Bx+LM%X7pv&GFBbMFf4 z6dSaQf5VIBFo@?yiVOADzI5jac zK!4m9C-Fkc0Csc1I6gPegBplyc#2$tL?DPq5cYVk*XcH`k^iMbxfp?`SOote42Znp zy5A&(evKO*31K78>FPJ3i=q-N&5cqcej(Pei+qCC9%3!%)W)<+O#-UR$^* zwL=0Q&I~J%7I;Qfc+u>uPanGLGP~3Gj5GCvSu#bSln9;b>;a>l?W;<+!!elE==(PG za=o>S39DJp`p2*9$8HuVGeWn0`wEPZXE%&>kyvyr+T>T$kL&KfCmZNz+de^yY(K8+ nyWKqU`I!N_ERRZJtSo79%Ck?*8U>HbevXNFA6&J2)R}()vDjYU literal 0 HcmV?d00001 diff --git a/profiles/universal - sfc/config.txt b/profiles/universal - sfc/config.txt new file mode 100644 index 0000000..5cbbade --- /dev/null +++ b/profiles/universal - sfc/config.txt @@ -0,0 +1,73 @@ +{ + "profile": { + "name": "Universal", + "font_face": "Golden Sun Regular", + "font_size": 28, + "font_color": [255, 255, 255], + "background_image": "base.png", + "background_color": [50, 50, 50], + "size": [320, 128], + "color_key": [0, 0, 0], + "default_color": [181, 166, 66], + "text_pos": [200, 10], + "aps_minimum": 100, + "inputs": { + "4": { + "comment": "Square (Y)", + "size": [46, 46], + "pos": [317, 86] + }, + "1": { + "comment": "Cross (B)", + "size": [46, 46], + "pos": [359, 127] + }, + "0": { + "comment": "Circle (A)", + "size": [46, 46], + "pos": [401, 85] + }, + "3": { + "comment": "Triangle (X)", + "size": [46, 46], + "pos": [359, 43] + }, + "6": { + "comment": "L1 (L)", + "size": [139, 16], + "pos": [3, 18] + }, + "7": { + "comment": "R1 (R)", + "size": [139, 16], + "pos": [308, 18] + }, + "10": { + "comment": "Select", + "size": [57, 40], + "pos": [157, 106] + }, + "11": { + "comment": "Start", + "size": [57, 40], + "pos": [236, 106] + }, + "A0M": { + "size": [50, 39], + "pos": [3, 88] + }, + "A0P": { + "size": [50, 39], + "pos": [92, 88] + }, + "A1M": { + "size": [39, 50], + "pos": [53, 38] + }, + "A1P": { + "size": [39, 50], + "pos": [53, 127] + } + } + } +} diff --git a/profiles/universal/base.png b/profiles/universal/base.png new file mode 100644 index 0000000000000000000000000000000000000000..833744dacbf03c23a8b69f97d06ae782ea5287de GIT binary patch literal 3433 zcmeH}X;f257J#E*6BZ$aO=S@u!4QlIBm2@eU;;^y9R)--O+-f&3_;R^l17OT5ttAJ z7Z#<%(kd91Rs#qGX=y;fMg`QMfP@%Kg93ueHZO_i%=E9BpL0%k)v5QYzN)(SzFO{m zEI%L5^=g~cAP~rUA^{fwfvjl*>-A72@M+a0+zh^yW8A#mAds3I^`+=_5Qq}QZ+8$L zmExPPo@Rq zR!TzwccaPO+`dR|a+!zEjT!MvhP74qxJI(YkHVT0Hcxi<@>Hxf^mAg0J2%eLC-}8g zmsyZ?SoblRsv8bd&lUZUI;nGl4)Lc=z(Gt$xFqZT!R7 zw{2}79$7m+FzIs%-kbeZxL{16A!9u@NwG#<7ND4#M**bEEJjJkj{hr@P-S@mm8(Ee z__FCfZd^Q>T4i==B>iLm zSdo70bnnLnX&tv{@ z-G|g*T*LnFIm*l$p&lC({0iX~jZVUIyO~I$|HiI8+7jw0F(Bw1bq}r~cJWN3OW{?Z zzij8I%6ouFGUKCw@JXE%2sW2%llxyfkna&F%Uyg+AROaDJm2M4eV$OTEiU((RemGT zFY3CAu(%+q&Y^;b%VpOx8X38o@3gQGcgjl zac|;(RH$#los>HgB5@5udV!|kgV2DD`L1dA*~ccr4Q$LpQ;%Be>3i0|GWJ6^7L9%$ z$-7TpZEK5*KY;u4dNk?aiOvyRV`IhV8_p(T@^|`JFa&(MA<`sCL}^VxX#Lb zJ#iA4(6we){6#_z8Q0)B^K>asQ?OpwS$U8^V|j2JalVhVByjJ*ckuAq*GNP56z5xP z%a2|*-c?>S!AVyKz!p~ef%6Y&m!gER9)e9ZFcWt2je#iAPn*LXAvqY z3oncY2Dy)+EE%EQzp)77w}qL{6(ACAj>2;}dA;r9MADj3M47sJ=ss-;x=QD7^xObf z2jY?0Fs(0X;>B|lJ^^Y_B0!BDY+EJ&Ll_mgrursxKK5`mC~g^wy#*w|vmOXn1quCT)pER#u)t zY+Tv>sAQ(=c@n_|FS;sHW@gaNw0U%S&D#e=)V6p4Zd<@Snw@p&6wYaDOV*Snd%I0A z>lTdQC(HL@kO&jDCM&MAfkamC*#q3f!F6TXWavD>lWW!=cDS1J-1S7!?z4WN0&~Pl z`yu(hzjCj0v+%v`R_SJeC@zJ=8Heur+5yAJ#?%9xko>)zkjx-(@lmEt=|NU%aHk%@&R+uHF)j-hRrUQ4=A|#3k4@}cUb|$TP}U&`miba8RfZEdSig$ ztp%VAnH+uiw1VSr$Pauz_oP9^G5o4e8 zgw=15b}Y&fTh_5__o9+JSC~xmMfE$c$0{@C77G=I-eJ%D`>xqLqJd>hg{^$f{WjH* z{k5yD1G%Ts&3)f%OY9wQ$#qEantUFQ%n;1yE~~4z2w2*ZyAGgvp!!%-gDTiiy0cmT zbbLT&(3O3ePhBy8hrKv!C?ow&m)GkKc4~~5Dm+9=I%h8{_Bx+LM%X7pv&GFBbMFf4 z6dSaQf5VIBFo@?yiVOADzI5jac zK!4m9C-Fkc0Csc1I6gPegBplyc#2$tL?DPq5cYVk*XcH`k^iMbxfp?`SOote42Znp zy5A&(evKO*31K78>FPJ3i=q-N&5cqcej(Pei+qCC9%3!%)W)<+O#-UR$^* zwL=0Q&I~J%7I;Qfc+u>uPanGLGP~3Gj5GCvSu#bSln9;b>;a>l?W;<+!!elE==(PG za=o>S39DJp`p2*9$8HuVGeWn0`wEPZXE%&>kyvyr+T>T$kL&KfCmZNz+de^yY(K8+ nyWKqU`I!N_ERRZJtSo79%Ck?*8U>HbevXNFA6&J2)R}()vDjYU literal 0 HcmV?d00001 diff --git a/profiles/universal/config.txt b/profiles/universal/config.txt new file mode 100644 index 0000000..bcf8668 --- /dev/null +++ b/profiles/universal/config.txt @@ -0,0 +1,103 @@ +{ + "profile": { + "name": "Universal", + "font_face": "Golden Sun Regular", + "font_size": 28, + "font_color": [255, 255, 255], + "background_image": "base.png", + "background_color": [50, 50, 50], + "size": [320, 128], + "color_key": [0, 0, 0], + "default_color": [153, 50, 204], + "text_pos": [200, 10], + "aps_minimum": 100, + "inputs": { + "2": { + "comment": "Square (Y)", + "size": [46, 46], + "pos": [317, 86] + }, + "0": { + "comment": "Cross (B)", + "size": [46, 46], + "pos": [359, 127] + }, + "1": { + "comment": "Circle (A)", + "size": [46, 46], + "pos": [401, 85] + }, + "3": { + "comment": "Triangle (X)", + "size": [46, 46], + "pos": [359, 43] + }, + "4": { + "comment": "L1 (L)", + "size": [139, 16], + "pos": [3, 18] + }, + "5": { + "comment": "R1 (R)", + "size": [139, 16], + "pos": [308, 18] + }, + "A2P": { + "comment": "L2", + "size": [139, 16], + "pos": [3, 1] + }, + "A2M": { + "comment": "R2", + "size": [139, 16], + "pos": [308, 1] + }, + "6": { + "comment": "Select", + "size": [57, 40], + "pos": [157, 106] + }, + "7": { + "comment": "Start", + "size": [57, 40], + "pos": [236, 106] + }, + "A0M": { + "enabled": false, + "size": [50, 39], + "pos": [3, 88] + }, + "A0P": { + "enabled": false, + "size": [50, 39], + "pos": [92, 88] + }, + "A1M": { + "enabled": false, + "size": [39, 50], + "pos": [53, 38] + }, + "A1P": { + "enabled": false, + "size": [39, 50], + "pos": [53, 127] + }, + "H0L": { + "size": [50, 39], + "pos": [3, 88] + }, + "H0R": { + "size": [50, 39], + "pos": [92, 88] + }, + "H0U": { + "size": [39, 50], + "pos": [53, 38] + }, + "H0D": { + "size": [39, 50], + "pos": [53, 127] + } + } + } +}