From 6467908008703fd20135de56c681047bc2e2358a Mon Sep 17 00:00:00 2001 From: Adrien Beudin Date: Fri, 5 Sep 2025 16:56:03 +0200 Subject: [PATCH 1/9] fix: launch supermodel on jamma --- .../generators/supermodel/supermodelControllers.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py index 941caf6651..82768fe2a2 100644 --- a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py +++ b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py @@ -244,15 +244,25 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): # AXIS ON L2/R2 BUTTONS InputItem.ItemL2: 'ZAXIS', InputItem.ItemR2: 'RZAXIS', + + # JAMMA + InputItem.ItemDown: 'DOWN', + InputItem.ItemLeft: 'LEFT', + InputItem.ItemRight: 'RIGHT', + InputItem.ItemUp: 'UP', } + def getConfigValue(inputItem: InputItem, targetConf: Dict[str, int]): # Output format BUTTONX if inputItem.IsButton: return '{}{}'.format(TYPE_TO_NAME[inputItem.Type], inputItem.Id + 1) # Output format RYAXIS, RXAXIS, XAXIS, YAXIS if inputItem.IsAxis: - return '{}'.format(SUPERMODEL_JOY[targetConf[x]]) + if x in targetConf: + return '{}'.format(SUPERMODEL_JOY[targetConf[x]]) + else: + return '' # Output format POV1_DOWN if inputItem.IsHat: return '{}{}_{}'.format(TYPE_TO_NAME[inputItem.Type], inputItem.Id + 1, HATS_TO_NAME[inputItem.Value]) @@ -377,7 +387,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): if pad.HasInput(SERVICE_TEST_BUTTON[x]): inp = pad.Input(SERVICE_TEST_BUTTON[x]) ServiceBtn = supermodelSettings.getString("service-button", "") - if ServiceBtn == "1" : + if ServiceBtn == "1": supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, getConfigValueJ1(inp))) else: supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, "NONE") -- GitLab From 47ad7ae4fd8c2be8e2a1a76204240fe0ba6c9469 Mon Sep 17 00:00:00 2001 From: Adrien Beudin Date: Sat, 6 Sep 2025 08:49:24 +0200 Subject: [PATCH 2/9] fix: gun game with controller --- .../supermodel/supermodelControllers.py | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py index 82768fe2a2..751a11e861 100644 --- a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py +++ b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py @@ -26,7 +26,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): } SERVICE_TEST_BUTTON: Dict[str, int] = \ - { + { "InputServiceA": InputItem.ItemL3, "InputTestA": InputItem.ItemR3, } @@ -88,6 +88,13 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): # Sega Bass Fishing / Get Bass controls "InputFishingCast": InputItem.ItemY, "InputFishingSelect": InputItem.ItemA, + # Trigger for gun + "InputTrigger": InputItem.ItemA, + "InputAnalogJoyTrigger": InputItem.ItemA, + "InputAnalogJoyEvent": InputItem.ItemB, + "InputAnalogTriggerLeft": InputItem.ItemL2, + "InputAnalogTriggerRight": InputItem.ItemR2, + } DIGITAL_JOYSTICK_P1: Dict[str, int] = \ @@ -296,7 +303,13 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): raise TypeError def getlightGunConfigValue(inputItem: InputItem): + if inputItem.IsAxis: + print('JOY{}_{}'.format(pad.SdlIndex + 1, SUPERMODEL_JOY[MOUSE_GAME[x]])) + return 'JOY{}_{}'.format(pad.SdlIndex + 1, SUPERMODEL_JOY[MOUSE_GAME[x]]) + else: + print("========== THERE AXIS ==========") + print('MOUSE_{}'.format(SUPERMODEL_JOY[MOUSE_GAME[x]])) return 'MOUSE_{}'.format(SUPERMODEL_JOY[MOUSE_GAME[x]]) raise TypeError @@ -372,9 +385,16 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): if pad.PlayerIndex != 1: continue - # increase +1 controller index + # increase +1 controller index padIndex = 'JOY{}'.format(pad.SdlIndex + 1) + print("======================") + print(pad.DeviceName) + print("======================") + + is_jamma = pad.DeviceName.startswith("JammaController") + is_gun = pad.DeviceName.startswith("Namco GunCon 2") + # Add hotkey buttons for x in HOTKEY_BUTTONS: if pad.HasInput(HOTKEY_BUTTONS[x]): @@ -407,12 +427,31 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): inp = pad.Input(ANALOG_JOYSTICK_P1[x]) supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, getPositionConfigValue(inp))) + if is_jamma: + BUTTONS_AXIS["InputAccelerator"] = InputItem.ItemR1 + BUTTONS_AXIS["InputBrake"] = InputItem.ItemL1 + BUTTONS_AXIS["InputFishingReel"] = InputItem.ItemL1, + BUTTONS_AXIS["InputFishingTension"] = InputItem.ItemR1, + + #if is_gun: + # print("============== THERE ARE GUN =======") + # # Light guns (Lost World) + # MOUSE_GAME["InputGunX"] = "MOUSE_XAXIS", + # MOUSE_GAME["InputGunY"] = "MOUSE_YAXIS", + # # Analog guns (Ocean Hunter, LA Machineguns) + # MOUSE_GAME["InputAnalogGunX"] = "MOUSE_XAXIS", + # MOUSE_GAME["InputAnalogGunY"] = "MOUSE_YAXIS", + # # Analog joystick (Star Wars Trilogy) + # MOUSE_GAME["InputAnalogJoyX"] = "MOUSE_XAXIS", + # MOUSE_GAME["InputAnalogJoyY"] = "MOUSE_YAXIS", + for x in BUTTONS_AXIS: if pad.HasInput(BUTTONS_AXIS[x]): inp = pad.Input(BUTTONS_AXIS[x]) supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, getAxisOrButton(inp))) for x in MOUSE_GAME: + print(MOUSE_GAME[x]) if pad.HasInput(MOUSE_GAME[x]): inp = pad.Input(MOUSE_GAME[x]) supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}"'.format(getlightGunConfigValue(inp))) -- GitLab From a11a5534b3e44d1d8a29ffb1840a2339d78fc1cc Mon Sep 17 00:00:00 2001 From: Adrien Beudin Date: Sat, 6 Sep 2025 08:50:13 +0200 Subject: [PATCH 3/9] fix: add supermodel in lightgun.xml --- .../system/.emulationstation/lightgun.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml b/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml index 8997f09422..83e3da3a88 100644 --- a/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml +++ b/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml @@ -1168,5 +1168,18 @@ + + + + + + + + + + + + + -- GitLab From 5d9eddd9e596c67d7e6b32403d3a607339d3156c Mon Sep 17 00:00:00 2001 From: Adrien Beudin Date: Sat, 6 Sep 2025 19:34:29 +0200 Subject: [PATCH 4/9] fix: remove debug --- .../generators/supermodel/supermodelControllers.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py index 751a11e861..6237adced6 100644 --- a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py +++ b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py @@ -388,12 +388,8 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): # increase +1 controller index padIndex = 'JOY{}'.format(pad.SdlIndex + 1) - print("======================") - print(pad.DeviceName) - print("======================") - is_jamma = pad.DeviceName.startswith("JammaController") - is_gun = pad.DeviceName.startswith("Namco GunCon 2") + # Add hotkey buttons for x in HOTKEY_BUTTONS: -- GitLab From fdfaa196669e26e673e248b82f4a2a926d399a68 Mon Sep 17 00:00:00 2001 From: Adrien Beudin Date: Mon, 8 Sep 2025 16:57:44 +0200 Subject: [PATCH 5/9] fix: add support guncon2 on supermodel --- .../system/.emulationstation/lightgun.xml | 8 ++- .../supermodel/supermodelControllers.py | 60 ++++++++++++------- 2 files changed, 43 insertions(+), 25 deletions(-) diff --git a/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml b/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml index 83e3da3a88..24e33b2af7 100644 --- a/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml +++ b/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml @@ -1168,17 +1168,21 @@ - + - + + + + + diff --git a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py index 6237adced6..dba2ba2717 100644 --- a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py +++ b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py @@ -88,12 +88,6 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): # Sega Bass Fishing / Get Bass controls "InputFishingCast": InputItem.ItemY, "InputFishingSelect": InputItem.ItemA, - # Trigger for gun - "InputTrigger": InputItem.ItemA, - "InputAnalogJoyTrigger": InputItem.ItemA, - "InputAnalogJoyEvent": InputItem.ItemB, - "InputAnalogTriggerLeft": InputItem.ItemL2, - "InputAnalogTriggerRight": InputItem.ItemR2, } @@ -177,6 +171,31 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): # Analog joystick (Star Wars Trilogy) "InputAnalogJoyX": InputItem.ItemJoy1Left, "InputAnalogJoyY": InputItem.ItemJoy1Up, + ## Trigger for gun + "InputTrigger": InputItem.ItemA, + "InputAnalogJoyTrigger": InputItem.ItemA, + "InputAnalogJoyEvent": InputItem.ItemB, + "InputAnalogTriggerLeft": InputItem.ItemL2, + "InputAnalogTriggerRight": InputItem.ItemR2, + } + + GUNCON_JOY: Dict[str, str] = \ + { + # Light guns (Lost World) + "InputGunX": "XAXIS", + "InputGunY": "YAXIS", + # Analog guns (Ocean Hunter, LA Machineguns) + "InputAnalogGunX": "XAXIS", + "InputAnalogGunY": "YAXIS", + # Analog joystick (Star Wars Trilogy) + "InputAnalogJoyX": "XAXIS", + "InputAnalogJoyY": "YAXIS", + ## Trigger for gun + "InputTrigger": "BUTTON6", + "InputAnalogJoyTrigger": "BUTTON6", + "InputAnalogJoyEvent": "BUTTON8", + "InputAnalogTriggerLeft": "BUTTON6", + "InputAnalogTriggerRight": "BUTTON8", } ####################### Players 2 controllers ############################ @@ -305,12 +324,9 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): def getlightGunConfigValue(inputItem: InputItem): if inputItem.IsAxis: - print('JOY{}_{}'.format(pad.SdlIndex + 1, SUPERMODEL_JOY[MOUSE_GAME[x]])) return 'JOY{}_{}'.format(pad.SdlIndex + 1, SUPERMODEL_JOY[MOUSE_GAME[x]]) else: - print("========== THERE AXIS ==========") - print('MOUSE_{}'.format(SUPERMODEL_JOY[MOUSE_GAME[x]])) - return 'MOUSE_{}'.format(SUPERMODEL_JOY[MOUSE_GAME[x]]) + return '' raise TypeError @@ -389,6 +405,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): padIndex = 'JOY{}'.format(pad.SdlIndex + 1) is_jamma = pad.DeviceName.startswith("JammaController") + is_guncon = pad.DeviceName.startswith("Namco GunCon 2") # Add hotkey buttons @@ -411,6 +428,8 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): for x in BUTTONS_P1: if pad.HasInput(BUTTONS_P1[x]): inp = pad.Input(BUTTONS_P1[x]) + print(x) + print("{}_{}".format(padIndex, getConfigValueJ1(inp))) supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, getConfigValueJ1(inp))) for x in DIGITAL_JOYSTICK_P1: @@ -429,29 +448,20 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): BUTTONS_AXIS["InputFishingReel"] = InputItem.ItemL1, BUTTONS_AXIS["InputFishingTension"] = InputItem.ItemR1, - #if is_gun: - # print("============== THERE ARE GUN =======") - # # Light guns (Lost World) - # MOUSE_GAME["InputGunX"] = "MOUSE_XAXIS", - # MOUSE_GAME["InputGunY"] = "MOUSE_YAXIS", - # # Analog guns (Ocean Hunter, LA Machineguns) - # MOUSE_GAME["InputAnalogGunX"] = "MOUSE_XAXIS", - # MOUSE_GAME["InputAnalogGunY"] = "MOUSE_YAXIS", - # # Analog joystick (Star Wars Trilogy) - # MOUSE_GAME["InputAnalogJoyX"] = "MOUSE_XAXIS", - # MOUSE_GAME["InputAnalogJoyY"] = "MOUSE_YAXIS", - for x in BUTTONS_AXIS: if pad.HasInput(BUTTONS_AXIS[x]): inp = pad.Input(BUTTONS_AXIS[x]) supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, getAxisOrButton(inp))) for x in MOUSE_GAME: - print(MOUSE_GAME[x]) if pad.HasInput(MOUSE_GAME[x]): inp = pad.Input(MOUSE_GAME[x]) supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}"'.format(getlightGunConfigValue(inp))) + if is_guncon: + for x in GUNCON_JOY: + supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, GUNCON_JOY[x])) + if pad.PlayerIndex == 2: continue @@ -467,6 +477,10 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): inp = pad.Input(DIGITAL_JOYSTICK_P2[x]) supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, getConfigValueJ2(inp))) + if is_guncon: + for x in GUNCON_JOY: + supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, GUNCON_JOY[x])) + break # Save configuration -- GitLab From 73e161cc0e69d60753e2ab657218a1e105279db1 Mon Sep 17 00:00:00 2001 From: Adrien Beudin Date: Mon, 8 Sep 2025 20:31:02 +0200 Subject: [PATCH 6/9] fix: typo --- .../supermodel/supermodelControllers.py | 54 +++++++------------ 1 file changed, 18 insertions(+), 36 deletions(-) diff --git a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py index dba2ba2717..bf16377150 100644 --- a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py +++ b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py @@ -14,8 +14,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): ################ Mapping Conversion Supermodel to Recalbox ################ # set recalbox Hotkey - HOTKEY_BUTTONS: Dict[str, int] = \ - { + HOTKEY_BUTTONS: Dict[str, int] = { "InputUIExit": InputItem.ItemStart, "InputUISaveState": InputItem.ItemY, "InputUIChangeSlot": InputItem.ItemUp, @@ -25,16 +24,14 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): "InputUIPause": InputItem.ItemB, } - SERVICE_TEST_BUTTON: Dict[str, int] = \ - { + SERVICE_TEST_BUTTON: Dict[str, int] = { "InputServiceA": InputItem.ItemL3, "InputTestA": InputItem.ItemR3, } ##################### Player 1 controllers ############################### - BUTTONS_P1: Dict[str, int] = \ - { + BUTTONS_P1: Dict[str, int] = { "InputCoin1": InputItem.ItemSelect, "InputStart1": InputItem.ItemStart, # Fighting game buttons @@ -77,7 +74,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): "InputGearShiftUp": InputItem.ItemR1, # 4-Speed manual transmission (Daytona 2, Sega Rally 2, Scud Race) # unsettings N - "InputGearShiftN": -1, + "InputGearShiftN": "-1", # VR4 view change buttons (Daytona 2, Le Mans 24, Scud Race) "InputVR1": InputItem.ItemY, "InputVR2": InputItem.ItemX, @@ -91,8 +88,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): } - DIGITAL_JOYSTICK_P1: Dict[str, int] = \ - { + DIGITAL_JOYSTICK_P1: Dict[str, int] = { "InputJoyUp": InputItem.ItemUp, "InputJoyDown": InputItem.ItemDown, "InputJoyLeft": InputItem.ItemLeft, @@ -129,19 +125,17 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): "InputFishingStickY": InputItem.ItemJoy1Up, } - BUTTONS_AXIS: Dict[str, int] = \ - { - #### NEED A BYPASS BUTTON OR AXIS #### + BUTTONS_AXIS: Dict[str, int] = { + # NEED A BYPASS BUTTON OR AXIS #### # Pedals "InputAccelerator": InputItem.ItemR2, "InputBrake": InputItem.ItemL2, - #### NEED A BYPASS BUTTON OR AXIS #### + # NEED A BYPASS BUTTON OR AXIS #### "InputFishingReel": InputItem.ItemL2, "InputFishingTension": InputItem.ItemR2, } - ANALOG_JOYSTICK_P1: Dict[str, int] = \ - { + ANALOG_JOYSTICK_P1: Dict[str, int] = { # Need setting all axis position (POS/NEG) # Virtual On individual joystick mapping "InputTwinJoyDown1": InputItem.ItemJoy1Down, @@ -160,8 +154,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): "InputGearShift4": InputItem.ItemJoy2Right, } - MOUSE_GAME: Dict[str, int] = \ - { + MOUSE_GAME: Dict[str, int] = { # Light guns (Lost World) "InputGunX": InputItem.ItemJoy1Left, "InputGunY": InputItem.ItemJoy1Up, @@ -171,7 +164,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): # Analog joystick (Star Wars Trilogy) "InputAnalogJoyX": InputItem.ItemJoy1Left, "InputAnalogJoyY": InputItem.ItemJoy1Up, - ## Trigger for gun + # Trigger for gun "InputTrigger": InputItem.ItemA, "InputAnalogJoyTrigger": InputItem.ItemA, "InputAnalogJoyEvent": InputItem.ItemB, @@ -179,8 +172,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): "InputAnalogTriggerRight": InputItem.ItemR2, } - GUNCON_JOY: Dict[str, str] = \ - { + GUNCON_JOY: Dict[str, str] = { # Light guns (Lost World) "InputGunX": "XAXIS", "InputGunY": "YAXIS", @@ -190,7 +182,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): # Analog joystick (Star Wars Trilogy) "InputAnalogJoyX": "XAXIS", "InputAnalogJoyY": "YAXIS", - ## Trigger for gun + # Trigger for gun "InputTrigger": "BUTTON6", "InputAnalogJoyTrigger": "BUTTON6", "InputAnalogJoyEvent": "BUTTON8", @@ -200,8 +192,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): ####################### Players 2 controllers ############################ - BUTTONS_P2: Dict[str, int] = \ - { + BUTTONS_P2: Dict[str, int] = { # Commons buttons "InputCoin2": InputItem.ItemSelect, "InputStart2": InputItem.ItemStart, @@ -218,8 +209,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): "InputMagicalPedal2": InputItem.ItemB, } - DIGITAL_JOYSTICK_P2: Dict[str, int] = \ - { + DIGITAL_JOYSTICK_P2: Dict[str, int] = { "InputJoyDown2": InputItem.ItemDown, "InputJoyLeft2": InputItem.ItemLeft, "InputJoyRight2": InputItem.ItemRight, @@ -232,15 +222,13 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): ###### Map an Recalbox direction to the corresponding Supermodel ###### - TYPE_TO_NAME: Dict[int, str] = \ - { + TYPE_TO_NAME: Dict[int, str] = { InputItem.TypeAxis: 'AXIS', InputItem.TypeButton: 'BUTTON', InputItem.TypeHat: 'POV', } - HATS_TO_NAME: Dict[int, str] = \ - { + HATS_TO_NAME: Dict[int, str] = { 1: 'UP', 2: 'RIGHT', 4: 'DOWN', @@ -255,8 +243,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): 'up': 'UP', }""" - SUPERMODEL_JOY: Dict[int, str] = \ - { + SUPERMODEL_JOY: Dict[int, str] = { # lEFT JOYSTICK InputItem.ItemJoy1Down: 'YAXIS', InputItem.ItemJoy1Left: 'XAXIS', @@ -278,7 +265,6 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): InputItem.ItemUp: 'UP', } - def getConfigValue(inputItem: InputItem, targetConf: Dict[str, int]): # Output format BUTTONX if inputItem.IsButton: @@ -377,7 +363,6 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): supermodelControllersSettings.setString(self.SECTION_GLOBAL, "InputJoy2RZDeadZone", deadzone) \ .setString(self.SECTION_GLOBAL, "InputJoy2XDeadZone", deadzone) - # Set Saturation analog configurable in ConfigModel3.ini saturation = supermodelSettings.getString("saturation", "") # joystick1 Players 1 @@ -407,7 +392,6 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): is_jamma = pad.DeviceName.startswith("JammaController") is_guncon = pad.DeviceName.startswith("Namco GunCon 2") - # Add hotkey buttons for x in HOTKEY_BUTTONS: if pad.HasInput(HOTKEY_BUTTONS[x]): @@ -428,8 +412,6 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): for x in BUTTONS_P1: if pad.HasInput(BUTTONS_P1[x]): inp = pad.Input(BUTTONS_P1[x]) - print(x) - print("{}_{}".format(padIndex, getConfigValueJ1(inp))) supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, getConfigValueJ1(inp))) for x in DIGITAL_JOYSTICK_P1: -- GitLab From ce9fed6f8bc0f636397194092841769f947cb116 Mon Sep 17 00:00:00 2001 From: Adrien Beudin Date: Wed, 10 Sep 2025 18:58:19 +0200 Subject: [PATCH 7/9] fix: configure games for jamma --- .../supermodel/supermodelControllers.py | 70 +++++++++++++++++-- 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py index bf16377150..92dfb49333 100644 --- a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py +++ b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py @@ -228,7 +228,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): InputItem.TypeHat: 'POV', } - HATS_TO_NAME: Dict[int, str] = { + HATS_TO_NAME: Dict[int, str] = { 1: 'UP', 2: 'RIGHT', 4: 'DOWN', @@ -257,7 +257,6 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): # AXIS ON L2/R2 BUTTONS InputItem.ItemL2: 'ZAXIS', InputItem.ItemR2: 'RZAXIS', - # JAMMA InputItem.ItemDown: 'DOWN', InputItem.ItemLeft: 'LEFT', @@ -265,6 +264,52 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): InputItem.ItemUp: 'UP', } + JAMMA_CONTROL_P1: Dict[str, int] = { + # Fighting game buttons + "InputGuard": InputItem.ItemY, + "InputPunch": InputItem.ItemA, + "InputKick": InputItem.ItemB, + "InputEscape": InputItem.ItemX, + # Spikeout buttons + "InputShift": InputItem.ItemY, + "InputBeat": InputItem.ItemA, + "InputCharge": InputItem.ItemB, + "InputJump": InputItem.ItemX, + # Virtua Striker buttons + "InputShortPass": InputItem.ItemA, + "InputLongPass": InputItem.ItemB, + "InputShoot": InputItem.ItemX, + # Pedals + "InputAccelerator": InputItem.ItemA, + "InputBrake": InputItem.ItemB, + # Handbrake (Dirt Devils, Sega Rally 2) + "InputHandBrake": InputItem.ItemX, + # Single view change button (Dirt Devils, ECA, Harley-Davidson, Sega Rally 2) + "InputViewChange": InputItem.ItemY, + # VR4 view change buttons (Daytona 2, Le Mans 24, Scud Race) + "InputVR1": -1, + "InputVR2": -1, + "InputVR3": -1, + "InputVR4": -1, + } + + JAMMA_CONTROL_P2: Dict[str, int] = { + # Fighting game buttons + "InputGuard": InputItem.ItemY, + "InputPunch": InputItem.ItemA, + "InputKick": InputItem.ItemB, + "InputEscape": InputItem.ItemX, + # Spikeout buttons + "InputShift": InputItem.ItemY, + "InputBeat": InputItem.ItemA, + "InputCharge": InputItem.ItemB, + "InputJump": InputItem.ItemX, + # Virtua Striker buttons + "InputShortPass": InputItem.ItemA, + "InputLongPass": InputItem.ItemB, + "InputShoot": InputItem.ItemX, + } + def getConfigValue(inputItem: InputItem, targetConf: Dict[str, int]): # Output format BUTTONX if inputItem.IsButton: @@ -287,7 +332,7 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): def getConfigValueJ2(inputItem: InputItem): return getConfigValue(inputItem, DIGITAL_JOYSTICK_P2) - # More Games need a Position value of Axis + # More Games need a Position value of Axis def getPositionConfigValue(inputItem: InputItem): if inputItem.IsAxis: # Output format XAXIS_NEG/XAXIS_POS ,RXAXIS_NEG/RXAXIS_POS @@ -425,10 +470,12 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, getPositionConfigValue(inp))) if is_jamma: - BUTTONS_AXIS["InputAccelerator"] = InputItem.ItemR1 - BUTTONS_AXIS["InputBrake"] = InputItem.ItemL1 - BUTTONS_AXIS["InputFishingReel"] = InputItem.ItemL1, - BUTTONS_AXIS["InputFishingTension"] = InputItem.ItemR1, + for x in JAMMA_CONTROL_P1: + if JAMMA_CONTROL_P1[x] != -1: + print("CONFIGURE P1") + supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_BUTTON{}"'.format(padIndex, JAMMA_CONTROL_P1[x] + 1)) + else: + supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '') for x in BUTTONS_AXIS: if pad.HasInput(BUTTONS_AXIS[x]): @@ -463,6 +510,15 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): for x in GUNCON_JOY: supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, GUNCON_JOY[x])) + if is_jamma: + for x in JAMMA_CONTROL_P2: + if JAMMA_CONTROL_P2[x] != -1: + print("CONFIGURE P2") + supermodelControllersSettings.setString(self.SECTION_GLOBAL, "{}2".format(x), '"{}_BUTTON{}"'.format(padIndex, JAMMA_CONTROL_P2[x] + 1)) + else: + supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '') + + break # Save configuration -- GitLab From e6188a34e0fee4b6e86c5eced0d9f307bb5a9721 Mon Sep 17 00:00:00 2001 From: Adrien Beudin Date: Mon, 29 Sep 2025 14:43:11 +0200 Subject: [PATCH 8/9] fix: model3 lightgun games --- .../share_init/system/.emulationstation/lightgun.xml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml b/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml index 24e33b2af7..6bc14f83f2 100644 --- a/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml +++ b/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/lightgun.xml @@ -1176,14 +1176,10 @@ - - - - - - - - + + + + -- GitLab From 8e2af98bd540e4b0c34cb700540be3bc3a41c36d Mon Sep 17 00:00:00 2001 From: Adrien Beudin Date: Fri, 12 Dec 2025 09:19:55 +0100 Subject: [PATCH 9/9] fix: support of guncon2 for model3 --- .../generators/supermodel/supermodelControllers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py index 92dfb49333..d300ce6d82 100644 --- a/projects/configgen/configgen/generators/supermodel/supermodelControllers.py +++ b/projects/configgen/configgen/generators/supermodel/supermodelControllers.py @@ -506,11 +506,12 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): inp = pad.Input(DIGITAL_JOYSTICK_P2[x]) supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, getConfigValueJ2(inp))) - if is_guncon: + if pad.PlayerIndex == 2 and is_guncon: + padIndexj1 = 'JOY{}'.format(pad.SdlIndex + 1) for x in GUNCON_JOY: - supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{}"'.format(padIndex, GUNCON_JOY[x])) + supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '"{}_{},{}_{}"'.format(padIndexj1, GUNCON_JOY[x], padIndex, GUNCON_JOY[x])) - if is_jamma: + if pad.PlayerIndex == 2 and is_jamma: for x in JAMMA_CONTROL_P2: if JAMMA_CONTROL_P2[x] != -1: print("CONFIGURE P2") @@ -518,7 +519,6 @@ def generateControllerConfig(self, playersControllers: ControllerPerPlayer): else: supermodelControllersSettings.setString(self.SECTION_GLOBAL, x, '') - break # Save configuration -- GitLab