RetroPie: Controller über RGUI einrichten
Wie im vorherigen Beitrag „RetroPie: EmulationStation 2 einrichten“ erwähnt, könnt ihr Controller sehr einfach über die EmulationStation für RetroArch konfigurieren. Aber spätestens, wenn ihr für Multiplayerspiele mehr als einen Controller benötigt, müsst ihr doch noch selbst tätig werden. Außerdem wird es euch evtl. interessieren, wie ihr über den Controller den Emulator beendet, eine Pause einlegt, das Menü öffnet oder Snapshots speichern und laden könnt.
Falls ihr eins der vorherigen Images installieren möchtet, findet ihr die archivierten Beiträge unter „RetroPie: Einrichtung für ältere Images“.
Die Ausgangsbasis ist das RetroPie-Image 4.2
Als nächstes wollen wir nun den Controller konfigurieren…
Möchtet ihr ein Pad per Bluetooth anschließen (z. B. den der Playstation 3, ein FC30– bzw. NES30-Pad oder eine WiiMote), dann richtet diesen bitte vorher unbedingt, wie unter „RetroPie: Bluetooth-Controller“ beschrieben, ein!
Joystick / Gamepad einrichten
Wollt ihr nur einen Controller, so wie meinen Speedlink Competition Pro USB, einrichten, dann habt ihr die Möglichkeit, dies über die EmulationStation machen.
Wie im vorherigen Beitrag bereits erwähnt, könnt ihr einen Controller jetzt direkt über die EmulationStation für Libretro / RetroArch einrichten. Seit dem Image 4.0 werden auch die Einstellungen für mupen64plus, pifba, pisnes und Reincast automatisch über die EmulationStation vorgenommen.
So löblich diese Möglichkeit auch ist, sie geht leider an der Praxis vorbei! Die Einrichtung müsste differenzierter und vorallem für mehrere Controller (Multiplayer) möglich sein. Daher rate ich aktuell weiterhin dazu, die Controller manuell einzurichten.
Ihr solltet trotzdem einmal diesen Weg gehen, öffnet also mit eurer Start-Taste das MAIN MENU.
Wählt CONFIGURE INPUT aus, bestätigt die Sicherheitsabfrage und haltet dann eine Taste am Controller gedrückt…
…und drückt die jeweils abgefragten Tasten.
Falls ihr eine Funktion nicht zuweisen wollt oder könnt, weil der Controller diese evtl. nicht zur Verfügung stellt, könnt ihr durchs Halten einer Taste für ca. 1 Sekunde den Punkt überspringen. Sollte die Tastatur bereits eingerichtet sein, könnt ihr mit den Cursor-Tasten auch einfach weiterblättern oder zur Korrektur zurückgehen.
Leider unterstützt euch diese Funktionen nur bei der Einrichtung für einen RetroArch Spieler!
Exkurs: Was ist denn das bereits mehrfach erwähnte „RetroArch“ schon wieder?
Meistens „rede“ ich hier nur von RetroPie und EmulationStation, aber die eigentliche Arbeit verrichtet zum größten Teil RetroArch oder um noch genauer zu sein Libretro. Unser Emulatorsystem ist hirachisch (von unten nach oben) wie folgt aufgebaut:
- Libretro: Dies stellt die unterste Ebene dar. Es ist eine in C/C++ geschriebene API, die die Schnittstelle zur vorliegenden Hardware herstellt. Dabei gibt es nicht nur die hier von uns verwendete Raspberry Pi Version, sondern auch Fassung für Android, iOS, Windows, XBox360, Wii, …
- Emulatoren / Apps: Angepasste Programme greifen auf Libretro zu und versorgen uns so mit sehr vielen Emulatoren.
- RetroArch: Dies setzt auf Libretro auf und ist dessen gängige grafische Bedienoberfläche. Hierüber können bequem Einstellungen für Libretro und die Apps vorgenommen werden. Ihr könnt diese Oberfläche auch am Pi aus den zu RetroArch gehörenden Emulatoren aufrufen.
- EmulationStation: Die EmulationStation stellt eine einheitliche Oberfläche für die verschiedenen Systeme zur Verfügung. Sie fasst RetroArch / Libretro und andere, dort nicht enthaltene, Emulatoren zusammen (z. B. VICE oder ScummVM). Aus der Sicht der EmulationStation ist RetroArch also „nur“ ein weiterer Emulator.
- RetroPie: Alle oben erwähnten Einzelteile bringt RetroPie nun unter einen Hut und bietet so ein rundum sorglos Paket. Hervorzuheben ist hier natürlich das SD-Karten-Image, womit jeder sehr einfach seinen Raspberry Pi zur Emulatorzentrale machen kann.
Achtung: Die Joystick-Einrichtung, über das Setup-Script, wurde ab dem Image 3.3 entfernt!!!
Damit bleibt euch jetzt nur noch die Einrichtung über die RGUI oder ihr tippt die Werte manuell in die retroarch.cfg.
Es gibt übrigens keinen Zwang, was die Belegung der Tasten angeht, ich würde aber empfehlen, dass ihr euch, so weit es möglich ist, am XBox 360-Pad oder dem Controller der Playstation orientiert. Von den „RetroPie-Machern“ wird übrigens diese Belegung empfohlen:
Controller-Einstellungen, die über die EmulationStation vorgenommenen werden, findet ihr im Verzeichnis /opt/retropie/configs/all/retroarch/autoconfig.
Hinweis: Verwendet ihr nur einen nicht RetroArch-Emulator (z. B. VICE), dann könntet ihr auf die eben gezeigte Konfiguration eigentlich verzichten, ich rate aber trotzdem dazu. Die „Einzel“-Emulatoren bringen nämlich jeweils ihre eigenen Treiber mit und werden ggf. über das entsprechende Menü oder eigene Konfigurationsdateien aktiviert und eingestellt.
Werfen wir doch mal einen Blick auf den VICE-Emulator (Achtung: Seit dem Image 4.0 müsst ihr diesen erst nachinstallieren!), der nicht zu RetroArch gehört. Zum C64 passt natürlich der Competition Pro am besten, daher verwende ich dafür einfach mal einen Speedlink Competition Pro USB.
Startet ihr z. B. das Spiel Nebulus mit VICE, dann werdet ihr merken, dass euer Controller / Joystick nicht funktioniert. Öffnet mit <F12> das Menü und folgt den Schritten auf den Bildern…
Verlasst zum Schluß das Menü und schon könnt ihr euren Joystick / Controller verwenden.
Benutzt ihr einen Controller mit mehr als einem Feuerknopf, wie z. B. das XBox 360 Pad oder auch den eben erwähnten Speedlink, dann kommt ihr mit dem B-Knopf übrigens auch ins Menü.
Dies war jetzt nur ein kleines Beispiel, wie ein eigenständiger Emulator mit den Controllern umgeht. Für die anderen Emulatoren müsst ihr ggf. mal in die mitgelieferte Dokumentation schauen.
Joysticks / Pads für bis zu 16 Spieler über die RGUI einrichten
Wollt ihr nur alleine spielen, dann sollten die oben gemachten Einstellungen schon reichen. Möchtet ihr aber mit mehreren Spielern gleichzeitig daddeln oder über den Controller weitere Sonderfunktionen auslösen, dann können wir dies, seit dem Image 3.3, am einfachsten über die Libretro / RetroArch-Oberfläche (RGUI) machen.
Seit RetroArch 1.1 werden übrigens bis zu 16 Spieler unterstützt. Ob tatsächlich alle möglich sind, hängt dann natürlich vom jeweiligen Emulator und dem Spiel ab!
Ich zeige hier mal, wie man zwei verschiedene Eingabegeräte (XBox360-Pad & Speedlink Competition Pro USB) für Spieler 1 & 2 über die RGUI (das steht übrigens für RetroArch Graphical User Interface) einrichten kann.
Wichtig ist nun, dass alle Controller am Pi angeschlossen sind und ihr die Tastatur über die EmulationStation eingerichtet habt!
Geht dann in der EmulationStation zum RetroPie-Bereich…
… und wählt dort RETROARCH aus.
Daraufhin öffnet sich die RetroArch-Oberfläche RGUI:
Hier könnt ihr euch mit der Tastatur oder später einem Joystick / Pad bewegen.
Als Erstes sollten wir kontrollieren, ob das Speichern beim Beenden aktiv ist.
Ihr bewegt euch in der RGUI übrigens mit den Tasten, die ihr in der EmulationStation festgelegt habt. Mit den D-Pad-Tasten (bei der Tastatur habt ihr wohl die Cursor-Tasten genommen) bewegt ihr euch, wie gewohnt. Zur Auswahl dient die vor euch vergebene A-Taste und um einen Schritt zurück zugehen, nehmt ihr eure B-Taste.
Folgt jetzt einfach den Schritten auf den Bildern…
ACHTUNG:
Eventuell erscheint bei euch statt dem obigen Menü, das folgende:
Hier scheinen zwei Tastenklicks erkannt zu werden. Falls euch dies häufiger passiert, geht einfach mit der B-Taste einen Schritt zurück. Lasst Settings markiert und drückt eure SELECT-Taste, es erscheint folgender Hinweis:
Bestätigt die Meldung einfach mit eurer A-Taste und ihr landet im gewünschten Menü.
Benutzt ihr später einen Controller im RetroArch-Menü, dann kann es durchaus sein, dass sich dieses Fehlverhalten nicht mehr zeigt.
Stellt hier sicher, dass Save Configuration On Exit auf ON steht, erst dann werden eure Änderungen beim Verlassen gespeichert! Achtung: Save Configuration On Exit wird aktuell nicht mehr mitgespeichert, ihr müsst es also jedes Mal erneut einschalten.
Geht anschließend zurück ins Hauptmenü.
Wir richten nun aber endlich die Controller ein, folgt dazu wieder diesen Bildern…
Denkt an das oben erwähnte Problem!
Mit dem Punkt Input User 1 Binds definiert ihr die Tasten für den ersten Controller. Die folgenden Menüpunkte sind dann für den 2, 3 usw. Spieler / Controller. Verwendet ihr mehr als 5-Controller, dann könnt ihr mit dem obersten Punkt Max Users die Anzahl erhöhen oder auch verringern, wenn es gewünscht ist. Ich lasse den Wert aber unverändert.
Mit dem Punkt User 1 Device Type könnt ihr festlegen, ob der Controller Analog-Sticks besitzt, dies ist z. B. für die Playstation-Emulation interessant. Konfigurieren könnt ihr die Analog-Sticks aber immer.
Möchtet ihr, statt mit dem D-Pad, bei entsprechenden Spielen, lieber mit einem Analog-Stick steuern, dann könnt ihr dies unter User 1 Analog To Digital Type einstellen.
Nun ist es an der Zeit, den richtigen Controller auszuwählen. Unter dem Punkt User 1 Device Index könnt ihr alle angeschlossenen Joysticks durchschalten. Wählt hier den Controller für den 1. Spieler.
Wenn ihr euren Blick auf die untere Hälfte des Bildes richtet, dann seht ihr, dass dort evtl. schon Zuweisungen vergeben sind. Dies sind die Einstellungen aus der EmulationStation, z. B. für die Tastatur, die man ja auch für den ersten Spieler nehmen kann.
Ihr habt nun zwei Möglichkeiten. Ihr könnt alle Tasten am Stück zuweisen oder ihr geht auf die jeweilige Taste, drückt A und dann die entsprechende Pad-Funktion. Nehmt aber ruhig erstmal User 1 Bind All.
Jetzt werden nacheinander alle Tasten abgefragt. Falls eurem Controller eine Funktion fehlt, wartet einfach den Countdown ab, dann wird die Abfrage automatisch mit der nächsten Taste fortgesetzt.
Zum Schluß sollten eure Zuweisung ungefähr so aussehen…
Jetzt könnt ihr mit B einen Schritt zurück gehen und die ganze Prozedur nochmal für die weiteren Spieler wiederholen.
So sieht es z. B. nach der Einrichtung des Speedlink Competition Pro USB bei mir aus.
Geht jetzt mit der B-Taste zurück ins Hauptmenü und verlasst die RGUI, dabei werden eure Einstellungen automatisch gespeichert, da wir oben den entsprechenden Schalter aktiviert haben.
Sobald ihr wieder in der EmulationStation seid, könnt ihr ein Mehrspieler-Spiel starten. Spielt ihr nun z. B. eine Partie Mario Bros. auf dem NES, dann könnt ihr ab jetzt auch den 2-Spieler-Modus mit zwei Controllern zocken.
Sonderfunktionen festlegen
Wollt ihr möglichst auf die Tastatur verzichten, dann wäre es doch hilfreich, wenn ihr den Emulator auch über den Controller beenden könntet. Dies geht tatsächlich!
Mittlerweile werden die folgenden Einstellungen automatisch vorbelegt:
Hotkeys Funktion ------------------------------------------- Select+Start Emulator Verlassen Select+RB Zustand speichern Select+LB Zustand laden Select+Rechts Nächster Speicherplatz Select+Links Vorheriger Speierplatz Select+X RetroArch-Menü Select+B Emulator zurücksetzen (Reset)
Wie euch in der Liste bestimmt auffällt, wird jede Aktion in Kombination mit eurer SELECT-Taste aufgerufen. Diese ist standardmäßig der sog. Hotkey. Durch diesen wird u. a. verhindert, dass ihr in der Hitze eines Bosskampfes, ausversehen eine „tödliche“ Funktion wie z. B. Verlassen des Emulators oder einen Reset auslöst. Außerdem erlaubt der Hotkey die Doppelbelegung der Tasten.
Möchtet ihr die Tasten ändern, dann geht das auch über die RGUI. Startet diese ggf. nochmal, wie oben beschrieben und folgt dann den Bildern… (Achtung: Schaltet vorher „Save Configuration on Exit“ wieder ein!)
Beachtet evtl. wieder das oben beschriebene Problem.
Hier findet ihr jetzt alle Funktionen, die ihr direkt (z. B. über den Controller) aufrufen könnt. Zum Ändern müsst ihr nur den entsprechenden Punkt mit eurer A-Taste auswählen und dann die Gewünschte Controllertaste drücken.
Hier ein Beispiel
Da ich beim XBox360-Controller gerne den GUIDE-Button also Hotkey haben möchte, gehe ich erstmal fast ans Ende der Liste
Außerdem möchte ich mit dem BACK-Button den Emulator verlassen und mit START das Menü öffnen. Dazu sind nur diese beiden Änderungen notwendig:
So könnt ihr jetzt alle Funktionen auf die von euch gewünschten Tasten legen.
Als Nächstes findet ihr noch den manuellen Weg, wie ihr die eben gesehenen Einstellungen von Hand in der retroarch.cfg vornehmt. Ich würde euch zwar nahelegen, diesen Abschnitt ebenfalls zu lesen, wer daran kein Interesse hat, sollte hier weitermachen.
Hotkeys manuell festlegen
Verlasst dazu mal wieder die EmulationStation und wechselt ggf. das Verzeichnis cd /opt/retropie/configs/all. Öffnet die Configdatei mit nano retroarch.cfg und fügt am Schluß die folgenden Zeilen ein.
Achtet dabei ganz genau auf die Schreibweise! Schon ein Verzicht auf die Leerzeichen vor oder hinter dem =, kann (wie ich leidvoll feststellen mußte) zu Problemen führen!!
Da man bestimmt nicht direkt aus dem Emulator fliegen möchte, nur weil man im Eifer des Gefechts versehentlich auf den falschen Knopf gekommen ist, sollten wir auch noch einen sog. Hotkey festlegen. Dadurch lassen sich diese Sonderfunktionen nur noch auslösen, wenn man den Hotkey zusammen mit der entsprechenden Taste drückt. Ich verwende hier die Tastennummern vom kabellosen XBox360 Controller, ihr könnt die von euch gewünschten / benötigten Nummern der Tasten aus der retroarch.cfg oder mit der RGUI heraussuchen.
Mein Hotkey ist die GUIDE-Taste:
input_enable_hotkey_btn = "8"
Drücke ich dazu zusätzlich BACK, dann soll der Emulator verlassen werden.
input_exit_emulator_btn = "6"
Bei GUIDE + A möchte ich den Emulator pausieren.
input_pause_toggle_btn = "0"
Mit GUIDE + START möchte ich das RetroArch-Menü öffnen.
input_menu_toggle_btn = "7"
Verlasst nano mit <STRG> + <X>, antwortet auf die Frage, ob ihr speichern möchtet mit <Y>es und bestätigt abschließend den vorgeschlagenen Dateinamen mit <ENTER>.
## Skeleton config file for RetroArch # Save all save files (*.srm) to this directory. This includes related files like .bsv, .rtc, .psrm, etc ... # This will be overridden by explicit command line options. # savefile_directory = # Save all save states (*.state) to this directory. # This will be overridden by explicit command line options. # savestate_directory = # If set to a directory, Content which is temporarily extracted # will be extracted to this directory. # extraction_directory = # Save all input remapping files to this directory. # input_remapping_directory = # Save all playlist files to this directory. # playlist_directory = # If set to a directory, the content history playlist will be saved # to this directory. # content_history_dir = # Automatically saves a savestate at the end of RetroArch's lifetime. # The path is $SRAM_PATH.auto. # RetroArch will automatically load any savestate with this path on startup if savestate_auto_load is set. # savestate_auto_save = false # savestate_auto_load = true # Load libretro from a dynamic location for dynamically built RetroArch. # This option is mandatory. # Path to a libretro implementation. # libretro_path = "/path/to/libretro.so" # A directory for where to search for libretro core implementations. # libretro_directory = # A directory for where to search for libretro core information. # libretro_info_path = # Sets mode for archived files in file browser. # 0 = Ask, 1 = Load Archive, 2 = Open Archive # archive_mode = 0 # Sets log level for libretro cores (GET_LOG_INTERFACE). # If a log level issued by a libretro core is below libretro_log_level, it is ignored. # DEBUG logs are always ignored unless verbose mode is activated (--verbose). # DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3. # libretro_log_level = 0 # Enable or disable verbosity level of frontend. # log_verbosity = false # If this option is enabled, every content file loaded in RetroArch will be # automatically added to a history list. # history_list_enable = true # Enable or disable RetroArch performance counters # perfcnt_enable = false # Path to core options config file. # This config file is used to expose core-specific options. # It will be written to by RetroArch. # A default path will be assigned if not set. core_options_path = /opt/retropie/configs/all/retroarch-core-options.cfg # Path to content load history file. # RetroArch keeps track of all content loaded in the menu and from CLI directly for convenient quick loading. # A default path will be assigned if not set. # game_history_path = # Number of entries that will be kept in content history file. # game_history_size = 100 # Sets the "system" directory. # Implementations can query for this directory to load BIOSes, system-specific configs, etc. system_directory = /home/pi/RetroPie/BIOS # Sets start directory for menu content browser. # rgui_browser_directory = # Content directory. Interacts with RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY. # Usually set by developers who bundle libretro/RetroArch apps to point to assets. # content_directory = # Assets directory. This location is queried by default when menu interfaces try to look for # loadable assets, etc. # assets_directory = # Sets start directory for menu config browser. # rgui_config_directory = # Show startup screen in menu. # Is automatically set to false when seen for the first time. # This is only updated in config if config_save_on_exit is set to true, however. # rgui_show_start_screen = true # Flushes config to disk on exit. Useful for menu as settings can be modified. # Overwrites the config. #include's and comments are not preserved. config_save_on_exit = false # Load up a specific config file based on the core being used. # core_specific_config = false #### Video # Video driver to use. "gl", "xvideo", "sdl" # video_driver = "gl" # Which OpenGL context implementation to use. # Possible ones for desktop are: glx, x-egl, kms-egl, sdl-gl, wgl. # By default, tries to use first suitable driver. # video_context_driver = # Windowed x resolution scale and y resolution scale # (Real x res: base_size * xscale * aspect_ratio, real y res: base_size * yscale) # video_scale = 3.0 # Fullscreen resolution. Resolution of 0 uses the resolution of the desktop. # video_fullscreen_x = 0 # video_fullscreen_y = 0 # Start in fullscreen. Can be changed at runtime. # video_fullscreen = false # If fullscreen, prefer using a windowed fullscreen mode. # video_windowed_fullscreen = true # Which monitor to prefer. 0 (default) means no particular monitor is preferred, 1 and up (1 being first monitor), # suggests RetroArch to use that particular monitor. # video_monitor_index = 0 # Forcibly disable composition. Only works in Windows Vista/7 for now. # video_disable_composition = false # Video vsync. # video_vsync = true # Forcibly disable sRGB FBO support. Some Intel OpenGL drivers on Windows # have video problems with sRGB FBO support enabled. # video_force_srgb_disable = false # Attempts to hard-synchronize CPU and GPU. Can reduce latency at cost of performance. # video_hard_sync = false # Sets how many frames CPU can run ahead of GPU when using video_hard_sync. # Maximum is 3. # video_hard_sync_frames = 0 # Sets how many milliseconds to delay after VSync before running the core. # Can reduce latency at cost of higher risk of stuttering. # Maximum is 15. # video_frame_delay = 0 # Inserts a black frame inbetween frames. # Useful for 120 Hz monitors who want to play 60 Hz material with eliminated ghosting. # video_refresh_rate should still be configured as if it is a 60 Hz monitor (divide refresh rate by 2). # video_black_frame_insertion = false # Use threaded video driver. Using this might improve performance at possible cost of latency and more video stuttering. video_threaded = true # Use a shared context for HW rendered libretro cores. # Avoids having to assume HW state changes inbetween frames. # video_shared_context = false # Smoothens picture with bilinear filtering. Should be disabled if using pixel shaders. video_smooth = false # Forces rendering area to stay equal to content aspect ratio or as defined in video_aspect_ratio. # video_force_aspect = true # Only scales video in integer steps. # The base size depends on system-reported geometry and aspect ratio. # If video_force_aspect is not set, X/Y will be integer scaled independently. # video_scale_integer = false # A floating point value for video aspect ratio (width / height). # If this is not set, aspect ratio is assumed to be automatic. # Behavior then is defined by video_aspect_ratio_auto. # video_aspect_ratio = # If this is true and video_aspect_ratio is not set, # aspect ratio is decided by libretro implementation. # If this is false, 1:1 PAR will always be assumed if video_aspect_ratio is not set. video_aspect_ratio_auto = true # Forces cropping of overscanned frames. # Exact behavior of this option is implementation specific. # video_crop_overscan = true # Path to shader. Shader can be either Cg, CGP (Cg preset) or GLSL, GLSLP (GLSL preset) # video_shader = "/path/to/shader.{cg,cgp,glsl,glslp}" # Load video_shader on startup. # Other shaders can still be loaded later in runtime. # video_shader_enable = false # Defines a directory where shaders (Cg, CGP, GLSL) are kept for easy access. video_shader_dir = /opt/retropie/emulators/retroarch/shader/ # CPU-based video filter. Path to a dynamic library. # video_filter = # Defines a directory where CPU-based video filters are kept. # video_filter_dir = # Path to a font used for rendering messages. This path must be defined to enable fonts. # Do note that the _full_ path of the font is necessary! # video_font_path = # Size of the font rendered. # video_font_size = 32 # Enable usage of OSD messages. # video_font_enable = true # Offset for where messages will be placed on screen. Values are in range 0.0 to 1.0 for both x and y values. # [0.0, 0.0] maps to the lower left corner of the screen. # video_message_pos_x = 0.05 # video_message_pos_y = 0.05 # Color for message. The value is treated as a hexadecimal value. # It is a regular RGB hex number, i.e. red is "ff0000". # video_message_color = ffffff # Video refresh rate of your monitor. # Used to calculate a suitable audio input rate. # video_refresh_rate = 59.95 # Allows libretro cores to set rotation modes. # Setting this to false will honor, but ignore this request. # This is useful for vertically oriented content where one manually rotates the monitor. # video_allow_rotate = true # Forces a certain rotation of the screen. # The rotation is added to rotations which the libretro core sets (see video_allow_rotate). # The angle is <value> * 90 degrees counter-clockwise. # video_rotation = 0 #### Audio # Enable audio. # audio_enable = true # Mutes audio. # audio_mute_enable = false # Audio output samplerate. # audio_out_rate = 48000 # Audio resampler backend. Which audio resampler to use. # Default will use "sinc". # audio_resampler = # Audio driver backend. Depending on configuration possible candidates are: alsa, pulse, oss, jack, rsound, roar, openal, sdl, xaudio. # audio_driver = # Override the default audio device the audio_driver uses. This is driver dependant. E.g. ALSA wants a PCM device, OSS wants a path (e.g. /dev/dsp), Jack wants portnames (e.g. system:playback1,system:playback_2), and so on ... # audio_device = # Audio DSP plugin that processes audio before it's sent to the driver. Path to a dynamic library. # audio_dsp_plugin = # Directory where DSP plugins are kept. # audio_filter_dir = # Will sync (block) on audio. Recommended. # audio_sync = true # Desired audio latency in milliseconds. Might not be honored if driver can't provide given latency. # audio_latency = 64 # Enable audio rate control. # audio_rate_control = true # Controls audio rate control delta. Defines how much input rate can be adjusted dynamically. # Input rate = in_rate * (1.0 +/- audio_rate_control_delta) # audio_rate_control_delta = 0.005 # Controls maximum audio timing skew. Defines the maximum change in input rate. # Input rate = in_rate * (1.0 +/- max_timing_skew) # audio_max_timing_skew = 0.05 # Audio volume. Volume is expressed in dB. # 0 dB is normal volume. No gain will be applied. # Gain can be controlled in runtime with input_volume_up/input_volume_down. # audio_volume = 0.0 #### Overlay # Defines a directory where overlays are kept for easy access. # overlay_directory = # Enable or disable the current overlay. # input_overlay_enable = true # Path to input overlay # input_overlay = # Overlay opacity # input_overlay_opacity = 1.0 # Overlay scale # input_overlay_scale = 1.0 #### OSK (Onscreen Keyboard) Overlay # Defines a directory where overlays are kept for easy access. # osk_overlay_directory = # Enable OSK overlay. # input_osk_overlay_enable = true # Path to OSK overlay # input_osk_overlay = # OSK Overlay opacity # input_osk_overlay_opacity = 1.0 # OSK Overlay scale # input_osk_overlay_scale = 1.0 #### Input # Input driver. Depending on video driver, it might force a different input driver. # input_driver = sdl # Joypad driver. (Valid: linuxraw, sdl, dinput) # input_joypad_driver = # Path to input remapping file. # input_remapping_path = # If enabled, overrides the input binds with the remapped binds set for the current core. # input_remap_binds_enable = true # Maximum amount of users supported by RetroArch. # input_max_users = 16 # Keyboard layout for input driver if applicable (udev/evdev for now). # Syntax is either just layout (e.g. "no"), or a layout and variant separated with colon ("no:nodeadkeys"). # input_keyboard_layout = # Defines axis threshold. Possible values are [0.0, 1.0] # input_axis_threshold = 0.5 # Enable input auto-detection. Will attempt to autoconfigure # joypads, Plug-and-Play style. input_autodetect_enable = true # Show the input descriptors set by the core instead of the # default ones. # input_descriptor_label_show = true # Hide input descriptors that were not set by the core. # input_descriptor_hide_unbound = false # Directory for joypad autoconfigs. # If a joypad is plugged in, that joypad will be autoconfigured if a config file # corresponding to that joypad is present in joypad_autoconfig_dir. # Input binds which are made explicit (input_playerN_*_btn/axis) will take priority over autoconfigs. # Autoconfigs can be created with retroarch-joyconfig, manually, or with a frontend. # Requires input_autodetect_enable to be enabled. joypad_autoconfig_dir = /opt/retropie/emulators/retroarch/configs/ # Sets which libretro device is used for a user. # Devices are indentified with a number. # This is normally saved by the menu. # Device IDs are found in libretro.h. # These settings are overridden by explicit command-line arguments which refer to input devices. # None: 0 # Joypad (RetroPad): 1 # Mouse: 2 # Keyboard: 3 # Generic Lightgun: 4 # Joypad w/ Analog (RetroPad + Analog sticks): 5 # Multitap (SNES specific): 257 # Super Scope (SNES specific): 260 # Justifier (SNES specific): 516 # Justifiers (SNES specific): 772 # input_libretro_device_p1 = # input_libretro_device_p2 = # input_libretro_device_p3 = # input_libretro_device_p4 = # input_libretro_device_p5 = # input_libretro_device_p6 = # input_libretro_device_p7 = # input_libretro_device_p8 = # Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_" # is for keypad keys): # # left, right, up, down, enter, kp_enter, tab, insert, del, end, home, # rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus, # f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, # num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown, # keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9, # period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock, # tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket, # backslash, rightbracket, kp_period, kp_equals, rctrl, ralt # # Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely, # rather than relying on a default. input_player1_a = x input_player1_b = z input_player1_y = a input_player1_x = s input_player1_start = enter input_player1_select = rshift input_player1_l = q input_player1_r = w input_player1_left = left input_player1_right = right input_player1_up = up input_player1_down = down # input_player1_l2 = # input_player1_r2 = # input_player1_l3 = # input_player1_r3 = # Two analog sticks (DualShock-esque). # Bound as usual, however, if a real analog axis is bound, # it can be read as a true analog. # Positive X axis is right, Positive Y axis is down. # input_player1_l_x_plus = # input_player1_l_x_minus = # input_player1_l_y_plus = # input_player1_l_y_minus = # input_player1_r_x_plus = # input_player1_r_x_minus = # input_player1_r_y_plus = # input_player1_r_y_minus = # If desired, it is possible to override which joypads are being used for user 1 through 8. # First joypad available is 0. # input_player1_joypad_index = 0 # input_player2_joypad_index = 1 # input_player3_joypad_index = 2 # input_player4_joypad_index = 3 # input_player5_joypad_index = 4 # input_player6_joypad_index = 5 # input_player7_joypad_index = 6 # input_player8_joypad_index = 7 # Joypad buttons. # Figure these out by using RetroArch-Phoenix or retroarch-joyconfig. # You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction. # E.g. "h0up" # input_player1_a_btn = # input_player1_b_btn = # input_player1_y_btn = # input_player1_x_btn = # input_player1_start_btn = # input_player1_select_btn = # input_player1_l_btn = # input_player1_r_btn = # input_player1_left_btn = # input_player1_right_btn = # input_player1_up_btn = # input_player1_down_btn = # input_player1_l2_btn = # input_player1_r2_btn = # input_player1_l3_btn = # input_player1_r3_btn = # Axis for RetroArch D-Pad. # Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number. # Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity. # input_player1_left_axis = # input_player1_right_axis = # input_player1_up_axis = # input_player1_down_axis = # Holding the turbo while pressing another button will let the button enter a turbo mode # where the button state is modulated with a periodic signal. # The modulation stops when the button itself (not turbo button) is released. # input_player1_turbo = # Describes the period and how long of that period a turbo-enabled button should behave. # Numbers are described in frames. # input_turbo_period = 6 # input_turbo_duty_cycle = 3 # This goes all the way to user 8 (*_player2_*, *_player3_*, etc), but omitted for clarity. # All input binds have corresponding binds for keyboard (none), joykeys (_btn) and joyaxes (_axis) as well. # Toggles fullscreen. # input_toggle_fullscreen = f # Saves state. # input_save_state = f2 # Loads state. # input_load_state = f4 # State slots. With slot set to 0, save state name is *.state (or whatever defined on commandline). # When slot is != 0, path will be $path%d, where %d is slot number. # input_state_slot_increase = f7 # input_state_slot_decrease = f6 # Toggles between fast-forwarding and normal speed. # input_toggle_fast_forward = space # Hold for fast-forward. Releasing button disables fast-forward. # input_hold_fast_forward = l # Key to exit RetroArch cleanly. # Killing it in any hard way (SIGKILL, etc) will terminate RetroArch without saving RAM, etc. # On Unix-likes, SIGINT/SIGTERM allows a clean deinitialization. input_exit_emulator = escape # Applies next and previous shader in directory. input_shader_next = m input_shader_prev = n # Hold button down to rewind. Rewinding must be enabled. input_rewind = r # Toggle between recording and not. # input_movie_record_toggle = o # Toggle between paused and non-paused state # input_pause_toggle = p # Frame advance when content is paused # input_frame_advance = k # Reset the content. # input_reset = h # Cheats. # input_cheat_index_plus = y # input_cheat_index_minus = t # input_cheat_toggle = u # Mute/unmute audio # input_audio_mute = f9 # Take screenshot # input_screenshot = f8 # Netplay flip users. # input_netplay_flip_players = i # Hold for slowmotion. # input_slowmotion = e # Enable other hotkeys. # If this hotkey is bound to either keyboard, joybutton or joyaxis, # all other hotkeys will be disabled unless this hotkey is also held at the same time. # This is useful for RETRO_KEYBOARD centric implementations # which query a large area of the keyboard, where it is not desirable # that hotkeys get in the way. # Alternatively, all hotkeys for keyboard could be disabled by the user. # input_enable_hotkey_btn = # Increases audio volume. # input_volume_up = kp_plus # Decreases audio volume. # input_volume_down = kp_minus # Toggles to next overlay. Wraps around. # input_overlay_next = # Toggles eject for disks. Used for multiple-disk content. # input_disk_eject_toggle = # Cycles through disk images. Use after ejecting. # Complete by toggling eject again. # input_disk_next = # Toggles menu. # input_menu_toggle = f1 # Toggles mouse grab. When mouse is grabbed, RetroArch hides the mouse, # and keeps the mouse pointer inside the window to allow relative mouse input # to work better. # input_grab_mouse_toggle = f11 #### Menu # Menu driver to use. "rgui", "lakka", etc. # menu_driver = "rgui" # If enabled, the libretro core will keep running in the background when we # are in the menu. # menu_pause_libretro = false # Enable mouse input inside the menu. # menu_mouse_enable = false # Shows current date and/or time inside menu. # menu_timedate_enable = true # Shows current core inside menu. # menu_core_enable = true # Throttle the menu to ~60 FPS instead of using v-sync. Useful for 120+Hz monitors. # menu_throttle = false # Path to a .png image to set as menu wallpaper. # menu_wallpaper = # Wrap-around toe beginning and/or end if boundary of list reached horizontally # menu_navigation_wraparound_horizontal_enable = false # Wrap-around to beginning and/or end if boundary of list reached vertically # menu_navigation_wraparound_vertical_enable = false # Filter files being show in 'Load Content' by supported extensions # menu_navigation_browser_filter_supported_extensions_enable = true # Collapse subgroup settings into main group to create one big listing of settings # per category. # menu_collapse_subgroups_enable = false #### UI # Suspends the screensaver if set to true. Is a hint that does not necessarily have to be honored # by video driver. # suspend_screensaver_enable = true #### Camera # Override the default camera device the camera driver uses. This is driver dependant. # camera_device = # Override the default privacy permission for cores that want to access camera services. Is "false" by default. # camera_allow = false #### Location # Override the default privacy permission for cores that want to access location services. Is "false" by default. # location_allow = false #### Core Updater # URL to core update directory on buildbot. # core_updater_buildbot_url = "http://buildbot.libretro.com" # URL to assets update directory on buildbot. # core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/" # Automatically extract archives that the cores are contained in to the libretro cores directory. # core_updater_auto_extract_archive = true #### Network # When being client over netplay, use keybinds for user 1. # netplay_client_swap_input = false # The username of the person running RetroArch. This will be used for playing online, for instance. # netplay_nickname = # The amount of delay frames to use for netplay. Increasing this value will increase # performance, but introduce more latency. # netplay_delay_frames = 0 # Netplay mode for the current user. # false is Server, true is Client. # netplay_mode = false # Enable or disable spectator mode for the user during netplay. # netplay_spectator_mode_enable = false # The IP Address of the host to connect to. # netplay_ip_address = # The port of the host IP Address. Can be either a TCP or an UDP port. # netplay_ip_port = 55435 #### Misc # Enable rewinding. This will take a performance hit when playing, so it is disabled by default. rewind_enable = false # Rewinding buffer size in megabytes. Bigger rewinding buffer means you can rewind longer. # The buffer should be approx. 20MB per minute of buffer time. rewind_buffer_size = 10 # Rewind granularity. When rewinding defined number of frames, you can rewind several frames at a time, increasing the rewinding speed. rewind_granularity = 2 # Pause gameplay when window focus is lost. # pause_nonactive = true # Autosaves the non-volatile SRAM at a regular interval. This is disabled by default unless set otherwise. # The interval is measured in seconds. A value of 0 disables autosave. # autosave_interval = # Path to content database directory. # content_database_path = # Path to cheat database directory. # cheat_database_path = # Path to XML cheat config, a file which keeps track of which # cheat settings are used for individual games. # If the file does not exist, it will be created. # cheat_settings_path = # Directory to dump screenshots to. # screenshot_directory = # Records video after CPU video filter. # video_post_filter_record = false # Records output of GPU shaded material if available. # video_gpu_record = false # Screenshots output of GPU shaded material if available. video_gpu_screenshot = true # Block SRAM from being overwritten when loading save states. # Might potentially lead to buggy games. # block_sram_overwrite = false # When saving a savestate, save state index is automatically increased before # it is saved. # Also, when loading content, the index will be set to the highest existing index. # There is no upper bound on the index. # savestate_auto_index = false # Slowmotion ratio. When slowmotion, content will slow down by factor. # slowmotion_ratio = 3.0 # The maximum rate at which content will be run when using fast forward. (E.g. 5.0 for 60 fps content => 300 fps cap). # RetroArch will go to sleep to ensure that the maximum rate will not be exceeded. # Do not rely on this cap to be perfectly accurate. # fastforward_ratio = 1.0 # Setting this to false equals no FPS cap and will override the fastforward_ratio value. # fastforward_ratio_throttle_enable = false # Enable stdin/network command interface. # network_cmd_enable = false # network_cmd_port = 55355 # stdin_cmd_enable = false input_enable_hotkey = nul input_player1_joypad_index = "0" input_player1_b_btn = "1" input_player1_y_btn = "3" input_player1_select_btn = "6" input_player1_start_btn = "7" input_player1_up_btn = "13" input_player1_down_btn = "14" input_player1_left_btn = "11" input_player1_right_btn = "12" input_player1_a_btn = "0" input_player1_x_btn = "2" input_player1_l_btn = "4" input_player1_r_btn = "5" input_player1_l2_axis = "+2" input_player1_r2_axis = "+5" input_player1_l3_btn = "9" input_player1_r3_btn = "10" input_player1_l_x_plus_axis = "+0" input_player1_l_x_minus_axis = "-0" input_player1_l_y_plus_axis = "+1" input_player1_l_y_minus_axis = "-1" input_player1_r_x_plus_axis = "+3" input_player1_r_x_minus_axis = "-3" input_player1_r_y_plus_axis = "+4" input_player1_r_y_minus_axis = "-4" input_player2_joypad_index = "4" input_player2_b_btn = "1" input_player2_select_btn = "3" input_player2_start_btn = "2" input_player2_up_axis = "-1" input_player2_down_axis = "+1" input_player2_left_axis = "-0" input_player2_right_axis = "+0" input_player2_a_btn = "0" #Hotkey input_enable_hotkey_btn = "8" #Sondertasten input_exit_emulator_btn = "6" input_pause_toggle_btn = "0" input_menu_toggle_btn = "7"
Mit der Raute # könnt ihr Kommentare ins Script schreiben oder einen Schalter deaktivieren, indem ihr an die erste Stelle der Zeile eine Raute schreibt. Startet nun wieder ein Spielchen (es muss natürlich ein RetroArch-Emulator sein) und ihr könnt die eben zugewiesenen Tasten verwenden. Mit GUIDE + START erscheint z. B. das RetroArch-Menü.
Das waren jetzt nur vier Sonderfunktionen, es gibt aber noch einen ganzen Haufen mehr! Auch zusätzliche Einstellungen gibt es massenhaft. Ihr könnt z. B. übers Pad das Laden & Speichern von Snapshots oder die Aufnahme von Screenshots steuern.
Den aktuellen Emulatorstatus, könnt ihr nach hinzufügen der folgdenden Zeilen zur retroarch.cfg, mit L1 speichern und mit L2 laden (immer in Kombination mit dem Hotkey GUIDE).
input_save_state_btn = "4" input_load_state_btn = "5"
Wenn ihr lieber mit einem der analogen Sticks, statt dem D-Pad, spielt, dann könnt ihr dies durch die Zeile
input_player1_analog_dpad_mode = "1"
erreichen. Hier für den ersten Spieler 0 = keiner | 1 = linker | 2 = rechter Stick. Das D-Pad geht dann parallel immer noch.
Im folgenden Block findet ihr einen ganzen Haufen 😉 (oder so gar alle?) Schalter.
#include "/opt/retropie/configs/all/retroarch.cfg" input_remapping_directory = "/opt/retropie/configs/nes/" video_shader = "/opt/retropie/emulators/retroarch/shader/phosphor.glslp" video_shader_enable = "false" video_smooth = "false" input_max_users = "16" input_axis_threshold = "0.500000" video_gpu_record = "false" input_remap_binds_enable = "true" netplay_client_swap_input = "true" input_descriptor_label_show = "true" autoconfig_descriptor_label_show = "true" input_descriptor_hide_unbound = "false" load_dummy_on_core_shutdown = "true" fps_show = "false" ui_menubar_enable = "true" suspend_screensaver_enable = "true" libretro_path = "/opt/retropie/libretrocores/lr-fceumm/fceumm_libretro.so" libretro_directory = "" libretro_info_path = "" content_database_path = "" cheat_database_path = "" cursor_directory = "" content_history_dir = "" rewind_enable = "false" audio_latency = "64" audio_sync = "true" audio_block_frames = "0" rewind_granularity = "1" video_aspect_ratio = "-1.000000" video_aspect_ratio_auto = "false" video_windowed_fullscreen = "true" video_scale = "3.000000" autosave_interval = "0" video_crop_overscan = "true" video_scale_integer = "false" video_threaded = "false" video_shared_context = "false" video_force_srgb_disable = "false" video_fullscreen = "false" video_refresh_rate = "60.000000" video_monitor_index = "0" video_fullscreen_x = "640" video_fullscreen_y = "480" video_driver = "gl" threaded_data_runloop_enable = "true" menu_driver = "rgui" menu_pause_libretro = "true" menu_mouse_enable = "false" menu_timedate_enable = "true" menu_core_enable = "true" menu_wallpaper = "" video_vsync = "true" video_hard_sync = "false" video_hard_sync_frames = "0" video_frame_delay = "0" video_black_frame_insertion = "false" video_disable_composition = "false" pause_nonactive = "false" video_swap_interval = "1" video_gpu_screenshot = "true" video_rotation = "0" screenshot_directory = "default" aspect_ratio_index = "19" audio_device = "" video_filter = "" audio_dsp_plugin = "" core_updater_buildbot_url = "" core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/" core_updater_auto_extract_archive = "true" camera_device = "" camera_allow = "false" audio_rate_control = "true" audio_rate_control_delta = "0.005000" audio_max_timing_skew = "0.050000" audio_volume = "0.000000" video_context_driver = "" audio_driver = "alsathread" audio_enable = "true" audio_mute_enable = "false" audio_out_rate = "48000" location_allow = "false" video_font_size = "32.000000" video_font_enable = "true" ups_pref = "false" bps_pref = "false" ips_pref = "false" system_directory = "default" extraction_directory = "" input_remapping_path = "" resampler_directory = "" audio_resampler = "sinc" savefile_directory = "default" savestate_directory = "default" video_shader_dir = "default" video_filter_dir = "default" audio_filter_dir = "default" core_assets_directory = "default" assets_directory = "default" playlist_directory = "default" rgui_browser_directory = "default" rgui_config_directory = "default" rgui_show_start_screen = "false" menu_navigation_wraparound_horizontal_enable = "true" menu_navigation_wraparound_vertical_enable = "true" menu_navigation_browser_filter_supported_extensions_enable = "true" menu_collapse_subgroups_enable = "true" menu_show_advanced_settings = "false" menu_entry_normal_color = "ffffffff" menu_entry_hover_color = "ff64ff64" menu_title_color = "ff64ff64" game_history_path = "/opt/retropie/configs/nes/retroarch-content-history.txt" game_history_size = "100" joypad_autoconfig_dir = "" input_autodetect_enable = "true" overlay_directory = "default" input_overlay = "" input_overlay_enable = "true" input_overlay_opacity = "0.700000" input_overlay_scale = "1.000000" osk_overlay_directory = "default" input_osk_overlay = "" input_osk_overlay_enable = "false" video_font_path = "" video_message_pos_x = "0.050000" video_message_pos_y = "0.050000" gamma_correction = "false" soft_filter_enable = "false" flicker_filter_enable = "false" flicker_filter_index = "0" soft_filter_index = "0" current_resolution_id = "0" custom_viewport_width = "514" custom_viewport_height = "480" custom_viewport_x = "169" custom_viewport_y = "0" block_sram_overwrite = "false" savestate_auto_index = "false" savestate_auto_save = "false" savestate_auto_load = "false" history_list_enable = "true" fastforward_ratio = "1.000000" fastforward_ratio_throttle_enable = "false" slowmotion_ratio = "3.000000" config_save_on_exit = "true" sound_mode = "0" state_slot = "0" netplay_spectator_mode_enable = "false" netplay_mode = "false" netplay_ip_address = "" netplay_ip_port = "0" netplay_delay_frames = "0" netplay_nickname = "" user_language = "0" custom_bgm_enable = "false" input_driver = "udev" input_joypad_driver = "udev" input_keyboard_layout = "" input_device_p1 = "0" input_player1_joypad_index = "0" input_libretro_device_p1 = "1" input_player1_analog_dpad_mode = "0" input_device_p2 = "0" input_player2_joypad_index = "1" input_libretro_device_p2 = "1" input_player2_analog_dpad_mode = "0" input_device_p3 = "0" input_player3_joypad_index = "2" input_libretro_device_p3 = "1" input_player3_analog_dpad_mode = "0" input_device_p4 = "0" input_player4_joypad_index = "3" input_libretro_device_p4 = "1" input_player4_analog_dpad_mode = "0" input_device_p5 = "0" input_player5_joypad_index = "4" input_libretro_device_p5 = "1" input_player5_analog_dpad_mode = "0" input_device_p6 = "0" input_player6_joypad_index = "5" input_libretro_device_p6 = "1" input_player6_analog_dpad_mode = "0" input_device_p7 = "0" input_player7_joypad_index = "6" input_libretro_device_p7 = "1" input_player7_analog_dpad_mode = "0" input_device_p8 = "0" input_player8_joypad_index = "7" input_libretro_device_p8 = "1" input_player8_analog_dpad_mode = "0" input_device_p9 = "0" input_player9_joypad_index = "8" input_libretro_device_p9 = "1" input_player9_analog_dpad_mode = "0" input_device_p10 = "0" input_player10_joypad_index = "9" input_libretro_device_p10 = "1" input_player10_analog_dpad_mode = "0" input_device_p11 = "0" input_player11_joypad_index = "10" input_libretro_device_p11 = "1" input_player11_analog_dpad_mode = "0" input_device_p12 = "0" input_player12_joypad_index = "11" input_libretro_device_p12 = "1" input_player12_analog_dpad_mode = "0" input_device_p13 = "0" input_player13_joypad_index = "12" input_libretro_device_p13 = "1" input_player13_analog_dpad_mode = "0" input_device_p14 = "0" input_player14_joypad_index = "13" input_libretro_device_p14 = "1" input_player14_analog_dpad_mode = "0" input_device_p15 = "0" input_player15_joypad_index = "14" input_libretro_device_p15 = "1" input_player15_analog_dpad_mode = "0" input_device_p16 = "0" input_player16_joypad_index = "15" input_libretro_device_p16 = "1" input_player16_analog_dpad_mode = "0" input_player1_b = "z" input_player1_b_btn = "nul" input_player1_b_axis = "nul" input_player1_y = "a" input_player1_y_btn = "nul" input_player1_y_axis = "nul" input_player1_select = "rshift" input_player1_select_btn = "nul" input_player1_select_axis = "nul" input_player1_start = "enter" input_player1_start_btn = "nul" input_player1_start_axis = "nul" input_player1_up = "up" input_player1_up_btn = "nul" input_player1_up_axis = "nul" input_player1_down = "down" input_player1_down_btn = "nul" input_player1_down_axis = "nul" input_player1_left = "left" input_player1_left_btn = "nul" input_player1_left_axis = "nul" input_player1_right = "right" input_player1_right_btn = "nul" input_player1_right_axis = "nul" input_player1_a = "x" input_player1_a_btn = "nul" input_player1_a_axis = "nul" input_player1_x = "s" input_player1_x_btn = "nul" input_player1_x_axis = "nul" input_player1_l = "q" input_player1_l_btn = "nul" input_player1_l_axis = "nul" input_player1_r = "w" input_player1_r_btn = "nul" input_player1_r_axis = "nul" input_player1_l2 = "nul" input_player1_l2_btn = "nul" input_player1_l2_axis = "nul" input_player1_r2 = "nul" input_player1_r2_btn = "nul" input_player1_r2_axis = "nul" input_player1_l3 = "nul" input_player1_l3_btn = "nul" input_player1_l3_axis = "nul" input_player1_r3 = "nul" input_player1_r3_btn = "nul" input_player1_r3_axis = "nul" input_player1_l_x_plus = "nul" input_player1_l_x_plus_btn = "nul" input_player1_l_x_plus_axis = "nul" input_player1_l_x_minus = "nul" input_player1_l_x_minus_btn = "nul" input_player1_l_x_minus_axis = "nul" input_player1_l_y_plus = "nul" input_player1_l_y_plus_btn = "nul" input_player1_l_y_plus_axis = "nul" input_player1_l_y_minus = "nul" input_player1_l_y_minus_btn = "nul" input_player1_l_y_minus_axis = "nul" input_player1_r_x_plus = "nul" input_player1_r_x_plus_btn = "nul" input_player1_r_x_plus_axis = "nul" input_player1_r_x_minus = "nul" input_player1_r_x_minus_btn = "nul" input_player1_r_x_minus_axis = "nul" input_player1_r_y_plus = "nul" input_player1_r_y_plus_btn = "nul" input_player1_r_y_plus_axis = "nul" input_player1_r_y_minus = "nul" input_player1_r_y_minus_btn = "nul" input_player1_r_y_minus_axis = "nul" input_player1_turbo = "nul" input_player1_turbo_btn = "nul" input_player1_turbo_axis = "nul" input_toggle_fast_forward = "space" input_toggle_fast_forward_btn = "nul" input_toggle_fast_forward_axis = "nul" input_hold_fast_forward = "l" input_hold_fast_forward_btn = "nul" input_hold_fast_forward_axis = "nul" input_load_state = "f4" input_load_state_btn = "nul" input_load_state_axis = "nul" input_save_state = "f2" input_save_state_btn = "nul" input_save_state_axis = "nul" input_toggle_fullscreen = "f" input_toggle_fullscreen_btn = "nul" input_toggle_fullscreen_axis = "nul" input_exit_emulator = "escape" input_exit_emulator_btn = "nul" input_exit_emulator_axis = "nul" input_state_slot_increase = "f7" input_state_slot_increase_btn = "nul" input_state_slot_increase_axis = "nul" input_state_slot_decrease = "f6" input_state_slot_decrease_btn = "nul" input_state_slot_decrease_axis = "nul" input_rewind = "r" input_rewind_btn = "nul" input_rewind_axis = "nul" input_movie_record_toggle = "o" input_movie_record_toggle_btn = "nul" input_movie_record_toggle_axis = "nul" input_pause_toggle = "p" input_pause_toggle_btn = "nul" input_pause_toggle_axis = "nul" input_frame_advance = "k" input_frame_advance_btn = "nul" input_frame_advance_axis = "nul" input_reset = "h" input_reset_btn = "nul" input_reset_axis = "nul" input_shader_next = "m" input_shader_next_btn = "nul" input_shader_next_axis = "nul" input_shader_prev = "n" input_shader_prev_btn = "nul" input_shader_prev_axis = "nul" input_cheat_index_plus = "y" input_cheat_index_plus_btn = "nul" input_cheat_index_plus_axis = "nul" input_cheat_index_minus = "t" input_cheat_index_minus_btn = "nul" input_cheat_index_minus_axis = "nul" input_cheat_toggle = "u" input_cheat_toggle_btn = "nul" input_cheat_toggle_axis = "nul" input_screenshot = "f8" input_screenshot_btn = "nul" input_screenshot_axis = "nul" input_audio_mute = "f9" input_audio_mute_btn = "nul" input_audio_mute_axis = "nul" input_netplay_flip_players = "i" input_netplay_flip_players_btn = "nul" input_netplay_flip_players_axis = "nul" input_slowmotion = "e" input_slowmotion_btn = "nul" input_slowmotion_axis = "nul" input_enable_hotkey = "nul" input_enable_hotkey_btn = "nul" input_enable_hotkey_axis = "nul" input_volume_up = "add" input_volume_up_btn = "nul" input_volume_up_axis = "nul" input_volume_down = "subtract" input_volume_down_btn = "nul" input_volume_down_axis = "nul" input_overlay_next = "nul" input_overlay_next_btn = "nul" input_overlay_next_axis = "nul" input_disk_eject_toggle = "nul" input_disk_eject_toggle_btn = "nul" input_disk_eject_toggle_axis = "nul" input_disk_next = "nul" input_disk_next_btn = "nul" input_disk_next_axis = "nul" input_disk_prev = "nul" input_disk_prev_btn = "nul" input_disk_prev_axis = "nul" input_grab_mouse_toggle = "f11" input_grab_mouse_toggle_btn = "nul" input_grab_mouse_toggle_axis = "nul" input_menu_toggle = "f1" input_menu_toggle_btn = "nul" input_menu_toggle_axis = "nul" input_player2_b = "nul" input_player2_b_btn = "nul" input_player2_b_axis = "nul" input_player2_y = "nul" input_player2_y_btn = "nul" input_player2_y_axis = "nul" input_player2_select = "nul" input_player2_select_btn = "nul" input_player2_select_axis = "nul" input_player2_start = "nul" input_player2_start_btn = "nul" input_player2_start_axis = "nul" input_player2_up = "nul" input_player2_up_btn = "nul" input_player2_up_axis = "nul" input_player2_down = "nul" input_player2_down_btn = "nul" input_player2_down_axis = "nul" input_player2_left = "nul" input_player2_left_btn = "nul" input_player2_left_axis = "nul" input_player2_right = "nul" input_player2_right_btn = "nul" input_player2_right_axis = "nul" input_player2_a = "nul" input_player2_a_btn = "nul" input_player2_a_axis = "nul" input_player2_x = "nul" input_player2_x_btn = "nul" input_player2_x_axis = "nul" input_player2_l = "nul" input_player2_l_btn = "nul" input_player2_l_axis = "nul" input_player2_r = "nul" input_player2_r_btn = "nul" input_player2_r_axis = "nul" input_player2_l2 = "nul" input_player2_l2_btn = "nul" input_player2_l2_axis = "nul" input_player2_r2 = "nul" input_player2_r2_btn = "nul" input_player2_r2_axis = "nul" input_player2_l3 = "nul" input_player2_l3_btn = "nul" input_player2_l3_axis = "nul" input_player2_r3 = "nul" input_player2_r3_btn = "nul" input_player2_r3_axis = "nul" input_player2_l_x_plus = "nul" input_player2_l_x_plus_btn = "nul" input_player2_l_x_plus_axis = "nul" input_player2_l_x_minus = "nul" input_player2_l_x_minus_btn = "nul" input_player2_l_x_minus_axis = "nul" input_player2_l_y_plus = "nul" input_player2_l_y_plus_btn = "nul" input_player2_l_y_plus_axis = "nul" input_player2_l_y_minus = "nul" input_player2_l_y_minus_btn = "nul" input_player2_l_y_minus_axis = "nul" input_player2_r_x_plus = "nul" input_player2_r_x_plus_btn = "nul" input_player2_r_x_plus_axis = "nul" input_player2_r_x_minus = "nul" input_player2_r_x_minus_btn = "nul" input_player2_r_x_minus_axis = "nul" input_player2_r_y_plus = "nul" input_player2_r_y_plus_btn = "nul" input_player2_r_y_plus_axis = "nul" input_player2_r_y_minus = "nul" input_player2_r_y_minus_btn = "nul" input_player2_r_y_minus_axis = "nul" input_player2_turbo = "nul" input_player2_turbo_btn = "nul" input_player2_turbo_axis = "nul" input_player3_b = "nul" input_player3_b_btn = "nul" input_player3_b_axis = "nul" input_player3_y = "nul" input_player3_y_btn = "nul" input_player3_y_axis = "nul" input_player3_select = "nul" input_player3_select_btn = "nul" input_player3_select_axis = "nul" input_player3_start = "nul" input_player3_start_btn = "nul" input_player3_start_axis = "nul" input_player3_up = "nul" input_player3_up_btn = "nul" input_player3_up_axis = "nul" input_player3_down = "nul" input_player3_down_btn = "nul" input_player3_down_axis = "nul" input_player3_left = "nul" input_player3_left_btn = "nul" input_player3_left_axis = "nul" input_player3_right = "nul" input_player3_right_btn = "nul" input_player3_right_axis = "nul" input_player3_a = "nul" input_player3_a_btn = "nul" input_player3_a_axis = "nul" input_player3_x = "nul" input_player3_x_btn = "nul" input_player3_x_axis = "nul" input_player3_l = "nul" input_player3_l_btn = "nul" input_player3_l_axis = "nul" input_player3_r = "nul" input_player3_r_btn = "nul" input_player3_r_axis = "nul" input_player3_l2 = "nul" input_player3_l2_btn = "nul" input_player3_l2_axis = "nul" input_player3_r2 = "nul" input_player3_r2_btn = "nul" input_player3_r2_axis = "nul" input_player3_l3 = "nul" input_player3_l3_btn = "nul" input_player3_l3_axis = "nul" input_player3_r3 = "nul" input_player3_r3_btn = "nul" input_player3_r3_axis = "nul" input_player3_l_x_plus = "nul" input_player3_l_x_plus_btn = "nul" input_player3_l_x_plus_axis = "nul" input_player3_l_x_minus = "nul" input_player3_l_x_minus_btn = "nul" input_player3_l_x_minus_axis = "nul" input_player3_l_y_plus = "nul" input_player3_l_y_plus_btn = "nul" input_player3_l_y_plus_axis = "nul" input_player3_l_y_minus = "nul" input_player3_l_y_minus_btn = "nul" input_player3_l_y_minus_axis = "nul" input_player3_r_x_plus = "nul" input_player3_r_x_plus_btn = "nul" input_player3_r_x_plus_axis = "nul" input_player3_r_x_minus = "nul" input_player3_r_x_minus_btn = "nul" input_player3_r_x_minus_axis = "nul" input_player3_r_y_plus = "nul" input_player3_r_y_plus_btn = "nul" input_player3_r_y_plus_axis = "nul" input_player3_r_y_minus = "nul" input_player3_r_y_minus_btn = "nul" input_player3_r_y_minus_axis = "nul" input_player3_turbo = "nul" input_player3_turbo_btn = "nul" input_player3_turbo_axis = "nul" input_player4_b = "nul" input_player4_b_btn = "nul" input_player4_b_axis = "nul" input_player4_y = "nul" input_player4_y_btn = "nul" input_player4_y_axis = "nul" input_player4_select = "nul" input_player4_select_btn = "nul" input_player4_select_axis = "nul" input_player4_start = "nul" input_player4_start_btn = "nul" input_player4_start_axis = "nul" input_player4_up = "nul" input_player4_up_btn = "nul" input_player4_up_axis = "nul" input_player4_down = "nul" input_player4_down_btn = "nul" input_player4_down_axis = "nul" input_player4_left = "nul" input_player4_left_btn = "nul" input_player4_left_axis = "nul" input_player4_right = "nul" input_player4_right_btn = "nul" input_player4_right_axis = "nul" input_player4_a = "nul" input_player4_a_btn = "nul" input_player4_a_axis = "nul" input_player4_x = "nul" input_player4_x_btn = "nul" input_player4_x_axis = "nul" input_player4_l = "nul" input_player4_l_btn = "nul" input_player4_l_axis = "nul" input_player4_r = "nul" input_player4_r_btn = "nul" input_player4_r_axis = "nul" input_player4_l2 = "nul" input_player4_l2_btn = "nul" input_player4_l2_axis = "nul" input_player4_r2 = "nul" input_player4_r2_btn = "nul" input_player4_r2_axis = "nul" input_player4_l3 = "nul" input_player4_l3_btn = "nul" input_player4_l3_axis = "nul" input_player4_r3 = "nul" input_player4_r3_btn = "nul" input_player4_r3_axis = "nul" input_player4_l_x_plus = "nul" input_player4_l_x_plus_btn = "nul" input_player4_l_x_plus_axis = "nul" input_player4_l_x_minus = "nul" input_player4_l_x_minus_btn = "nul" input_player4_l_x_minus_axis = "nul" input_player4_l_y_plus = "nul" input_player4_l_y_plus_btn = "nul" input_player4_l_y_plus_axis = "nul" input_player4_l_y_minus = "nul" input_player4_l_y_minus_btn = "nul" input_player4_l_y_minus_axis = "nul" input_player4_r_x_plus = "nul" input_player4_r_x_plus_btn = "nul" input_player4_r_x_plus_axis = "nul" input_player4_r_x_minus = "nul" input_player4_r_x_minus_btn = "nul" input_player4_r_x_minus_axis = "nul" input_player4_r_y_plus = "nul" input_player4_r_y_plus_btn = "nul" input_player4_r_y_plus_axis = "nul" input_player4_r_y_minus = "nul" input_player4_r_y_minus_btn = "nul" input_player4_r_y_minus_axis = "nul" input_player4_turbo = "nul" input_player4_turbo_btn = "nul" input_player4_turbo_axis = "nul" input_player5_b = "nul" input_player5_b_btn = "nul" input_player5_b_axis = "nul" input_player5_y = "nul" input_player5_y_btn = "nul" input_player5_y_axis = "nul" input_player5_select = "nul" input_player5_select_btn = "nul" input_player5_select_axis = "nul" input_player5_start = "nul" input_player5_start_btn = "nul" input_player5_start_axis = "nul" input_player5_up = "nul" input_player5_up_btn = "nul" input_player5_up_axis = "nul" input_player5_down = "nul" input_player5_down_btn = "nul" input_player5_down_axis = "nul" input_player5_left = "nul" input_player5_left_btn = "nul" input_player5_left_axis = "nul" input_player5_right = "nul" input_player5_right_btn = "nul" input_player5_right_axis = "nul" input_player5_a = "nul" input_player5_a_btn = "nul" input_player5_a_axis = "nul" input_player5_x = "nul" input_player5_x_btn = "nul" input_player5_x_axis = "nul" input_player5_l = "nul" input_player5_l_btn = "nul" input_player5_l_axis = "nul" input_player5_r = "nul" input_player5_r_btn = "nul" input_player5_r_axis = "nul" input_player5_l2 = "nul" input_player5_l2_btn = "nul" input_player5_l2_axis = "nul" input_player5_r2 = "nul" input_player5_r2_btn = "nul" input_player5_r2_axis = "nul" input_player5_l3 = "nul" input_player5_l3_btn = "nul" input_player5_l3_axis = "nul" input_player5_r3 = "nul" input_player5_r3_btn = "nul" input_player5_r3_axis = "nul" input_player5_l_x_plus = "nul" input_player5_l_x_plus_btn = "nul" input_player5_l_x_plus_axis = "nul" input_player5_l_x_minus = "nul" input_player5_l_x_minus_btn = "nul" input_player5_l_x_minus_axis = "nul" input_player5_l_y_plus = "nul" input_player5_l_y_plus_btn = "nul" input_player5_l_y_plus_axis = "nul" input_player5_l_y_minus = "nul" input_player5_l_y_minus_btn = "nul" input_player5_l_y_minus_axis = "nul" input_player5_r_x_plus = "nul" input_player5_r_x_plus_btn = "nul" input_player5_r_x_plus_axis = "nul" input_player5_r_x_minus = "nul" input_player5_r_x_minus_btn = "nul" input_player5_r_x_minus_axis = "nul" input_player5_r_y_plus = "nul" input_player5_r_y_plus_btn = "nul" input_player5_r_y_plus_axis = "nul" input_player5_r_y_minus = "nul" input_player5_r_y_minus_btn = "nul" input_player5_r_y_minus_axis = "nul" input_player5_turbo = "nul" input_player5_turbo_btn = "nul" input_player5_turbo_axis = "nul" input_player6_b = "nul" input_player6_b_btn = "nul" input_player6_b_axis = "nul" input_player6_y = "nul" input_player6_y_btn = "nul" input_player6_y_axis = "nul" input_player6_select = "nul" input_player6_select_btn = "nul" input_player6_select_axis = "nul" input_player6_start = "nul" input_player6_start_btn = "nul" input_player6_start_axis = "nul" input_player6_up = "nul" input_player6_up_btn = "nul" input_player6_up_axis = "nul" input_player6_down = "nul" input_player6_down_btn = "nul" input_player6_down_axis = "nul" input_player6_left = "nul" input_player6_left_btn = "nul" input_player6_left_axis = "nul" input_player6_right = "nul" input_player6_right_btn = "nul" input_player6_right_axis = "nul" input_player6_a = "nul" input_player6_a_btn = "nul" input_player6_a_axis = "nul" input_player6_x = "nul" input_player6_x_btn = "nul" input_player6_x_axis = "nul" input_player6_l = "nul" input_player6_l_btn = "nul" input_player6_l_axis = "nul" input_player6_r = "nul" input_player6_r_btn = "nul" input_player6_r_axis = "nul" input_player6_l2 = "nul" input_player6_l2_btn = "nul" input_player6_l2_axis = "nul" input_player6_r2 = "nul" input_player6_r2_btn = "nul" input_player6_r2_axis = "nul" input_player6_l3 = "nul" input_player6_l3_btn = "nul" input_player6_l3_axis = "nul" input_player6_r3 = "nul" input_player6_r3_btn = "nul" input_player6_r3_axis = "nul" input_player6_l_x_plus = "nul" input_player6_l_x_plus_btn = "nul" input_player6_l_x_plus_axis = "nul" input_player6_l_x_minus = "nul" input_player6_l_x_minus_btn = "nul" input_player6_l_x_minus_axis = "nul" input_player6_l_y_plus = "nul" input_player6_l_y_plus_btn = "nul" input_player6_l_y_plus_axis = "nul" input_player6_l_y_minus = "nul" input_player6_l_y_minus_btn = "nul" input_player6_l_y_minus_axis = "nul" input_player6_r_x_plus = "nul" input_player6_r_x_plus_btn = "nul" input_player6_r_x_plus_axis = "nul" input_player6_r_x_minus = "nul" input_player6_r_x_minus_btn = "nul" input_player6_r_x_minus_axis = "nul" input_player6_r_y_plus = "nul" input_player6_r_y_plus_btn = "nul" input_player6_r_y_plus_axis = "nul" input_player6_r_y_minus = "nul" input_player6_r_y_minus_btn = "nul" input_player6_r_y_minus_axis = "nul" input_player6_turbo = "nul" input_player6_turbo_btn = "nul" input_player6_turbo_axis = "nul" input_player7_b = "nul" input_player7_b_btn = "nul" input_player7_b_axis = "nul" input_player7_y = "nul" input_player7_y_btn = "nul" input_player7_y_axis = "nul" input_player7_select = "nul" input_player7_select_btn = "nul" input_player7_select_axis = "nul" input_player7_start = "nul" input_player7_start_btn = "nul" input_player7_start_axis = "nul" input_player7_up = "nul" input_player7_up_btn = "nul" input_player7_up_axis = "nul" input_player7_down = "nul" input_player7_down_btn = "nul" input_player7_down_axis = "nul" input_player7_left = "nul" input_player7_left_btn = "nul" input_player7_left_axis = "nul" input_player7_right = "nul" input_player7_right_btn = "nul" input_player7_right_axis = "nul" input_player7_a = "nul" input_player7_a_btn = "nul" input_player7_a_axis = "nul" input_player7_x = "nul" input_player7_x_btn = "nul" input_player7_x_axis = "nul" input_player7_l = "nul" input_player7_l_btn = "nul" input_player7_l_axis = "nul" input_player7_r = "nul" input_player7_r_btn = "nul" input_player7_r_axis = "nul" input_player7_l2 = "nul" input_player7_l2_btn = "nul" input_player7_l2_axis = "nul" input_player7_r2 = "nul" input_player7_r2_btn = "nul" input_player7_r2_axis = "nul" input_player7_l3 = "nul" input_player7_l3_btn = "nul" input_player7_l3_axis = "nul" input_player7_r3 = "nul" input_player7_r3_btn = "nul" input_player7_r3_axis = "nul" input_player7_l_x_plus = "nul" input_player7_l_x_plus_btn = "nul" input_player7_l_x_plus_axis = "nul" input_player7_l_x_minus = "nul" input_player7_l_x_minus_btn = "nul" input_player7_l_x_minus_axis = "nul" input_player7_l_y_plus = "nul" input_player7_l_y_plus_btn = "nul" input_player7_l_y_plus_axis = "nul" input_player7_l_y_minus = "nul" input_player7_l_y_minus_btn = "nul" input_player7_l_y_minus_axis = "nul" input_player7_r_x_plus = "nul" input_player7_r_x_plus_btn = "nul" input_player7_r_x_plus_axis = "nul" input_player7_r_x_minus = "nul" input_player7_r_x_minus_btn = "nul" input_player7_r_x_minus_axis = "nul" input_player7_r_y_plus = "nul" input_player7_r_y_plus_btn = "nul" input_player7_r_y_plus_axis = "nul" input_player7_r_y_minus = "nul" input_player7_r_y_minus_btn = "nul" input_player7_r_y_minus_axis = "nul" input_player7_turbo = "nul" input_player7_turbo_btn = "nul" input_player7_turbo_axis = "nul" input_player8_b = "nul" input_player8_b_btn = "nul" input_player8_b_axis = "nul" input_player8_y = "nul" input_player8_y_btn = "nul" input_player8_y_axis = "nul" input_player8_select = "nul" input_player8_select_btn = "nul" input_player8_select_axis = "nul" input_player8_start = "nul" input_player8_start_btn = "nul" input_player8_start_axis = "nul" input_player8_up = "nul" input_player8_up_btn = "nul" input_player8_up_axis = "nul" input_player8_down = "nul" input_player8_down_btn = "nul" input_player8_down_axis = "nul" input_player8_left = "nul" input_player8_left_btn = "nul" input_player8_left_axis = "nul" input_player8_right = "nul" input_player8_right_btn = "nul" input_player8_right_axis = "nul" input_player8_a = "nul" input_player8_a_btn = "nul" input_player8_a_axis = "nul" input_player8_x = "nul" input_player8_x_btn = "nul" input_player8_x_axis = "nul" input_player8_l = "nul" input_player8_l_btn = "nul" input_player8_l_axis = "nul" input_player8_r = "nul" input_player8_r_btn = "nul" input_player8_r_axis = "nul" input_player8_l2 = "nul" input_player8_l2_btn = "nul" input_player8_l2_axis = "nul" input_player8_r2 = "nul" input_player8_r2_btn = "nul" input_player8_r2_axis = "nul" input_player8_l3 = "nul" input_player8_l3_btn = "nul" input_player8_l3_axis = "nul" input_player8_r3 = "nul" input_player8_r3_btn = "nul" input_player8_r3_axis = "nul" input_player8_l_x_plus = "nul" input_player8_l_x_plus_btn = "nul" input_player8_l_x_plus_axis = "nul" input_player8_l_x_minus = "nul" input_player8_l_x_minus_btn = "nul" input_player8_l_x_minus_axis = "nul" input_player8_l_y_plus = "nul" input_player8_l_y_plus_btn = "nul" input_player8_l_y_plus_axis = "nul" input_player8_l_y_minus = "nul" input_player8_l_y_minus_btn = "nul" input_player8_l_y_minus_axis = "nul" input_player8_r_x_plus = "nul" input_player8_r_x_plus_btn = "nul" input_player8_r_x_plus_axis = "nul" input_player8_r_x_minus = "nul" input_player8_r_x_minus_btn = "nul" input_player8_r_x_minus_axis = "nul" input_player8_r_y_plus = "nul" input_player8_r_y_plus_btn = "nul" input_player8_r_y_plus_axis = "nul" input_player8_r_y_minus = "nul" input_player8_r_y_minus_btn = "nul" input_player8_r_y_minus_axis = "nul" input_player8_turbo = "nul" input_player8_turbo_btn = "nul" input_player8_turbo_axis = "nul" input_player9_b = "nul" input_player9_b_btn = "nul" input_player9_b_axis = "nul" input_player9_y = "nul" input_player9_y_btn = "nul" input_player9_y_axis = "nul" input_player9_select = "nul" input_player9_select_btn = "nul" input_player9_select_axis = "nul" input_player9_start = "nul" input_player9_start_btn = "nul" input_player9_start_axis = "nul" input_player9_up = "nul" input_player9_up_btn = "nul" input_player9_up_axis = "nul" input_player9_down = "nul" input_player9_down_btn = "nul" input_player9_down_axis = "nul" input_player9_left = "nul" input_player9_left_btn = "nul" input_player9_left_axis = "nul" input_player9_right = "nul" input_player9_right_btn = "nul" input_player9_right_axis = "nul" input_player9_a = "nul" input_player9_a_btn = "nul" input_player9_a_axis = "nul" input_player9_x = "nul" input_player9_x_btn = "nul" input_player9_x_axis = "nul" input_player9_l = "nul" input_player9_l_btn = "nul" input_player9_l_axis = "nul" input_player9_r = "nul" input_player9_r_btn = "nul" input_player9_r_axis = "nul" input_player9_l2 = "nul" input_player9_l2_btn = "nul" input_player9_l2_axis = "nul" input_player9_r2 = "nul" input_player9_r2_btn = "nul" input_player9_r2_axis = "nul" input_player9_l3 = "nul" input_player9_l3_btn = "nul" input_player9_l3_axis = "nul" input_player9_r3 = "nul" input_player9_r3_btn = "nul" input_player9_r3_axis = "nul" input_player9_l_x_plus = "nul" input_player9_l_x_plus_btn = "nul" input_player9_l_x_plus_axis = "nul" input_player9_l_x_minus = "nul" input_player9_l_x_minus_btn = "nul" input_player9_l_x_minus_axis = "nul" input_player9_l_y_plus = "nul" input_player9_l_y_plus_btn = "nul" input_player9_l_y_plus_axis = "nul" input_player9_l_y_minus = "nul" input_player9_l_y_minus_btn = "nul" input_player9_l_y_minus_axis = "nul" input_player9_r_x_plus = "nul" input_player9_r_x_plus_btn = "nul" input_player9_r_x_plus_axis = "nul" input_player9_r_x_minus = "nul" input_player9_r_x_minus_btn = "nul" input_player9_r_x_minus_axis = "nul" input_player9_r_y_plus = "nul" input_player9_r_y_plus_btn = "nul" input_player9_r_y_plus_axis = "nul" input_player9_r_y_minus = "nul" input_player9_r_y_minus_btn = "nul" input_player9_r_y_minus_axis = "nul" input_player9_turbo = "nul" input_player9_turbo_btn = "nul" input_player9_turbo_axis = "nul" input_player10_b = "nul" input_player10_b_btn = "nul" input_player10_b_axis = "nul" input_player10_y = "nul" input_player10_y_btn = "nul" input_player10_y_axis = "nul" input_player10_select = "nul" input_player10_select_btn = "nul" input_player10_select_axis = "nul" input_player10_start = "nul" input_player10_start_btn = "nul" input_player10_start_axis = "nul" input_player10_up = "nul" input_player10_up_btn = "nul" input_player10_up_axis = "nul" input_player10_down = "nul" input_player10_down_btn = "nul" input_player10_down_axis = "nul" input_player10_left = "nul" input_player10_left_btn = "nul" input_player10_left_axis = "nul" input_player10_right = "nul" input_player10_right_btn = "nul" input_player10_right_axis = "nul" input_player10_a = "nul" input_player10_a_btn = "nul" input_player10_a_axis = "nul" input_player10_x = "nul" input_player10_x_btn = "nul" input_player10_x_axis = "nul" input_player10_l = "nul" input_player10_l_btn = "nul" input_player10_l_axis = "nul" input_player10_r = "nul" input_player10_r_btn = "nul" input_player10_r_axis = "nul" input_player10_l2 = "nul" input_player10_l2_btn = "nul" input_player10_l2_axis = "nul" input_player10_r2 = "nul" input_player10_r2_btn = "nul" input_player10_r2_axis = "nul" input_player10_l3 = "nul" input_player10_l3_btn = "nul" input_player10_l3_axis = "nul" input_player10_r3 = "nul" input_player10_r3_btn = "nul" input_player10_r3_axis = "nul" input_player10_l_x_plus = "nul" input_player10_l_x_plus_btn = "nul" input_player10_l_x_plus_axis = "nul" input_player10_l_x_minus = "nul" input_player10_l_x_minus_btn = "nul" input_player10_l_x_minus_axis = "nul" input_player10_l_y_plus = "nul" input_player10_l_y_plus_btn = "nul" input_player10_l_y_plus_axis = "nul" input_player10_l_y_minus = "nul" input_player10_l_y_minus_btn = "nul" input_player10_l_y_minus_axis = "nul" input_player10_r_x_plus = "nul" input_player10_r_x_plus_btn = "nul" input_player10_r_x_plus_axis = "nul" input_player10_r_x_minus = "nul" input_player10_r_x_minus_btn = "nul" input_player10_r_x_minus_axis = "nul" input_player10_r_y_plus = "nul" input_player10_r_y_plus_btn = "nul" input_player10_r_y_plus_axis = "nul" input_player10_r_y_minus = "nul" input_player10_r_y_minus_btn = "nul" input_player10_r_y_minus_axis = "nul" input_player10_turbo = "nul" input_player10_turbo_btn = "nul" input_player10_turbo_axis = "nul" input_player11_b = "nul" input_player11_b_btn = "nul" input_player11_b_axis = "nul" input_player11_y = "nul" input_player11_y_btn = "nul" input_player11_y_axis = "nul" input_player11_select = "nul" input_player11_select_btn = "nul" input_player11_select_axis = "nul" input_player11_start = "nul" input_player11_start_btn = "nul" input_player11_start_axis = "nul" input_player11_up = "nul" input_player11_up_btn = "nul" input_player11_up_axis = "nul" input_player11_down = "nul" input_player11_down_btn = "nul" input_player11_down_axis = "nul" input_player11_left = "nul" input_player11_left_btn = "nul" input_player11_left_axis = "nul" input_player11_right = "nul" input_player11_right_btn = "nul" input_player11_right_axis = "nul" input_player11_a = "nul" input_player11_a_btn = "nul" input_player11_a_axis = "nul" input_player11_x = "nul" input_player11_x_btn = "nul" input_player11_x_axis = "nul" input_player11_l = "nul" input_player11_l_btn = "nul" input_player11_l_axis = "nul" input_player11_r = "nul" input_player11_r_btn = "nul" input_player11_r_axis = "nul" input_player11_l2 = "nul" input_player11_l2_btn = "nul" input_player11_l2_axis = "nul" input_player11_r2 = "nul" input_player11_r2_btn = "nul" input_player11_r2_axis = "nul" input_player11_l3 = "nul" input_player11_l3_btn = "nul" input_player11_l3_axis = "nul" input_player11_r3 = "nul" input_player11_r3_btn = "nul" input_player11_r3_axis = "nul" input_player11_l_x_plus = "nul" input_player11_l_x_plus_btn = "nul" input_player11_l_x_plus_axis = "nul" input_player11_l_x_minus = "nul" input_player11_l_x_minus_btn = "nul" input_player11_l_x_minus_axis = "nul" input_player11_l_y_plus = "nul" input_player11_l_y_plus_btn = "nul" input_player11_l_y_plus_axis = "nul" input_player11_l_y_minus = "nul" input_player11_l_y_minus_btn = "nul" input_player11_l_y_minus_axis = "nul" input_player11_r_x_plus = "nul" input_player11_r_x_plus_btn = "nul" input_player11_r_x_plus_axis = "nul" input_player11_r_x_minus = "nul" input_player11_r_x_minus_btn = "nul" input_player11_r_x_minus_axis = "nul" input_player11_r_y_plus = "nul" input_player11_r_y_plus_btn = "nul" input_player11_r_y_plus_axis = "nul" input_player11_r_y_minus = "nul" input_player11_r_y_minus_btn = "nul" input_player11_r_y_minus_axis = "nul" input_player11_turbo = "nul" input_player11_turbo_btn = "nul" input_player11_turbo_axis = "nul" input_player12_b = "nul" input_player12_b_btn = "nul" input_player12_b_axis = "nul" input_player12_y = "nul" input_player12_y_btn = "nul" input_player12_y_axis = "nul" input_player12_select = "nul" input_player12_select_btn = "nul" input_player12_select_axis = "nul" input_player12_start = "nul" input_player12_start_btn = "nul" input_player12_start_axis = "nul" input_player12_up = "nul" input_player12_up_btn = "nul" input_player12_up_axis = "nul" input_player12_down = "nul" input_player12_down_btn = "nul" input_player12_down_axis = "nul" input_player12_left = "nul" input_player12_left_btn = "nul" input_player12_left_axis = "nul" input_player12_right = "nul" input_player12_right_btn = "nul" input_player12_right_axis = "nul" input_player12_a = "nul" input_player12_a_btn = "nul" input_player12_a_axis = "nul" input_player12_x = "nul" input_player12_x_btn = "nul" input_player12_x_axis = "nul" input_player12_l = "nul" input_player12_l_btn = "nul" input_player12_l_axis = "nul" input_player12_r = "nul" input_player12_r_btn = "nul" input_player12_r_axis = "nul" input_player12_l2 = "nul" input_player12_l2_btn = "nul" input_player12_l2_axis = "nul" input_player12_r2 = "nul" input_player12_r2_btn = "nul" input_player12_r2_axis = "nul" input_player12_l3 = "nul" input_player12_l3_btn = "nul" input_player12_l3_axis = "nul" input_player12_r3 = "nul" input_player12_r3_btn = "nul" input_player12_r3_axis = "nul" input_player12_l_x_plus = "nul" input_player12_l_x_plus_btn = "nul" input_player12_l_x_plus_axis = "nul" input_player12_l_x_minus = "nul" input_player12_l_x_minus_btn = "nul" input_player12_l_x_minus_axis = "nul" input_player12_l_y_plus = "nul" input_player12_l_y_plus_btn = "nul" input_player12_l_y_plus_axis = "nul" input_player12_l_y_minus = "nul" input_player12_l_y_minus_btn = "nul" input_player12_l_y_minus_axis = "nul" input_player12_r_x_plus = "nul" input_player12_r_x_plus_btn = "nul" input_player12_r_x_plus_axis = "nul" input_player12_r_x_minus = "nul" input_player12_r_x_minus_btn = "nul" input_player12_r_x_minus_axis = "nul" input_player12_r_y_plus = "nul" input_player12_r_y_plus_btn = "nul" input_player12_r_y_plus_axis = "nul" input_player12_r_y_minus = "nul" input_player12_r_y_minus_btn = "nul" input_player12_r_y_minus_axis = "nul" input_player12_turbo = "nul" input_player12_turbo_btn = "nul" input_player12_turbo_axis = "nul" input_player13_b = "nul" input_player13_b_btn = "nul" input_player13_b_axis = "nul" input_player13_y = "nul" input_player13_y_btn = "nul" input_player13_y_axis = "nul" input_player13_select = "nul" input_player13_select_btn = "nul" input_player13_select_axis = "nul" input_player13_start = "nul" input_player13_start_btn = "nul" input_player13_start_axis = "nul" input_player13_up = "nul" input_player13_up_btn = "nul" input_player13_up_axis = "nul" input_player13_down = "nul" input_player13_down_btn = "nul" input_player13_down_axis = "nul" input_player13_left = "nul" input_player13_left_btn = "nul" input_player13_left_axis = "nul" input_player13_right = "nul" input_player13_right_btn = "nul" input_player13_right_axis = "nul" input_player13_a = "nul" input_player13_a_btn = "nul" input_player13_a_axis = "nul" input_player13_x = "nul" input_player13_x_btn = "nul" input_player13_x_axis = "nul" input_player13_l = "nul" input_player13_l_btn = "nul" input_player13_l_axis = "nul" input_player13_r = "nul" input_player13_r_btn = "nul" input_player13_r_axis = "nul" input_player13_l2 = "nul" input_player13_l2_btn = "nul" input_player13_l2_axis = "nul" input_player13_r2 = "nul" input_player13_r2_btn = "nul" input_player13_r2_axis = "nul" input_player13_l3 = "nul" input_player13_l3_btn = "nul" input_player13_l3_axis = "nul" input_player13_r3 = "nul" input_player13_r3_btn = "nul" input_player13_r3_axis = "nul" input_player13_l_x_plus = "nul" input_player13_l_x_plus_btn = "nul" input_player13_l_x_plus_axis = "nul" input_player13_l_x_minus = "nul" input_player13_l_x_minus_btn = "nul" input_player13_l_x_minus_axis = "nul" input_player13_l_y_plus = "nul" input_player13_l_y_plus_btn = "nul" input_player13_l_y_plus_axis = "nul" input_player13_l_y_minus = "nul" input_player13_l_y_minus_btn = "nul" input_player13_l_y_minus_axis = "nul" input_player13_r_x_plus = "nul" input_player13_r_x_plus_btn = "nul" input_player13_r_x_plus_axis = "nul" input_player13_r_x_minus = "nul" input_player13_r_x_minus_btn = "nul" input_player13_r_x_minus_axis = "nul" input_player13_r_y_plus = "nul" input_player13_r_y_plus_btn = "nul" input_player13_r_y_plus_axis = "nul" input_player13_r_y_minus = "nul" input_player13_r_y_minus_btn = "nul" input_player13_r_y_minus_axis = "nul" input_player13_turbo = "nul" input_player13_turbo_btn = "nul" input_player13_turbo_axis = "nul" input_player14_b = "nul" input_player14_b_btn = "nul" input_player14_b_axis = "nul" input_player14_y = "nul" input_player14_y_btn = "nul" input_player14_y_axis = "nul" input_player14_select = "nul" input_player14_select_btn = "nul" input_player14_select_axis = "nul" input_player14_start = "nul" input_player14_start_btn = "nul" input_player14_start_axis = "nul" input_player14_up = "nul" input_player14_up_btn = "nul" input_player14_up_axis = "nul" input_player14_down = "nul" input_player14_down_btn = "nul" input_player14_down_axis = "nul" input_player14_left = "nul" input_player14_left_btn = "nul" input_player14_left_axis = "nul" input_player14_right = "nul" input_player14_right_btn = "nul" input_player14_right_axis = "nul" input_player14_a = "nul" input_player14_a_btn = "nul" input_player14_a_axis = "nul" input_player14_x = "nul" input_player14_x_btn = "nul" input_player14_x_axis = "nul" input_player14_l = "nul" input_player14_l_btn = "nul" input_player14_l_axis = "nul" input_player14_r = "nul" input_player14_r_btn = "nul" input_player14_r_axis = "nul" input_player14_l2 = "nul" input_player14_l2_btn = "nul" input_player14_l2_axis = "nul" input_player14_r2 = "nul" input_player14_r2_btn = "nul" input_player14_r2_axis = "nul" input_player14_l3 = "nul" input_player14_l3_btn = "nul" input_player14_l3_axis = "nul" input_player14_r3 = "nul" input_player14_r3_btn = "nul" input_player14_r3_axis = "nul" input_player14_l_x_plus = "nul" input_player14_l_x_plus_btn = "nul" input_player14_l_x_plus_axis = "nul" input_player14_l_x_minus = "nul" input_player14_l_x_minus_btn = "nul" input_player14_l_x_minus_axis = "nul" input_player14_l_y_plus = "nul" input_player14_l_y_plus_btn = "nul" input_player14_l_y_plus_axis = "nul" input_player14_l_y_minus = "nul" input_player14_l_y_minus_btn = "nul" input_player14_l_y_minus_axis = "nul" input_player14_r_x_plus = "nul" input_player14_r_x_plus_btn = "nul" input_player14_r_x_plus_axis = "nul" input_player14_r_x_minus = "nul" input_player14_r_x_minus_btn = "nul" input_player14_r_x_minus_axis = "nul" input_player14_r_y_plus = "nul" input_player14_r_y_plus_btn = "nul" input_player14_r_y_plus_axis = "nul" input_player14_r_y_minus = "nul" input_player14_r_y_minus_btn = "nul" input_player14_r_y_minus_axis = "nul" input_player14_turbo = "nul" input_player14_turbo_btn = "nul" input_player14_turbo_axis = "nul" input_player15_b = "nul" input_player15_b_btn = "nul" input_player15_b_axis = "nul" input_player15_y = "nul" input_player15_y_btn = "nul" input_player15_y_axis = "nul" input_player15_select = "nul" input_player15_select_btn = "nul" input_player15_select_axis = "nul" input_player15_start = "nul" input_player15_start_btn = "nul" input_player15_start_axis = "nul" input_player15_up = "nul" input_player15_up_btn = "nul" input_player15_up_axis = "nul" input_player15_down = "nul" input_player15_down_btn = "nul" input_player15_down_axis = "nul" input_player15_left = "nul" input_player15_left_btn = "nul" input_player15_left_axis = "nul" input_player15_right = "nul" input_player15_right_btn = "nul" input_player15_right_axis = "nul" input_player15_a = "nul" input_player15_a_btn = "nul" input_player15_a_axis = "nul" input_player15_x = "nul" input_player15_x_btn = "nul" input_player15_x_axis = "nul" input_player15_l = "nul" input_player15_l_btn = "nul" input_player15_l_axis = "nul" input_player15_r = "nul" input_player15_r_btn = "nul" input_player15_r_axis = "nul" input_player15_l2 = "nul" input_player15_l2_btn = "nul" input_player15_l2_axis = "nul" input_player15_r2 = "nul" input_player15_r2_btn = "nul" input_player15_r2_axis = "nul" input_player15_l3 = "nul" input_player15_l3_btn = "nul" input_player15_l3_axis = "nul" input_player15_r3 = "nul" input_player15_r3_btn = "nul" input_player15_r3_axis = "nul" input_player15_l_x_plus = "nul" input_player15_l_x_plus_btn = "nul" input_player15_l_x_plus_axis = "nul" input_player15_l_x_minus = "nul" input_player15_l_x_minus_btn = "nul" input_player15_l_x_minus_axis = "nul" input_player15_l_y_plus = "nul" input_player15_l_y_plus_btn = "nul" input_player15_l_y_plus_axis = "nul" input_player15_l_y_minus = "nul" input_player15_l_y_minus_btn = "nul" input_player15_l_y_minus_axis = "nul" input_player15_r_x_plus = "nul" input_player15_r_x_plus_btn = "nul" input_player15_r_x_plus_axis = "nul" input_player15_r_x_minus = "nul" input_player15_r_x_minus_btn = "nul" input_player15_r_x_minus_axis = "nul" input_player15_r_y_plus = "nul" input_player15_r_y_plus_btn = "nul" input_player15_r_y_plus_axis = "nul" input_player15_r_y_minus = "nul" input_player15_r_y_minus_btn = "nul" input_player15_r_y_minus_axis = "nul" input_player15_turbo = "nul" input_player15_turbo_btn = "nul" input_player15_turbo_axis = "nul" input_player16_b = "nul" input_player16_b_btn = "nul" input_player16_b_axis = "nul" input_player16_y = "nul" input_player16_y_btn = "nul" input_player16_y_axis = "nul" input_player16_select = "nul" input_player16_select_btn = "nul" input_player16_select_axis = "nul" input_player16_start = "nul" input_player16_start_btn = "nul" input_player16_start_axis = "nul" input_player16_up = "nul" input_player16_up_btn = "nul" input_player16_up_axis = "nul" input_player16_down = "nul" input_player16_down_btn = "nul" input_player16_down_axis = "nul" input_player16_left = "nul" input_player16_left_btn = "nul" input_player16_left_axis = "nul" input_player16_right = "nul" input_player16_right_btn = "nul" input_player16_right_axis = "nul" input_player16_a = "nul" input_player16_a_btn = "nul" input_player16_a_axis = "nul" input_player16_x = "nul" input_player16_x_btn = "nul" input_player16_x_axis = "nul" input_player16_l = "nul" input_player16_l_btn = "nul" input_player16_l_axis = "nul" input_player16_r = "nul" input_player16_r_btn = "nul" input_player16_r_axis = "nul" input_player16_l2 = "nul" input_player16_l2_btn = "nul" input_player16_l2_axis = "nul" input_player16_r2 = "nul" input_player16_r2_btn = "nul" input_player16_r2_axis = "nul" input_player16_l3 = "nul" input_player16_l3_btn = "nul" input_player16_l3_axis = "nul" input_player16_r3 = "nul" input_player16_r3_btn = "nul" input_player16_r3_axis = "nul" input_player16_l_x_plus = "nul" input_player16_l_x_plus_btn = "nul" input_player16_l_x_plus_axis = "nul" input_player16_l_x_minus = "nul" input_player16_l_x_minus_btn = "nul" input_player16_l_x_minus_axis = "nul" input_player16_l_y_plus = "nul" input_player16_l_y_plus_btn = "nul" input_player16_l_y_plus_axis = "nul" input_player16_l_y_minus = "nul" input_player16_l_y_minus_btn = "nul" input_player16_l_y_minus_axis = "nul" input_player16_r_x_plus = "nul" input_player16_r_x_plus_btn = "nul" input_player16_r_x_plus_axis = "nul" input_player16_r_x_minus = "nul" input_player16_r_x_minus_btn = "nul" input_player16_r_x_minus_axis = "nul" input_player16_r_y_plus = "nul" input_player16_r_y_plus_btn = "nul" input_player16_r_y_plus_axis = "nul" input_player16_r_y_minus = "nul" input_player16_r_y_minus_btn = "nul" input_player16_r_y_minus_axis = "nul" input_player16_turbo = "nul" input_player16_turbo_btn = "nul" input_player16_turbo_axis = "nul" core_specific_config = "false" libretro_log_level = "0" log_verbosity = "false" perfcnt_enable = "false" archive_mode = "0"
Wie ihr seht, gibt es nicht nur Controller-Einstellung in der retroarch.cfg. Alle Möglichkeiten zu erklären würde den Rahmen sprengen, ich überlasse es daher eurem Forscherdrang, den Schaltern auf den Grund zugehen.
Ihr könnt übrigens auch einige der Sondertasten direkt mit retroarch-joyconfig zuweisen! Dazu müsst ihr nur den Parameter -M für viele oder -m für wenige Sondertasten mit angeben, also z. B. sudo ./retroarch-joyconfig -o player1.cfg -p 1 -j 0 -t 5 -M. Wie oben angedeutet, gibt es retroarch-joyconfig ab dem Image 3.3 nicht mehr!
Ich habe vorhin erwähnt, dass die Werte aus der retroarch.cfg im Verzeichnis /opt/retropie/configs/all immer dann genommen werden, wenn für den jeweiligen Emulator keine eigenen Werte vorliegen. Ihr braucht nur mit cd .. aus dem all-Verzeichnis eine Ebene zurückgehen. Dort findet ihr dann unter /opt/retropie/configs eigene Unterordner für die unterschiedlichen RetroArch-Systeme.
Ihr könnt mittlerweile auf diese Ordner auch direkt übers Netzwerk zugreifen. Schaut einfach in das \\retropie\configs-Verzeichnis.
Möchtet ihr z. B. den NES-Emulator lieber mit GUIDE + Y verlassen, dann reicht es im nes-Verzeichnis in die dort befindliche retroarch.cfg die Zeile
input_exit_emulator_btn = "3"
aufzunehmen.
Beachtet dabei bitte den Hinweis am Anfang der Datei:
# Settings made here will only override settings in the global retroarch.cfg if placed above the #include line
Die Übersteuerungen müssen also vor #include „/opt/retropie/configs/all/retroarch.cfg“ stehen!
Sollte es keine retroarch.cfg geben, legt einfach eine an. Alle anderen Einstellungen kommen aus der retroarch.cfg im all-Verzeichnis, nur die Taste zum Verlassen wurde übersteuert.
Beim XBox-Pad das Blinken verhindern
Achtung: Seit dem Image 4.0 leuchtet bereits direkt nur noch die passende LED, es ist nicht mehr notwendig dies manuell zu ändern. Möchtet ihr trotzdem wissen, wie es gemacht wurde, findet ihr die Infos im archivierten Vorläufer, dieses Beitrages.
Jetzt müsst ihr noch, wie eingangs erwähnt, den Controller erneut konfigurieren. Richtet ihn nochmal in der EmulationStation ein und geht dann ggf. in die RGUI, um die Controller erneut für RetroArch zu konfigurieren.
Ich hoffe ihr konntet nun eure Controller einrichten und habt ein paar neue Anregungen, was sich alles einstellen läßt, bekommen.
Hallo Jörn,
ich hoffe hier doch noch mein Problem zu lösen.
Allerdings geht es um einen retropie.
Ich musste leider alles neu installieren und jetzt habe ich offenbar ein anderes Retroarch.
Es geht darum, Spiele mit vier Spielern zu spielen und dazu hatte ich bei meinem alten System unter Retroarch bei user 2 den controller auf “multitab” gestellt. Diese multitab-option gibt es jetzt nicht mehr. Ich habe alles versucht, drei mal die daten neu auf die sd-Karte geschrieben und in unterschiedlichen Reihenfolgen Updates, Reinstalls usw. gemacht..
Leider habe ich auf der PC-Festplatte auch nicht genug Platz, sonst hätte ich ein Backup gehabt…
Viele grüße
Jan
Moin Jan,
wirklich helfen kann ich dir leider nicht mehr, bin vollkommen aus dem Thema raus.
Hast du mal ein Multitap-Spiel geladen und dann in die Optionen geschaut?
Sonst könntest du wohl nur nach einem alten Image im Netz suchen, das installieren und nicht updaten.
Super Tutorial. Ohne das wäre ich nicht weiter gekommen.
Habe ein Problem mit MAME-2003.
Vielleicht hast ja dazu auch Rat.
Die Konfig der 2 Joysticks und Knöpfe am Bartop hat wunderbar geklappt.
Es werden beide Controller erkannt und funktionieren auch.
Wenn ich allerdings ein Game (zBsp Pengo oder Xevious) für 2 Spieler starte, wird der Input immer vom Controller 1 geholt. Spieler 2 muss also dann auch auf dem Controller 1 spielen.
Wo kann ich das richtig konfigurieren?
Sorry, aber ich bin da seit Jahren nicht mehr im Thema und kann dir leider keinen Tipp geben.
Ok danke. Problem hat sich erledigt.
Das ist ROM abhängig und kann in der MAME Konfig des betr. ROMs eingestellt werden.
Wenn man das auf “Cocktail” stellt, wird der 2te Joystick verwendet. Das Bild steht aber dann Kopf bei Spieler 2 🙁
Aber eigentlich logisch, bei einem Spieltisch.
Moin Moin, hoffe hier kann mir mit meinem Retropie geholfen werden. Es geht um den n64 emulator und dem Spiel Mario Kart 64. Zwei Ps4 controllern die per USB angeschlossen sind.
Ich möchte das Spiel gern zu zweit spiele nur leider wird der zweite Controller im Spiel als Nr. 3 erkannt!
Wenn ich das Spiel für 3 Personen starte kann ich für Player 1 und Player 3 die entsprechenden Figuren
auswählen. Wenn ich für 2 Personen starte geht nur die Auswahl für Player 1. Das zweite Pad kann keine auswahl treffen.
Irgendwie muss ich den zweiten PS4 Controller von Player 3 auf 2 ändern können….
Hab schon alle USB Ports ausprobiert und die mupen64plus.cfg versucht anzupassen nur leider wird die .cfg nach neustart der Pi wieder zurückgesetzt!
Hier einmal die beschreibung wie ich die mupen64plus.cfg angepasst habe.
I struggled with this same thing for a time, RetroPie is consuming the motion control as a secondary device, Libretro is able to ignore this but Mupen64Plus does not for whatever reason and lr-Mupen is trash. Standard LibRetro options/config does not effect the Mupen64Plus emulator. Assuming you still need a fix, here’s what ended up working for me.
all from terminal, I putty’d in to make my changes.
Make a copy of the config file you’re going to edit:
sudo cp /opt/retropie/configs/n64/mupen64plus.cfg /opt/retropie/configs/n64/mupen64plusold.cfg
Edit the original:
sudo nano /opt/retropie/configs/n64/mupen64plus.cfg
Scroll until you find
[Input-SDL-Control1]
Take a note of what you see here, this is a good control config, note that the name is “Wireless Controller” or the like.
I changed the Second Line; Controller Configuration mode from mode = 2 to mode = 1
Scrolling down, you’ll find :
[Input-SDL-Control2], Note the name of the device of the device is “Wireless Controller Motion Sensors”
This is no good to us, I commented out the entire Controller “using #” including the header.
[Input-SDL-Control3], is the 2nd Controller, name should reflect similar to Control1, I renamed the header to [Input-SDL-Control2] , changed the controller configuration mode to 1, same as in the first controlset and left the rest of that item alone.
[Input-SDL-Control4], I commented out in the same way as the first [Input-SDL-Control2], as it’s showing “Wireless Controller Motion Sensors” in the name.
Ctrl-O to save
Ctrl-X to exit
Sudo Reboot, reboots the device and your MarioKart64 should work just fine.
Servus zusammen,
ich habe 6 Controller (verschiedene Controller – keine Original-Controller sondern NoName-Nachbau) angeschlossen.
2x XBOX, 2x SNES, 2x N64.
Nun möchte ich natürlich die jeweiligen Spiele mit den jeweiligen Controllern spielen.
Habe alle 6 Controller gut durchkonfigurieren können.
Nun habe ich folgendes Problem:
Bei den SNES-Spielen ist der erste Controller der SNES-Controller un der zweite der XBOX-Controller.
Bei den anderen Konsolen passt es auch nicht.
Gibt es eine Möglichkeit die Controller der jeweiligen Konsole zuzuweisen?
Ich habe auch probiert nur die jeweiligen anzuschließen die ich gerade benötige – da es aber No-Name-Produkte sind funktioniert die Auto-Konfiguration anscheinend nicht richtig (Tasten sind falsch belegt – ich müsste bei jedem Controller wieder bevor ich spiele die Tasten durchkonfigurieren…)
Gruß Stephan
Du kannst in Retroarch für jede Konsole den Player 1,2,3,4 manuell verändern. So kannst du einstellen dass bei SNES der Player zwei dann der Controller ist, den du eigentlich als Controller 4 eingerichet hast
Moin, da habt Ihr Euch viel Mühe gemacht.
Hilft echt weiter.
Allerdings habe ich auch ein Problem dessen Lösung ich hier leider nicht gefunden habe.
Ich habe einen Paspi 3, 2 Stck. XSource Controller mit je insgesamt 10 Tasten und einem Joystick. Das aktuelle Retropie Image installiert, die Einstellungen “eingedeutscht” und versucht die Controller zu aktivieren. Die werden erkannt, alle Einstellungen werden angenommen bis zum Punkt “OK” funktioniert das alles wunderbar.
An der Stelle geht’s leider nicht weiter.
Ich kann “OK” nicht auslösen, auch nicht mit der angeschlossenen Tastatur. Wahrscheinlich bin ich einfach nur zu blöd. Vielleicht habt ihr ja einen Tipp für mich.
ADMIN: Post von der Startseite hier her verschoben.
ich kenne das aktuelle Image nicht, da ich nichts mehr mit RetroPie mache.
Aber evtl. findet sich jemand, der deine Frage beantworten kann.
Hi,
Erstmal ein dickes Danke für die Erklärungen.
Ich habe allerdings eine Frage/Problem. Vielleicht kann mir die Community ja weiterhelfen?!
Ich möchte 2 WII U Pro Controller benutzen. Ich habe an meinem Pie beide Controller via Bluetooth verbunden und configuriert. Allerdings werden beide Controller als Master erkannt. Im Spiel selbst funktioniert nur ein Controller. Wie bekomme ich das konfiguriert, dass beide Controller benutzt werden können? Geht das überhaupt via Bluetooth? Im Bluetooth Menü werden beide angezeigt, dass die verbunden sind.
Über Hilfe von euch freue ich mich sehr!
Mit freundlichen Grüßen
Speedyconzale
Ich bräuchte bitte Hilfe.
Gibt es eine Möglichkeit, in Vice (Retropie) das D-Pad statt die Sticks zu benutzen? Ich scheitere bei der Konfiguration und finde auch sonst nix Internet.
Hi Jörn,
als allererstes mal fettes Merci für deine ausführlichen Tutorials, haben mir schon oft weitergeholfen!
Mittlerweile (nach einigen malen neu aufsetzen und rumbasteln) verstehe ich immer besser die Zusammenhänge innerhalb von Retropie und durch die Updates wird die Bedienung ja auch immer komfortabler.
Doch nun zu meinem Problem:
Bei der N64-Emulation nutze ich aufgrund der speziellen Konstruktion des N64-Joypads (insbesondere des Z- und der C-Buttons) anstelle eines Xbox- oder PS3-Controllers am liebsten meine originalen N64-Pads in Verbindung mit diesem USB-Adapter:
http://www.myxl-shop.de/j-s-2-n64-controller-adapter.html?id=56348210&gclid=CPLh9vSC_tECFXEo0wodh6cIPw
(Hersteller HuiJia?)
Bisher habe ich den Mupen64-Standalone-Emulator genutzt und das hat auch mit ein bisschen Nachbessern in der InputAutoCfg ganz gut funktioniert. Mit etwas Feinschliff an Analog-Deadzone und –Peak lief auch der Analog-Stick wunschgemäß.
Seit dem aktuellen Image 4.1 gibt es ja einen neuen Libretro-Emulator für das N64. Bisherigen Erfahrungsberichten zu urteilen liefert der wohl eine ganz gute Performance. Außerdem kann man damit ja auch die Retroarch-Einstellungen nutzen. Daher würde ich ihn nun auch gerne austesten und, falls er läuft wie erhofft, gerne zum Standard-Emulator machen.
Allerdings wird der Analog-Stick meines N64-Joypads unter Libretro/Retroarch nicht erkannt. Bereits bei der Einrichtung in der EmulationStation spricht das System auf den Stick nicht an, was mir ehrlich gesagt ein Rätsel ist, da wie oben beschrieben der Standalone ihn ja problemlos erkennt. So gesehen ist es ja dann auch ein systemübergreifendes Problem.
Hast du da eine Lösung für einen Programmier-Laien wie mich parat?
Schade, dass das N64 (nach wie vor) das große Sorgenkind von Retropie ist…;/
da ich den Adapter nicht kenne, kann ich dir nicht direkt weiterhelfen.
Als erstes wäre zu klären, wie die Pads über den Adapter ins System eingebunden werden. Hast du schon mal
jstest
verwendet, um die Pads zu untersuchen?Mit
ls /dev/input
kannst du nachschauen, welche Joysticks im System sind (beginnen mitjs..
) und dann mitjstest /dev/input/js0
(oderjs1
usw.) diese testen.Hier mein Ergebnis:
ls /dev/input
by-id by-path event0 event1 event2 event3 event4 event5 js0 js1 mice
jstest /dev/input/js0
Driver version is 2.1.0.
Joystick (HuiJia USB GamePad) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
and 16 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6, BtnDead, BtnA, BtnB, BtnC).
Testing … (interrupt to exit)
Axes: 0: 0 1: 0 2:-32767 3:-32767 4: 0 5: 0
Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off 15:off
jstest /dev/input/js1
Driver version is 2.1.0.
Joystick (HuiJia USB GamePad) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
and 16 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6, BtnDead, BtnA, BtnB, BtnC).
Testing … (interrupt to exit)
Axes: 0:-32767 1:-32767 2:-32767 3:-32767 4: 0 5: 0
Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off 15:off
Es sei dazu erwähnt, dass ich beim Zeitpunkt des Tests nur einen Controller angeschlossen hab.
Ich habe im Anschluss einen weiteren Controller in die zweite Buchse gesteckt und den Test bei js0 nochmals gefahren. Er lieferte mir dann ebenfalls das Ergebnis wie vorher nur bei js1:
Axes: 0:-32767 1:-32767 2:-32767 3:-32767 4: 0 5: 0
jstest /dev/input/js0
funktionieren. Also Programm starten und kontrollieren, ob sich die Anzeige beim betätigen der Tasten / Sticks ändert.hallo,
habe versucht laut deiner anleitung zur config der gamepads unter retroarch vorzugehen.
Hat auch alles funktioniert, aber nach beenden von retroarch funktioniert kein gamepad mehr auch nicht die tastatur?
Es sind zwei usb snes fake controller, habe die prozedur mehrmals wiederholt und auch auf die speicheroption geachtet.
Die option mit der bearbeitung der retroarch.cfg datei hab ich noch nicht verstanden, da sind unzählige inputs drin.
Auch nur ein gamepad zu benutzen funktioniert nicht, nach der controller config in emustation kann ich durch die emus scrollen und ein rom auswählen sobald ein spiel gestartet ist funktioniert nichts mehr….
bitte um hilfe
ich würde ein Backup der SD-Karte machen und dann nochmal alles frisch installieren. Dabei solltest du vorerst auf sämtliche Updates verzichten.
Dann nur einen Controller über die EmulationStation einrichten -> läuft dieser dann mit RetroArch?
Falls ja, als nächstes die beiden Controller, wie beschrieben, über RetroArch einrichten -> gehen sie es jetzt?
Falls ja gut, dann könntest du die Updates holen und schauen ob danach immer noch alles läuft.
Falls nein, müsste man weiterschauen.
Thank you thank you this made it so easy.
Hey, erstmal danke für deine Arbeit, sie hat an vielen Stellen geholfen. Eine Frage hab ich noch, ich hoffe sie wurde nicht schon gestellt zumindest habe ich sie nicht gesehen. Ist es möglich 2 Tasten Mit der selben Funktion zu belegen? Ich hab an meinem Bartop aussen 2 Tasten zum flippren und die sollen zusätzlich zu den “normalen“ Tasten mit a,b belegt werden. Ich habe bisher versucht in der config einfach beide Tasten, durch ein Komma getrennt, anzugeben. Aber dies hat nicht funktioniert.
Hast du eine Idee?
das wüsste ich jetzt auch nicht. Aber warum schaltest du die zusätzlichen Buttons nicht einfach parallel zu den „normalen“ A- und B-Tasten?
Verdammt, auf die Idee kam ich gar nicht. 😀 hat bestens geklappt, danke !
Erstmal danke für deine Anleitungen, bei mir läuft jetzt fast alles so wie ich es haben möchte. Allerdings funktioniert das Konfigurieren des PS3-Controllers für den N64 Emulator nicht richtig. Kann es sein, dass die Einstellungen im RetroArch nicht für den N64 Emulator übernommen werden, denn beim NES und SNES scheint alles zu funktionieren. Bin mir auch nicht sicher wie ich die gelben pfeiltasten Konfigurieren soll. Ich wollte diese eigentlich auf den rechten analogstick vom PS3-Controller legen. Zusätztlich habe ich jetzt so viel herumprobiert, dass die Hotkeys (Select+Start) um das Spiel zu verlassen nicht mehr funktionieren beim N64 Emulator beim NES und SNES aber läuft es ohne Probleme.
Hi,
Ich bin am verzweifeln.
Ich bringe meinen Wii U Pro Controller einfach nicht zum laufen.
I RetroPie Setup hab ich aufgegeben. Hab übers Terminal (bluetoothctl) den controller pairen und verbinden können. Aber ich kann nichts damit tun. Weder nach dem manuellen verbinden erneut eine verbindung aufbauen noch den controller configurieren.
Jemand Tipps für mich? Pi 2 Model B, RetroPie 4.0.2
da ich keinen Wii U Controller besitze, kann ich leider nichts weiter dazu sagen.
Ich nehme an, den Eintrag in der RetroPie-Wiki zum Wii U Pro Controller kennst du schon.
Hallo,
was kann ich machen wenn mein Playstation1 Controller nicht gefunden wird?
Ich habe das Teil über diesen Adapter mit USB verbunden ->
CSL – Gamepad Adapter/Konverter | PS2 Controller zu USB Controller am PC / MAC | Neues Modell
von Amazon.
https://www.amazon.de/gp/product/B00BN5DRRO/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1
(soll keine Werbung sein = sonst schmeiß die Bez. + Link raus)
Habe es eben am win7 PC getestet – funktionieren tut der Controller und auch der Adapter.
Aber unter RetroPi wird er nicht erkannt.
Habe dort schon 10sec einen Knopf (verschiedene mehrmals) gedrückt.
Aber es passiert nix 🙁
Was kann ich tun, damit meine Playstation 1 Controller erkannt werden?
Vielen Dank & viele Grüße
habe mittlerweile herausgefunden, dass jstest die beiden Controller erkennt – also unter /dev/input werden zwei devices gelistet js0 und js1 – versuche ich diese zu testen kommen keine Signale an – egal ob auf analog oder nicht 🙁
Ich habe leider keinen aktiven USB-Hub da – aber könnte es evtl. daran liegen, dass der Adapter zu wenig Strom über den USB Port bekommt? An der win7 Kiste funktioniert er ja 🙁
Vielen Dank & viele Grüße
da ich den Adapter nicht kenne, kann ich dazu leider nichts sagen.
Falls du einen aktuellen Pi3 hast, sollte der Stromverbrauch eigentlich keine Rolle spielen. Dort steht schon mehr Leistung, als bei den alten Modellen zur Verfügung.
Da der beim Image 3.8.1 vorhandene Raspbian-Kernal Probleme mit dem XBox-Treiber hat, könnte hier evtl. auch ein ähnliches Problem vorliegen. Vielleicht wäre ein Test mit einem älteren Image oder der aktuellen 4.0 Beta hilfreich. Um Seiteneffekte auszuschließen, könntest du beim Test auch mal alle anderen USB-Geräte abziehen.
Hallo Jörn,
vielen Dank für Deine Antwort.
Ich habe nun “etwas” im Internet gesucht 🙁 schwieriges Thema…
Habe folgendes herausgefunden:
root@retropie:/# dmesg | grep Joystick
[ 2.895329] usb 1-1.4: Product: Twin USB Joystick
[ 3.927414] input: Twin USB Joystick as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/0003:0810:0001.0001/input/input2
[ 3.927819] input: Twin USB Joystick as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/0003:0810:0001.0001/input/input3
[ 3.933507] pantherlord 0003:0810:0001.0001: input,hidraw2: USB HID v1.10 Joystick [Twin USB Joystick] on usb-3f980000.usb-1.4/input0
ich glaube irgendwie, dass das richtige Modul noch nicht geladen ist – der pantherlord wird erkannt und auch hidraw. Dazu habe ich nun viel gelesen aber verstehe noch nicht so ganz was mir fehlt – wie gesagt vermute ich ein modul … nur welches 🙂
Vielen Dank & viele Grüße
Mist – mein lsmod vergessen 🙁
root@retropie:/# lsmod
Module Size Used by
binfmt_misc 6388 1
hidp 13546 2
bnep 10340 0
hci_uart 17943 1
btbcm 5929 1 hci_uart
bluetooth 326105 9 bnep,hidp,btbcm,hci_uart
brcmfmac 186343 0
brcmutil 5661 1 brcmfmac
cfg80211 427855 1 brcmfmac
rfkill 16037 3 cfg80211,bluetooth
evdev 11396 12
snd_bcm2835 20511 2
joydev 9024 0
snd_pcm 75698 2 snd_bcm2835
snd_timer 19160 1 snd_pcm
bcm2835_gpiomem 3040 0
snd 51844 6 snd_bcm2835,snd_timer,snd_pcm
bcm2835_wdt 3225 0
hid_pl 1230 0
uio_pdrv_genirq 3164 0
uio 8000 1 uio_pdrv_genirq
uinput 7454 2
fuse 83461 1
ipv6 347530 34
Hallo, ich verzweifle im Moment ein wenig…
– In der config Datei im Unterordner /fba ändere ich zwei Buttons.
– ich starte die emu station und anschließen den Emulator final burn alpha
– alles läuft wie es soll -TOP! 🙂
– Beende ich nun das Spiel und starte es direkt neu
=> sind die alten Einstellungen plötzlich wieder aktiv und ein Blick die veränderte config Datei zeigt mir das er scheinbar sie wieder überschrieben hat…. Hast Du eine Idee wo diese Automatik steckt, dass er meine Einstellungen wieder überschreibt?
Achso, ich mach diese Einstellungen vor dem #include…. Beim ersten start geht es ja auch :-/
grüße
Hey, super TUT aber ich hab echt meine Probleme mit dem Einrichten der Controller. Ich hab meine Tastertur angeschlossen, aber wenn ich die abziehen, kann ich Retroarch nicht mehr mit dem PS3 Controller steuern. Ich stell dann wieder per Tastertur meinen Controller auf Port #1 bzw den 1. Spieler und alles klappt. Mit anderen Worten, jedesmal wenn ich die Tastertur neu einstecke, ändern sich der Port für den PS3 Controller!?
Moin Jörn,
Ich suche ein Script mit dem ich die ID der 360er Pads abfragen kann um über die GPIO Pins je eine Led pro aktiver ID aktivieren kann. Also Pad1 an, Led an PinXX an. Pad1 aus,Led an PinXX aus.
Was ich bisher nur hinbekommen habe ist das komplette umleiten der Padeingaben an die Pins,nicht aber einfach die Abfrage. Ne Idee oder ein neuer Denkanstoß würde mich vielleicht ein wenig voran bringen.
Danke, Gruß Lallek
aber das ist jetzt so überhaupt nicht meine Baustelle, keine Ahnung.
Schade. Trotzdem Danke.
Hallo zusammen,
hab mir den PIGRRL 2 mit Retrope 3.7 zusammengebaut und installiert. Leider bekomme ich das Gamepad PCB von Adafruit nicht zum laufen.
Hat jemand evtl. eine Idee wie ich das teil konfigurieren muss.
Gruß
Lars
Hallo Zusammen,
ich habe immer noch Probleme mit dem Einrichten der COntroller.
Zwischenzeitlich habe ich herausgefunden woran es liegt und zwar muss ich folgenedes tun.
Der Controller von Player 1 muss so angesprochen werden:
“sudo ./retroarch-joyconfig -o player1.cfg -p 1 -j 0 -t 5”
Player 2 wird so angesprochen:
“sudo ./retroarch-joyconfig -o player2.cfg -p 2 -j 1 -t 5”
muss aber so angesprochen werden:
“sudo ./retroarch-joyconfig -o player2.cfg -p 2 -j 1 -t 5”
Mein Problem an der ganzen Sache ist, dass es seit Version 3.3 keinen “retroch-joyconfig” mehr gibt.
“—-Wie oben angedeutet, gibt es retroarch-joyconfig ab dem Image 3.3 nicht mehr!—-”
Wie kann ich nun auf die player.cfg zugreifen um die oben erwähnteänderung durchzuführen?!?
Vielen Dank im voraus
nicht angezeigt oder warum postest du den gleichen Beitrag nach vier Stunden nochmal?
Den ersten habe ich gelöscht!
Achse ich hatte Internet Probleme und dachte der Kommentar wurde gar nicht abgeschickt.
Danke und danke im voraus für eine Hilfestellung
retroarch-joyconfig
von einem älteren Image zu holen (z. B. V3.2.1). Dann kannst du alles, so wie du es gewohnt bist einrichten.EDIT: Ich habe den Post etwas überarbeitet. Es geht auch nur über die RGUI, also ganz ohne manuelle Änderung an der
retroarch.cfg
!Es müsste aber, mit einem kleinen Kniff, auch über die
RGUI
gehen (die für die EmulationStation eingerichtete Tastatur wird benötigt):RGUI
User 1 Device Index
aufDisabled
Input User 2 Binds
ausInput User 1 Binds
User 1 Device Index
, stattDisabled
, wieder den richtigen Controller ausJetzt sollten die Controller funktionieren.
Ich habe so einen XBox360-Controller für Spieler 1 (D-Pad, A, B, SELECT & START) und Spieler 2 (der verwendet für die selben Funktionen den rechten Analogstick, X, Y, LB & RB) eingerichtet. Das hat problemlos funktioniert.
sorry aber dein Tipp (2. Tipp) Hlft nicht. also ich weiß auch nicht recht was es bewirken soll. Das Problem mit Retropie und den Sticks ist, dass die Steuerungsaxen für beide Sticks in Retropie gleich erkannt werden:
up D-Pad = -1
down D-Pad= +1
left D-Pad= -0
right D-Pad= +0
das gleche auch für Player 2…die Knöpfe sind aber alle einzig, fangen bei 1 an und geen bis 18…
verzweifel langsam
Wo ist der Unterschied in den beiden „sudo ./retro…“-Zeilen?
Meine Antwort zielte darauf ab, dass beide Joysticks als einer vom System erkannt werden, ich dachte, du wolltest oben in der zweiten Zeile
-j 0
schreiben.Aber wie heißt es doch so schön:
Der Anfang jeder Katastrophe ist eine beschissene Vermutung. 😉
Kp sorry sollte auch j0 heißen das hatte ich so anders gelesen. Wenn ich die Controller direkt in retroarch einrichte (direkt nach d neuen aufsetzen ) dann steht bei beiden hinter dem Device Name “Xin-Mo arcadestick (#0)”. Dann funktionieren die sticks aber gar nicht. Wenn ich die dann über retropie input konfigurieren dann werden die erkannt und mit “Xin-Mo arcadestick (#1)” angezeigt. Aber wie dem auch sei der 2.Player ist auch immer “… (#1)” und die ich Steuer Player 1 und 2 beide gleichzeitig.
Eigentlich macht mein RGUI-Vorschlag nichts anderes. Er richtet zwei Spieler für
-j 0
(oder welchen Index man auch immer nimmt) ein.Sei es drum, wenn es „früher“ mit
retroarch-joyconfig
funktioniert hat, dann solltest du es erstmal wieder damit probieren (musst es dir halt von einem alten Image kopieren).Ansonsten bin ich raus aus der Nummer, mehr fällt mir dann auch nicht ein.
Also kp ob das funktioniert. ich habe aus einem anderen Forum gelesen, dass es jemand so gemachthat. Das komische ist ja das es irgendwie keinen Sinn macht, da meine Sticks ja beide auf dem selben Index sind…=!?!
Schade! Dass du das bisher noch nie hinbekommen hast, lese ich so nicht aus deinen bisherigen Postings. Hätte mir einiges an Arbeit erspart.
Nett wie ich bin, habe ich aber einmal nach deinem dubiosen Controller gegoogelt und wundere mich nicht, dass du Probleme hast.
Das Teil zickt seit Jahren auf dem Pi rum, Windows scheint kein Problem zu sein. Mal gehen Buttons nicht, dann muss man manuell das Kernal patchen, usw. Dass er sich als ein Controller im System meldet scheint auch relativ normal zu sein, aber nirgends findet sich ein Hinweis, dass beide Spieler die selben Achsen verwenden. Das darf auch nicht sein, sonst kann man die Einrichtung vergessen. Ich lese in verschiedenen Foren immer etwas von vier Achsen, was auch richtig ist.
Dann funktioniert die Einrichtung (auch beim Verwendung des selben Joystickindex) genau so, wie ich es beschrieben habe.
Deine Aufgabe ist es jetzt also zu untersuchen, was mit deinem Controller nicht stimmt! Dabei kann ich dir aber nicht großartik weiterhelfen.
Du kannst im Terminal mal
ls /dev/input
eingeben. Dann werden alle Eingabegeräte aufgelistet. Dort sollte u. a. einjs0
erscheinen, wenn der Controller nur als ein Joystick im System bekannt ist (sonst gibt es auch einjs1
). Teste ihn mal mitjstest /dev/input/js0
, dann siehst du alle Button und Achsen. Sind dort vier Achsen? Ändern sich wirklich immer die beiden selben Achsen, egal ob man den Stick von Spieler 1 oder 2 bewegt?Wenn es keine vier Achsen gibt oder sich wirklich immer nur zwei davon ändern, dann solltest du mal deine Verkabelung kontrollieren und das Teil unter Windows testen.
Hey auf ein enues, da bislang keiner mit Helfen konnte. Ich habe mir einen Arcadeautomat gebaut und das ist mein Problem:
Ich habe zwei Arcadesticks (beide werden über einem Controller per USB angeschlossen), aber bei dem Einstellen des 2. Players komme ich nicht weiter.
Zunächst wird mir bei “User 2 Device Index” ebenfalls der „Xin-Mo Xin-Mo Dual Arcade(#1)“ angezeigt (Xin-Mo Xin-Mo scheint der Name der Sticks zu sein). Ich denke mal er müsste hier nicht (#1) sondern (#2) anzeigen…
Wie vermutet war es im Spiel auch sehr merkwürdig.
Also sämtliche Knöpfe (von beiden Playern) funktionieren (auch getrennt). Aber die Bewegungen (oben, unten, rechts, links) durch die Sticks sind einfach identisch zum Player1, sprich wenn ich „nach oben“ steuere springen beide Figuren wenn ich „nach unten“ drücke ducken sich beide egal ob an dem Stick von Player1 oder von Player2, beide Sticks bewegen beide Figuren. Aber nochmal die Aktionsbuttons (A, B, X, Y, R, L) sind getrennt und funktionieren einwandfrei.
Ich bin echt verzweifelt und komme nicht weiter…Hoffe auf einen guten Tipp. Hab die Sticks nicht manuell eingerichtet sondern über CONFIGURE RETROARCH / LAUNCH RETROARCH RGUI dann Input eingestellt.
Vielen Dank
EDIT: Den nicht mal fünf Stunden vorher abgeschickten und fast identischen Post, habe ich gelöscht! Ich denke nicht, dass es notwendig ist, eine Frage gleich mehrfach zu posten!
sorry wolte den eigentlich updaten ist dann doppelt geworden.
Niemand aber eine Idee oder Tipp?!?
Hatte das selbe Problem. Anscheinend sind die Treiber im Aktuellen Retropie gepustet worden. Mit der Anleitung unten werden zwei separate Joystick eingerichtet und das Problem mit den Axen ist vorbei:
Making RetroPie identify 2 players instead of one with the Xin-Mo
Add the following to /boot/cmdline.txt (just add a space to the existing entry so its all on one line)
usbhid.quirks=0x16c0:0x05e1:0x040
The first two numbers the vendor/product (16c0 and 05e1).
You can find your vendor/product using lsusb
Servus, Seite Gefällt mir sehr gut , bei mir ist das aber irgendwie anders leider. Hab mir von der seite http://www.powerpi.de recalboxOS 4.0.0-beta1 runtergeladen, muss aber den 1st und 2ten controller einrichten. im retropie selber geht das ohne probleme aber im spiel dann klappt das nicht . hab mir einen richtigen arcade automaten gebaut und verwende eine einfache usb tastatur die ich auseinander gebaut habe und die arcade buttons verkabelt habe . wenn ich f4 drücke wird der bildschirm schwarz. vielecht könnt ihr mir helfen .
vielen dank
da bist du wohl falsch abgebogen 😉 .
Unter RecalboxOS gibt es kein RetroPie! Das sind zwei unterschiedliche Systeme, die zwar auf den gleichen Komponenten (EmulationStation, Libretro / RetroArch, Emulatoren) basieren aber unterschiedlich eingerichtet werden. Und hier dreht sich alles um RetroPie.
Ich habe RecalboxOS nach enttäuschenden Erfahrungen erstmal wieder links liegen lassen und kann dir daher aktuell nicht weiterhelfen.
Jedem anderen steht es natürlich frei, deine Frage zu beantworten.
moin moin, habe jetzt alles gemacht, bin auch in der retroarch. nur wenn ich jetzt die tasten zuordnen möchte kommt da keine raktion also die taste wird nicht angenommen, woran kann das liegen ?? vielen dank
Hallo, bei mir ist es genauso. Mein Logitech RumblePad 2 wird zwar erkannt, aber ich habe keine Reaktion auf irgendeine Taste. Das ist im RetroPie wie auch im Retroarch Menü so. Ich kann keinen der Knöpfe belegen.
… und jetzt habe ich mal RecalboxOS installiert und dort funktioniert es sofort. Im EmuStation-Menü (mit einem etwas anderem Theme) wird der Controller namentlich erkannt (Logitech RumblePad 2) und auf Knopfdruck kann ich die Belegung einstellen, so wie auch die Tastatur als Controller. Letzteres funktioniert bei RetroPie auch.
Hallo,
Erstmal danke für deine Mühen die du hier aufbringst ohne dem würde bestimmt bei vielen nix laufen. Weisst du zufällig an was es legen kann wenn mein Xbox 360 Wireless Receiver nur noch 2 Controller annimmt? Es kommt auch das 2 Controller erkannt wurden müssten aber 4 sein.
Danke
hast du zufällig den XBox-Treiber installiert, damit die LED dauerhaft leuchtet?
Dann werden nämlich standardmäßig nur noch 2 Controller angeboten. Dies lässt sich aber über das Setup-Script ändern.
Ja genau das hab ich gemacht, kannst du mir sagen wie ich das ändere Danke 🙂
Folge einfach den obigen Schritten. Im vierten Bild findest du dann den Punkt
3 Set number of controllers to enable (currently 2)
, darüber solltest du die Anzahl ändern können.Hi Jörn,
vielen Dank für all deine bisherigen Infos auf dieser Seite – sehr hilfreich. Ich habe ein paar Anmerkungen und Fragen bezüglich des NES30 Gamepads:
Ich habe ein Skript geschrieben, welches dafür sorgt, dass sich ein oder mehrere Controller automatisch verbinden – vielleicht ist es für den Einen oder Anderen hilfreich: forum.8bitdo.com/forum.php?mod=viewthread&tid=328&page=7&extra=#pid2491
Das Skript wird 1x pro Minute via Cronjob ausgeführt und verbindet den Controller falls aktuell keine Verbindung besteht.
Komischerweise funktioniert der Keyboard-Modus (wichtig für z.B. den VICE Emulator) seit Firmware > 2.52 nicht mehr – deshalb nutze ich noch diese Version. Das hat aber nichts mit meinem Skript zu tun.
Nun meine Fragen:
1. hast du den NES30 oder FC30 Gamepad bei N64 Spielen getestet? Ich kann weder im Keyboard noch in einem anderen Modus ein vernünftiges Ergebnis erzielen. Ich kann zwar z.B. die Tasten START, A+B+R verwenden aber sie sind teilweise falsch belegt und die Richtungstasten funktionieren gar nicht. Es hieß ja eigentlich, dass sich ein N64 Emulator über die Retroarch-Config steuern lässt. Ich habe die verschiedenen N64 Emulatoren getestet aber ohne Erfolg.
2. hast du es mal geschafft, den NES30/FC30 GAmepad für VICE im Gamepad Modus (Start+R) zu konfigurieren? Ich bekomme die Steuerung nur über den Keyboard Modus sauber eingestellt. Alle anderen für mich wichtigen Emulatoren (AMIGA,NES,SNES,MEGADRIVE, MASTERSYSTEM, ATARI2600,…) lassen sich sauber über den Gamepad-Modus (START+R) betreiben.
3.
Hallo Jörn,
deine Tutorials sind super 🙂 ich konnte bisher alles zum Laufen bekommen. Allerdings habe ich ein Problem mit einem SFC30 Controller.
Controller und Bluetooth Dongle sind alle konfiguriert und funktionieren ohne Probleme. Das einzige Ärgernis ist, dass wenn ich den Controller beim Start mit dem Pi per Bluetooth verbinde, schaltet das Menü unendlich lange nach rechts. Solange, bis ich einmalig auf den Controller irgendeine Taste drücke. Eine Verbindung per USB scheint dieses Problem nicht aufzuweisen.
Dieses Verhalten tritt u.a. auch bei der Recalbox auf… Der Controller ist gerade einmal 1 Tag alt und ich hoffe nicht, dass er defekt ist…
Hast du eine Idee?
dass ist bei mir auch so. Da meine Controller am PC problemlos funktionieren, tippe ich mal auf ein Pi bzw. EmulationStation spezifisches Problem.
Eine Lösung habe ich allerdings nicht, es hat mich bisher auch nicht sonderlich gestört.
Hallo habe ein Problem beim Einrichten des Controllers.
Bei mir fehlt der Punkt “1 Configure joystick/controller for use with RetroArch”
Bei mir gibt es nur die 2 anderen Punkte.
Bei mir startet der Raspberry auch nicht neu nach “Update RetroPie-Setup Script”
Habe ihn aber manuell neu gestartet.
Hat nichts gebracht :/
da haben die Entwickler wohl einen Fehler ins Script eingebaut. Ich habe eben mal mein Script aktualisiert und nun fehlt bei mir auch der 1. Punkt, vor dem Update gab es den noch. Da hilft nur, aufs nächste Update warten oder das Image erneut einspielen und vorläufig auf die Updates verzichten.
Ich rate aber eh zu manuellen Einrichtung, folge also besser der Beschreibung.
Übrigens, nur das SCRIPT startet nach “Update RetroPie-Setup Script” neu, nicht der Pi!
Update: Es ist wohl gewollt, dass der Punkt fehlt (siehe neues Image 3.3).
Tolles Tutorial, vielen Dank!
Inzwischen läuft mein RetroPie auch sehr gut, mit einem Problem: meine Tastatur scheint keine F12 Taste zu haben. Kann ich die Funktion auf eine andere Taste legen? Gerne auch zusätzlich auf die PS-Home Taste des PS3 Controllers.
Für jeden Tipp wäre ich dankbar!
Bitte weiter so mit den tollen Artikeln.
Gerald
wo willst du denn was mit
Ich möchte die Standardfunktion von F12 anders belegen. Fast immer kommt man damit in die Konfiguration eines Emulators. So kann ich etwa bei Hatari kein TOS zuweisen, weil ich nicht in das Menü komme.
Ob man unter Linux das Tastaturlayout komplett ändern oder eine Sondersteuerung (z. B.
Hallo,
ich habe ein Problem mit dem Controller von Sega. Habe einen 6-Button Controller von Sega an einem USB Adapter. Dieser wird soweit auch erkannt. Mein Problem ist, dass ich gern Super Street Fighter 2 für den Mega Drive spielen möchte. Allerdings wird im Spiel nur ein 3-Button Pad erkannt. Wenn ich im Mainmenü von Retropie den Controller einstellen will (Controller Tasten Abfrage) wird mir nur A, B, X, Y, Start, Select und diverse Steuerkreuzfolgen angezeigt, C und Z fehlen in der Auflistung.
Hat jemand eine Lösung für mich wie das 6-Button Pad erkannt wird?
Weiß keiner eine Lösung für mich? 🙁
hast du im RetroArch-Menü das 6-Button-Pad eingestellt?
Ich habe jetzt kein Menü vor Augen, aber es sollte unter
Options -> Core Options
einen PunktInput-Device
oder so ähnlich geben. Den musst du auf 6-Button stellen.Hallo,
vielen Dank für deine super Anleitung.
Leider habe ich trotzdem noch ein Problem.
Ich habe 2 xbox360 controller nach deiner Anleitung eingerichtet. Auch mit dem xboxdrvr zuerst und dann nochmal die controller eingerichtet.
Aber leider funktioniert es nicht bei SNES SuperBomberman2 im Zwei-Spieler-Modus. Der Spieler 2 kann Aktionen ausführen wenn bei Spieler 1 eine Taste gedrückt wird.
Woran kann das liegen?
Vielen Dank
Grüße
“Spieler 2 kann nur!! Aktionen ausführen wenn bei Spieler 1 gerade eine Taste gedrückt wird.”
Sollte es heißen
da es sechs SNES-Emulatoren gibt, welchen nutzt du überhaupt? Die vier unter Libretro / RetroPie sollten eigentlich keine Probleme machen. Funktionieren denn andere 2-Spielerspiele?
Hallo,
ich habe folgendes Problem mit meinem Setup:
Habe mir einen Arcade automaten gebaut und einen Raspberry Pi 2 Moedell B rein gesetzt.
Joysticks und Knöpfe habe ich über kabel sowhol links(Spieler1) als auch Rechts(spieler2) mit einen Ipac 2 verbunden. dieser hat einen usb ausgang den ich dann mit meinem Pi verbunden habe.
wenn ich jetzt die einstellungen für die verschiedenen Spieler vornehmen möchte (wie oben beschrieben)habe ich das Problem, dass es mir das drücken der Knöpfe und bewegen der Joysticks als eingabe auf einer Tastatur erkennt und diverse buchstaben und zahlen in das Eingabefeld eingibt. auch in der Emulatiton Station wird das Drücken der knöpfe als eingabe über ein keyboard erkannt. Bei der eingabe kommt dann nach dem eingestellten zeitraum die “time out …” meldung und es geht weiter mit der nächsten taste, die natürlich auch nicht erkannt wird. (kann die Bilder von meinem Problem auch noch irgendwie schicken/hochladen, weiss nur nicht wie…)
Jetzt meine Fragen:
-was muss ich tun, dass ich über diesen IPAC meine 2 Spieler konfigurieren kann?
-manche Emulatoren erscheinen nicht in der Emu-station obwohl schon roms in die Ordner kopiert wurden, so z.B. neogeo oder Atari2600. woran kann das liegen? bzw. wie kann ich es beheben ?
ich kenne das IPAC2 zwar nicht, daher möge man mich korrigieren, falls ich falsch liege. Aber es scheint die Joystickfunktionen als Tastatureingaben umzusetzen. Daher kannst du die oben beschriebene Einrichtung nicht nutzen, diese setzt einen ‘echten‘ Joystick voraus.
Die EmulationStation kannst du normal einrichten, es geht dann dort aber nur einer der beiden Sticks. Für Libretro / RetroArch kannst du einfach die
retroarch.cfg
manuell anpassen. Dazu musst du nur dieinput_player1_[Knopf] = [Taste]
Stellen (ohne_btn
bzw._axis
am Ende) suchen und mit den entsprechenden Tasten anpassen. Also z. B.input_player1_b = "z"
. Falls dir Schalter fehlen, scroll hier mal etwas runter, bis nach “Alle? Schalter...
“ und klicke dort drauf. In der Liste solltest du alle benötigten Schalter finden. Für den zweiten Spieler nutzt du dann einfachinput_player2_[Knopf] = [Taste]
.Zu deiner zweiten Frage:
Stimmen denn die Endungen? Schau mal in die
es_systems.cfg
, ob deine Endungen bei den NeoGeo und VCS2600 ROMs zu denen in der Datei passen.Hallo und Danke für die sehr schnelle Antwort 🙂 das erste Problem hab ich jetzt mehr oder weniger gelöst, hab den 2 Spieler Modus hinbekommen. 🙂
Jetzt habe ich allerdings bemerkt, dass wenn ich beispielsweise nach oben rechts springen möchte(zb street fighter 2) das ganze nicht funktioniert. gibt es also die Möglichkeit irgendwie “up” und “right” in einen befehl zu packen und dann auf ein “oben rechts” zu legen (existiert überhaut sowas wie oben rechts) ?
also Bei dem NeoGeo Emulator lag es wirklich daran, dass die Endungen nicht passend waren, hab jetzt versucht einfach mal von den roms die endung geändert und es ist NeoGeo in meiner Emulatoren Auswahl gekommen, haben dann halt nicht funktionniert aber war auf jeden fall da.
Beim Atari 2600 war es leider nicht so, da haben die endungen meiner Spieldatein eigentlich zu denen aus der Liste im “es_systems.cfg” gepasst.
.a26
.Hallo,
wie bekomme ich in meinem Fall im Amsrad CPC die komplette Tastatur zur Verfügung? Ich habe kein Gamepad und das Spiel was ich spielen möchte benötigt die Tastatur.
cpc4rpi
kann man doch die Tastatur verwenden.Hallo Jörn,
Erst mal vielen Dank für die Antwort. Ich verwende den r-caprice32 Emu. Der CPC4-rpi beendet sich selbst sofort. Ich komme nicht in das Amstrad Basic.
du verwendest nicht zufällig das Image 3.1 – oder?
Doch, das verwende ich zufällig. 🙂
Leider ist die
cpc4rpi
Installation auf dem Image 3.1 fehlerhaft.Wirf nach einem erfolglosen Start mal einen Blick in die
/tmp/runcommand.log
.Dort findest du den Grund:
/opt/retropie/emulators/cpc/cpc4rpi: error while loading shared libraries: libEGL.so.1: cannot open shared object file: No such file or directory
Um dies zu beheben, folge diesen Punkten:
Danach sollte der Emulator wieder starten.
Vielen Dank es funktioniert, Du bist genial!
Hab schon das ein und andere getestet. Kann man noch wo auf das erste Modell mit 64K umstellen? Ich hab ein Spiel das reklamiert das.
nicht dass ich wüßte. Habe bisher keine weiteren Einstellungen entdecken können.
Frage: Was wenn ich verschiedene Gamepads folgendermaßen nutzen möchte:
Für NES und SNES benutze ich einen Snes-USB-Controller-Verschnitt. Möchte ich jedoch Emulatoren von Systemen nutzen die mehr Eingabequellen benötigen, dann würde ich auf ein xbox-pad zurückgreifen. Die Controller scheinen aber an Spieler gebunden zu sein, wenn ich also den als Spieler 3 konfigurierten(da ich ihn nur in Außnahmen nutze) XBOX-Controller anstecke, ohne dass ein anderer Controller angesteckt ist, wird dieser dann als Spieler 1 erkannt? Oder muss ich bei Controller-Wechsel immer erst den entsrpechenden Controller als Spieler 1 festlegen?
LG Pascal
die einfachste Lösung, in meinen Augen, stellen die getrennten
retroarch.cfg
Dateien dar.Verwende die manuelle Einrichtung.
Trage das SNES-Pad in die
retroarch.cfg
unterall
ein. Das gilt dann erstmal für alle RetroArch-Emulatoren.Erstelle als nächstes für das XBox-Pad eine abweichende Konfiguration. Kopiere diese in die
retroarch.cfg
im jeweiligen Emulator-Verzeichnis, für den du das XBox-Pad nutzen möchtest. Ich würde das XBox-Pad zusätzlich anstöpseln! Dann kannst du in der EmulationStation einfach das Spiel starten und musst nur zum richtigen Pad greifen, ohne umzustecken. Schau dir oben unter dem Link mal die Parameter fürretroarch-joyconfig
an. Du kannst jedes Pad für jeden Spieler einrichten, also auch das 2. Pad für den ersten Spieler-p 1 -j 1
.Klingt evtl. etwas verwirrend, aber ich hoffe du kommst damit klar. Eigentlich steht alles notwendige, oben im Text.
Ich hätte doch noch eine Frage.
Ich spiele gerne die CPC Amstrad Spiele. Kann man es irgendwie machen, dass die in der Emulation sofort starten?
Hej,
ich will mich einfach mal nur für die geniale und ausführliche(!) Anleitung bedanken. Sehr geil was du da recherchiert und dokumentiert hast. Hat dich sicher einige Nerven gekostet. 🙂
gern geschehen.
Da ich hier nur über Sachen schreibe, die mich selbst interessieren, hielt sich der Verschleiß an Nerven in Grenzen 😉 .
Laut Tante Google sollen ja die Xbox One Controller per USB laufen, leider schmiert mir der Pie beim starten ab. Ich habe auf die letzte version geupdatet, mehrfach neugestartet sowie die xbox 360 Treiber installiert.
Hat irgendjemand noch eine Ahnung wie ich die COntroler zum laufen bekomme?
Salute!
Weiß jemand wie man 2 Joysticks die übern USB adapter laufen ) richtig einstellen kann? Wenn ich zb. AdvMame starte dann kann man zwar die tasten einzeln zuordnen aber wenn ich mit einem joystick lenke bewegen sich immer beide figuren. Wollte jetzt wie hier beschrieben (https://www.retro-programming.de/?page_id=9588) beide joysticks konfigurieren aber ich krieg nur die meldung das kein 2ter joystick erkannt wurde…
Vorne weg: Ich habe keine Ahnung von dem Adapter, aber kann es sein, dass er nur einen Joystick zur Verfügung stellt?
Begib dich bitte mal ins Terminal und wirf mit
ls /dev/input
einen Blick auf die vorhandenen Eingabegeräte. Die Joysticks tauchen dort mitjs<0 bis n>
auf.Falls wirklich nur
js0
vorhanden ist, gib maljstest /dev/input/js0
ein. Bewege dann Stick-1 und beobachte, was sich ändert. Nimm danach Stick-2 zur Hand und kontrolliere, ob sich etwas tut und falls ja, ob sich andere Werte verändern.Falls sich bei
js0
nichts ändert, könnte es sein, dass der Adapter Tastatureingaben sendet. Dies kannst du am einfachsten im Terminal kontrollieren. Tauchen für die Richtungen und Buttons Zeichen auf dem Bildschirm auf bzw. bewegt sich der Cursor?Hallo,
danke für die schnelle antwort.
Habs jetzt probiert und es scheint als würden beide joysticks die selbe befehle senden…
Bei den knöpfen passts, da kommen alle anders an. kann ich da jetzt irgendwas machen um beide joysticks nutzen zu können?
dann muss ich leider passen!
Ich hätte erwartet, dass auch die Richtungen getrennt sind. Wenn es am Adapter keine Einstellungen oder einen speziellen Treiber dafür gibt, fällt mir nichts mehr dazu ein. Wie sollen die Signale am Pi unterschieden werden, wenn sie für beide Joysticks identisch sind?
Hast du das ganze eigentlich schon mal unter Windows ausprobiert? Wenn der Adapter dort auch nur als ein Joystick funktioniert, wüsste man wenigsten, dass das Problem dort zu suchen ist und sonst eher beim Raspberry.
Hallo.
Ich nutze Retropie V3.0 und habe meinen X360 wireless Contoller manuell mit dem Programm “retroarch-joyconfig” eingerichtet.
Jetzt habe ich das Problem dass die Tastenzuweisung bei dem PSX Emu dennoch falsch ist (verglichen mit dem orig. PS-Controller).
-> z.B.: Taste “X” (PS) sollte auf dem X360 Pad auf “A” liegen.
Tatsächlich befindet sich aber “X” (PS) auf “B” (X360 Pad)
Habe ich nun einen Fehler bei der anfänglichen Tastenzuweisung gemacht oder muss ich die Zuweisung explizit für den einzelnen Emulator neu machen?
Du bist bestimmt meiner ‘alten‘ Grafik gefolgt und hast “A” für “A” und “B” für “B” gedrückt.
Da es mittlerweile eine offizielle Empfehlung von den RetroPie-Machern gibt, habe ich das Bild oben im Text ausgetauscht.
Vielen Dank Jörn!
Du hast recht. Mithilfe der aktuellen Grafik klappt alles wie es soll! 😀
Hi
icg habe auf meinem raspi das Retropie 3.0 Image installiert und möchte neben den PiFba Emulator noch den Libreto Fba Emulator parallel auf der Oberfläche haben. Welchen Eintrag muss ich in der es_system.cfg vornehmen um beide systeme nebeneinader zum laufen zu bringen!?
Und dann habe ich noch ein Problem mit meinem PS3 Controller. Ich habe ihn wie in der Anleitung beschrieben installiert und er läuft ohne Probleme mit Bluetooth Dongle. Es gehen auch alle Emulatoren bis auf Neo Geo und PiFba. Da geht dann weder mein wireless keyboard noch mein controller. Egal welche taste oder welchen knopf ich drücke es passiert nichts! Wenn ich den Controller via Kabel an den Raspi anschliesse gehen beide wieder.
Habe schon im netz gesucht. Bin langsam am verzweifeln weil ich keine lösung finde!! Was kann ich machen damit der bluetooth ps3 controller in den besagten Emulatoren erkannt wird!? Ich hoffe mir kann jemand helfen
Danke schon mal im vorraus
Sorry für den doppelpost war keine absicht
Aktuell bin ich gerade dabei eine V3.0-Version von ‘Die Emulatoren‘ zu erstellen, wenn alles gut geht, kann ich morgen mal deine Punkte ins Visier nehmen.
es hat zwar etwas länger gedauert, aber eben bin ich zu FBA gekommen.
Leider kann ich deine Angaben nur bestätigen, sobald das PS3-Pad per Bluetooth verwendet wird, geht auch bei mir die kabellose Tastatur nicht mehr. Das Pad verweigert außerdem ebenfalls seinen Dienst, obwohl ich die Configdatei
/opt/retropie/configs/fba/fba2x.cfg
angepasst habe.Vielen Dank erstmal dass dir die Mühe gemacht hast. Schade dass dafür noch keine Lösung gibt wie man den Wireess Controller zum laufen bringt im FBA.
Hasz du evtl schon eine Lösung für meine andere Frage wie man beide FBA Emus parallel auf die Oberfläche der Emulationstation bringt? Würde mich freuen wenn ich neben dem PiFBA auch den Libreto FBA Emu im Menü der Station hätte!?
es_systems.cfg
einfügen. Am einfachsten geht der ‘alte’ Weg (also ohneruncommand.sh
), wie zur Zeit noch in den Tipps & Tricks beschrieben. Den korrekten Aufruf findest du in der Dateiemulators.cfg
. Sofern ich das ohne nachzusehen richtig hinbekomme, müsste die unter/opt/retropie/configs/fba
liegen.Hallo,
ich möchte gerne Crash Bandicoot o.ä. mit dem linken Analogstick, anstatt mit dem Steuerkreuz spielen.
Was muss ich dafür ändern?
Gruß
EDIT:
Es handelt sich im einen X-Box Controller, angeschlossen per Wireless Adapter.
bei den RetroArch-Emulatoren sollte, wie oben im Text erwähnt, z. B.
input_player1_analog_dpad_mode
dafür sorgen.Hi.
Ich nehme mal an, dass du das auf der PSX zocken möchtest (worauf auch sonst 🙂 ).
Hier eine kurze Anleitung, wie man das mit dem Xbox-Controller hinkriegt.
Gehe zu:
sudo nano /opt/retropie/configs/psx/retroarch.cfg
Gibt folgenden Text ein:
input_player1_left_axis = -0
input_player1_right_axis = +0
input_player1_up_axis = -1
input_player1_down_axis = +1
Fertig! 🙂
Jetzt kannst du deine Spielfigur in jedem PSX-Spiel sowohl mit dem Steuerkreuz als auch mit dem Joystick steuern.
Das funktioniert übrigens auch bei sämtlichen anderen Retroarch-Emulatoren. Einfach den Text in die entsprechende Config einfügen, dann kannst du auch Sonic oder Mario mit dem Joystick steuern.
Die von mir am 11.08.15 gezeigte Lösung ist da doch sehr viel einfacher, läßt sich so für jeden Spieler umsetzen und ist unabhängig vom Controller.
Hi. Ich hab mir einen Competition Pro USB Retro-Klick-Joystick gekauft. Sehr geiles Teil. Aber welche der Buttons muss wie gemappt werden ?
Ich gehe mal von DPAD up/down/left/right für den Stick aus, dann oben links Button A rechts daneben Button B und dann der kleine Linke x und der kleine rechte y ?
hier sind alle Controller gut beschrieben zum Anlernen, aber wie sieht es beim Competition Pro aus ?
https://github.com/RetroPie/RetroPie-Setup/wiki/RetroArch-Configuration
es hängt davon ab, wo du ihn einsetzen willst. Der Sinn dieser freien Konfiguration ist ja gerade, dass du bestimmen kannst, was – wie funktionieren soll.
Ich nutze den Stick fast nur für C64 und Amiga, die bringen eigene Treiber mit, da muss man vorher nichts einstellen. Für die RetroArch-Emulatoren lege ich dann START & SELECT auf die oberen / kleinen Knöpfe, damit der Stick dann z. B. auch mit dem NES- oder Gameboy-Emulator funktioniert. Fürs Mega Drive könnte man z. B. Y & START verwenden, dann hat man alle Funktionen des ‘alten‘ 3-Button Pads. Richte ihn also so ein, wie du es brauchst, es gibt da keine allgemein gültige Belegung.
Die Bilder zeigen dir übrigens nur, wie die Buttons standardmäßig für die dazugehörigen Emulatoren (Systeme) gemappt werden. Daher findest du dort auch keinen Competition Pro bzw. die zig tausend anderen Joysticks & Pads, die es so gibt, da diese zu keinem System gehören. Schau dir einfach an, welche Funktionen das jeweilige System bietet und konfiguriere deinen Stick dann entsprechend.
Ich könnte Hilfe bei der Controllerkonfiguration bezüglich dem NeoGeo Emulator (GnGeoPi) brauchen (bei der V. 3.0 RC 1). Ich habe zurzeit 2 USB SNES-Pads (über das RetroPie-Setup konfiguriert (funktionieren beide im Multiplayer)) am Pi und mit beiden lässt sich der Emulator nicht steuern. Auf der älteren RetroPie Version 3.0 BETA 3 hat dies noch funktioniert, dass ich über die Datei gngeorc (in /home/pi/.gngeo) die Controller ändern konnte. Jedoch ist die Datei bei der jetzigen Version leer und das manuelle Einfügen hat auch nichts gebracht. Nun ist für mich die Frage wie ich das zum laufen kriege.
Hat sich nun bereits erledigt. Ich habe nun die Datei entsprechend konfiguriert. Sofern Bedarf besteht, kann ich die Konfiguration genauer beschreiben.
Hi,
weißt du zufällig wie man die Tastenbelegung für die einzelnen Emulatoren ändern kann?
Möchte die Belegung vom SNES Controller im NES Emulator ändern. Aber auch nur explizit für den NES. Sonst soll er wie gewohnt funktionieren.
Du kannst mit einer eigenen
retroarch.cfg
im jeweiligen Emulator-Verzeichnis,die Einstellungen aus dem
all
-Verzeichnis übersteuern.Vielen Dank für Deine Top-Anleitung, genial!
Habe nun folgendes Problem:
Die Controller (PS4) sind aktiv und leuchten Rot bzw. Blau.
Wenn ich im Emulator bin funktionieren die ein paar Sekunden, d.h. sobald ich ein paar mal hin- und her navigiere schaltet der Controller aus.
Der zweite leuchtet noch immer, aber ich kann nichts mehr machen.
Das gleiche Problem, wenn ich nur einen Controller angeschlossen habe.
Die retroarch.cfg habe ich übrigens noch nicht verändert, lediglich die Controller hinzugefügt.
Danke für einen Hinweis.
ich kann dir da leider nicht weiterhelfen.
Das Verhalten ist mir bisher vollkommen unbekannt und ich habe auch keine PS4-Controller, mit denen ich das mal testen könnte.
Vielleicht hat ja noch jemand anderes eine Idee.
Hi, schonmal nen riesen Dank für die sehr ausführliche Schritt für Schritt Anleitung zum einrichten des Retropies, macht super viel Spaß die alten Klassiker wieder zu spielen 🙂
Ich bin allerdings auf das Problem gestoßen das ich nicht zu 3. oder zu 4. spielen kann. An meinem Pi hängt ein usb-splitter, an dem ein x-box controler, ein nes usb controler und ein original snes controler mit adapter hängt. Habe die Controler für player1,2,3 wie beschrieben konfiguriert und in der emulatoren übersich lässt sich auch mit allen 3 controlern navigieren. Allerdings reagiert z.B. bei super Bomberman oder secret of mana der 3. Controler einfach nicht. Liegt das an meinen Einstellungen oder an dem jeweiligen Emulator?
Allerdings musst du dazu “
lr-snes9x-next
” unter LibRetro / RetroArch einsetzen und in dieretroarch.cfg
für den SNES-Emulator die Zeileinput_libretro_device_p2 = “257”
aufnehmen.Soweit die Theorie, getestet habe ich es bisher nämlich nicht.
Hallo! 🙂
Vielen lieben Dank für die ausführliche Anleitung.
Ich habe ein ganz seltsames Problem – und zwar funktioniert der xbox360 Controller nur teilweise in Emulatoren. Eingestellt habe ich ihn, wie oben angegeben. Bei der Vereinfachten Version über das Menü in der EmulationStation lässt er sich zwar soweit konfigurieren, aber nicht bestätigen. Ach und in selbiger funktioniert der Controller einwandfrei – nur im Spiel nicht. Danke im Vorraus!
Wie hast du den Controller nun genau eingerichtet, nur über die EmulationStation?
Was soll
"...lässt er sich zwar soweit konfigurieren, aber nicht bestätigen"
bedeuten?Handelt es sich um ein Pad mit oder ohne Kabel?
In welchen Emulatoren will er nicht?
Da ich, wie im Text erwähnt, kein Fan der einfach Einrichtung bin, empfehle ich dir, falls nicht bereits geschehen, die manuelle Einrichtung.
Nochmal in hochdeutsch 😀 Der Controller (xbox360 mit Kabel) ist manuell eingerichtet, wie beschrieben. In der Menü Funktion kann ich am Ende nicht auf OK drücken, damit er die Einstellungen übernimmt also setzt er sie zurück. In keinem Emulator funktioniert das D-Pad. Man kann springen, schießen usw, aber nicht laufen.
retroarch.cfg
an die E-Mail-Adresse aus dem Impressum.Verwendest du die aktuelle BETA 4 oder eine ältere und welches Pi-Model setzt du ein?
Ja, ich hab’ die aktuelle Beta 4 und das Pi-2.
In der retroarch.cfg ist mir direkt aufgefallen, dass beim D-Pad in dem kompletten Absatz überhaupt nichts hinter dem = steht, im Gegenteil zu den anderen konfigurierten Tasten. Das Pi ist am TV angeschlossen, ist das okay, wenn ich das abfotografiere?
Mir fällt keine andere Methode ein..
Das ist übrigens das erste mal, dass ich mich überhaupt mit Programmierung auseinander setze.
retroarch.cfg
so aussehen:input_player1_joypad_index = "0"
input_player1_b_btn = "1"
input_player1_y_btn = "3"
input_player1_select_btn = "6"
input_player1_start_btn = "7"
input_player1_up_btn = "h0up"
input_player1_down_btn = "h0down"
input_player1_left_btn = "h0left"
input_player1_right_btn = "h0right"
input_player1_a_btn = "0"
input_player1_x_btn = "2"
input_player1_l_btn = "4"
input_player1_r_btn = "5"
input_player1_l2_axis = "+2"
input_player1_r2_axis = "+5"
input_player1_l3_btn = "9"
input_player1_r3_btn = "10"
input_player1_l_x_plus_axis = "+0"
input_player1_l_x_minus_axis = "-0"
input_player1_l_y_plus_axis = "+1"
input_player1_l_y_minus_axis = "-1"
input_player1_r_x_plus_axis = "+3"
input_player1_r_x_minus_axis = "-3"
input_player1_r_y_plus_axis = "+4"
input_player1_r_y_minus_axis = "-4"
Diese Werte stammen von meinem kabelgebundenen XBox-Pad. Ich kann die Einstellungen in der EmulationStation übrigens mit A (OK) bestätigen und sie werden gespeichert.
Auch wenn die Seite ‘retro-programming’ heist, hat dies nichts mit Programmierung zu tun 😉 . Ein Foto würde übrigens nichts nützen, da ich die komplette Datei kontrollieren müsste bzw. zum Testen bräuchte. Du kannst die Datei einfach mit
sudo cp /opt/retropie/configs/all/retroarch.cfg /boot
kopieren, die SD-Karte dann am PC verwenden und auf das entsprechende Laufwerk schauen. Von dort kannst du die dann direkt verschicken.Hallo
Was war den die Lösung des problem? Hab dasselbe Problem das das D Pad nicht funkt.
Beste grüsse
interessanterweise funktioniert es mit den beiden controllern bei mario kart für snes
hi ich habe zwei ps3 controller über einen bluetooth adapter angeschlossen und alles wie beschrieben eingerichtet es werden auch beide controller als 1 und 2 erkannt, aber bei super mario bros. für nes kann ich trotzdem nicht den 2 player modus spielen…hat irgendjemand eine idee woran das liegen könnte?
Wie hast du das denn hinbekommen? Ich hab zuerst einen PS3 Controller wie beschrieben zum laufen gebracht. Hab danach probiert, mehrere Controller einzurichten, aber dann erkennt der den PS3 Controller nicht mehr via Bluetooth. Nur per Kabel.
Benutze RetroPie V3.0
Ich habe doch alle Schritte unter ‘RetroPie (V3.0): Bluetooth-Controller‘ und ‘RetroPie (V3.0): Playstation 3-Controller (Bluetooth)‘ dargelegt. Wenn du denen exakt folgst, solltest du zwei PS3-Controller problemlos einrichten können.
Hi Jörn,
herzlichen Dank für die Anleitung, sie hat mir extrem geholfen meinen Retro-Pi einzurichten. 😀
Ein paar Kleinigkeiten (Hotkeys etc) muss ich noch anpassen aber jetzt funktioniert es endlich. (Pi 2 + PS2->USB Adapter (Twin USB Joystick) + 2 x Logitech Cordless Action PS2 Controller+ Edimax WiFi + Logitech K400 keyboard).
Was nicht geht ist, mit zwei Playern Atari 2600 Spiele zu spielen, bei allen anderen funktioniiert der 2-Spieler Modus perfekt. 🙁
Hast Du eine Ahnung an was es liegen kann?
Gruß und nochmal DANKE !!!
Sas
das ist mir noch gar nicht aufgefallen. Aber du hast recht, mit der LibRetro / RetroArch Version von Stella, will der 2-Spieler-Modus anscheinend nicht direkt funktionieren, keine Ahnung warum.
Du kannst aber auch die eigenständige Stella-Fassung nehmen. Nachdem ich dort meine Controller eingerichtet hatte, klappte es auch mit zwei Spielern.
Ui! Wie geht das mit der eigenständigen Stalla Fassung? Ich dachte die braucht X und das ist bei V3.0 nicht mehr dabei?
Liebe Grüße,
Sas
[TAB]
die Optionen öffnen und die Controller einrichten.Yaheeeee!!!!
Und nochmal ein Mega-Danke, das hat geklappt!
Ich war schon am verzweifeln. 😀
Endlich wieder Freeway mit 2 Personen spielbar 😉
Hi,
die Anleitung funktioniert wunderbar, ich habe auch meine Tasten konfiguriert bekommen, allerdings kann ich im Menü nichts damit steuern. Wenn der Bildschirm abgedunkelt wird kann ich allerdings durch Interaktion mit dem PS3 Controller dieses wieder abschalten, also generell erkannt wird das Teil. Könnte natürlich daran liegen, dass ich in der initialen Konfiguration die Tastatur als Input Device konfiguriert hatte.
In der Datei “/opt/retropie/configs/all/retroarch.conf” hatte ich die Tastaturkonfiguration allerdings wieder auskommentiert und durch die PS3 Konfiguration ersetzt, keine Wirkung.
Irgendwelche Tips? Habs noch nicht wieder probiert die Tastatur anzuschließen, könnte mir aber durchaus vorstellen, dass das nicht funktioniert.
ich nehme an, du meinst mit Menü die EmulationStation. Hast du den Controller denn auch dort eingerichtet?
Die
retroarch.cfg
ist nur für die RetroArch-Emulatoren zuständig und hat nichts mit der EmulationStation zu tun! Die Controller-Einstellungen für die EmulationStation findest du in der Datei~/.emulationstation/es_input.cfg
.Wirf mal einen Blick in diesen Kommentar und folge zur Einrichtung dem Link.
Hi, wow, superschnelle Antwort, danke 🙂
Ich hatte tatsächlich nicht daran gedacht, dass das unterschiedliche Konfigurationen sein können. Einmal den Controller im Menü eingerichtet und schon fluppt alles 🙂
Danke für die Hilfe und super Seite, weiter so!
Habe eine Tastatur, einen original SNES und einen original NES Controller eingerichtet wie du es beschrieben hast.
Mit der Tastatur und der SNES funktioniert alles tadellos. Kann durch die Channels wechseln und auch Spielen funktioniert ohne Probleme.
Jetzt habe ich den NES Controller eingericht usw. Allerdings funktioniert der nur im Spiel selber. Die Channels muss ich aber mit der Tastatur wechseln da hier der NES Controller nicht reagiert. Im Spiel jedoch ohne Probleme.
Weißt du des Rätsel Lösung?
Es hängt nur die Tastatur und der NES Controller am Retropie.
Verwende die neueste Version 3
Gruß
Martin
PS: Weiter so mit den Retropie Artikeln 😉
~/.emulationstation/es_input.cfg
(ich hoffe der Pfad stimmt, sitze gerade nicht am Pi) aus?Korrekt. Meine das Menü der Emulation Station.
Bin nur so vorgegangen wie in diesem Artikel beschrieben.
Habe mit “configure joystick/controller for use with RetroArch” den Controller hinzugefügt.
Wie füge ich bei der Emulation Station einen Controller hinzu?
Ich denke du nutzt bereits Tastatur und SNES-Controller, die müsstest du doch auch eingerichtet haben.
Menü -> Configure Input -> Button am gewüschten Controller gedrückt halten und einrichten.
Dies findest du auch unter RetroPie (V3.0): EmulationStation 2 einrichten.
Ach das meintest du.
Hab den Wald vor lauter Bäumen nicht mehr gesehen 🙂
Danke. Jetzt klappt auch alles mit dem NES Controller 🙂
Hallo,
ich hab folgendes Problem mit meinen Controllern:
Ein Xbox360-Pad ist als /dev/input/js0 gemappt. Dazu sind noch zwei Competition Pros über eine selbstgelöteten GPIO-Adapter angeschlossen und über den Db9_gpio_rpi-Treiber als /dev/input/js1 und /dev/input/js2 eingebunden. Das funktioniert auch in den Retroarch-Emus (z.B. C64, Atari 2600) und auch im Atari ST Emu einwandfrei.
Allerdings kriege ich in UAE4ALL2 nur das Xbox-Pad zum Laufen und das auch nicht richtig (es geht nur hoch, rechts und Feuer).
Eigentlich sollten die oldschool Digital Joysticks js1 und js2 in dem Fall zum Einsatz kommen. Ich hab aber leider keine Ahnung, wie ich das dem Emu mitteile.
Ich wäre für jede Hilfe dankbar…
PS: System ist ein Pi 2 mit Retropie Beta 3 Version 2.
Ja, ich habe inzwischen auch schon versucht herauszufinden, welche Entwickler man zu dem Thema mal ansprechen kann. Es ist aber bei den ganzen Derivaten von UAE für den Raspi, die es inzwischen gibt (Uae4all, Uae4all2, Uae4all2 chips, Uae4arm usw.) gar nicht so einfach herauszufinden, an wen man das am Besten adressiert…
Das Problem besteht auf jeden Fall bei allen Varianten, die ich ausprobiert habe.
Ich wollte noch mal ein Feedback geben, was ich bis jetzt herausgefunden habe: Alle Amiga-Emus für den Raspi sind Abkömmlinge der Version der Pandora-Konsole. Da diese eine einheitliche Hardware hat, sind die Joysticks im Sourcecode “hart” verdrahtet, d.h. was auch immer unter /dev/input/js0 und js1 vorhanden ist, wird an Port 1 und 2 des Amiga gemappt. Hat man nun mehr als zwei Joysticks (wie ich ein XBox-Pad + 2 Competition Pros am GPIO), dann kann das zum Problem werden.
Man muss also irgendwie dafür sorgen, dass man die für UAE gewünschten Joysticks unbedingt als die erstes geladen kriegt, solange es keinen Fix im Source Code gibt (ich hab den aktivsten Entwickler in dem Bereich kontaktiert und gebeten, sich der Sache anzunehmen. Mal sehen…)
Momentan versuche ich herauszufinden, wie ich es bewerkstelligen kann, dass der GPIO-Driver (geladen über /etc/modules) als erstes im System landet und dann erst die weiteren devices für Xbox, Mouse usw.
Guten morgen,
irgendwie komme ich mit der DOSBOX nicht zurecht. Eigentlich sollte doch mit STRG-F1 das Keymapping möglich sein. Bei mir sind seltsamerweise ALLE Tasten komplett unterschiedlich. Das hat zur folge, dass ich mit STRG und F1 nirgends hinkomme, weil der stattdessen irgendwelche Buchstaben und Zahlen auslöst aber eben nicht die gewünschte kombination.
Ich habe mal gegoogelt und den Tipp gefunden, dass man sich durch das Keymapping den doppelpunkt und sowas richtig zurecht legen kann, aber bei mir sind ja alle Tasten durcheinander. Auf “2” oder “3” oder so ist ESC und auf Enter/Return ist ne “8” und so weiter… seltsam.
Gibt es denn vielleicht eine zentrale Datei wo ich quasi manuell mappen kann wie die /configs/all/retroarch.cfg oder was kann da nicht stimmen?
Super gut, hat geklappt 🙂 Besten Dank
Was für Soundeinstellungen muss ich denn im Spiel vornehmen, dass auch was aus den Boxen kommt?
Hallo,
eine Frage habe ich bzgl. der Tastatur Hotkeys. Es gibt scheinbar ein paar wie zum Beispiel die Tasten “N”, “O”, “P”, “H” und so weiter und teilweise stehen die in der configs/all/retroarch.cfg nicht drin.
Das “O” für Movie aufzeichnen habe ich finden können auskommentiert und es brachte keinen Erfolg. Dann habe ich den Eintrag gelöscht = geht auch nicht. Werden die noch woanders festgelegt?
nul
z. B.input_movie_record_toggle = "nul"
, um die Funktion zu deaktivieren.oh super, vielen Dank, werd ich mal testen 🙂
Hallo und guten morgen,
kann man wohl für Player 1 einen Joystick und Player 2 festlegen?
grüße
Thomas
Sorry, aber irgendwie verstehe ich die Frage nicht.
mist, tschuldigung. Ich wollte keyboard für player 2 schreiben. 🙂
retroarch.cfg
gibt es für jeden ‘Player‘, für jede Eingabeart (Taste, Button, Achse) einen extra Eintrag pro Funktion.Du musst also für Player 2, für z. B.
START
, nurinput_player2_start
, stattinput_player2_start_btn
verwenden, um Tastaturcodes zuzuweisen.Tschuldigung, ich wollte für Player 2 eine Tastatur verwenden und für Player 1 einen Joystick.
Hallöchen,
ich hoffe das mir jemand zu diesem Thema hier weiter helfen kann.
Habe etwas tolles gefunden damit ich für mein Arcade Automat auf zusätzliche Hardware (I-PAC) verzichten kann.
https : / / github.com / ian57 / Raspicade-Retrogame-2Player-Pi2
Habe einfach unten die Installationsschritte durchgeführt.
Also folgendes eingegeben:
Erst das:
$ git clone https : / / github.com / ian57 / Raspicade-Retrogame-2Player-Pi2
$ cd Raspicade-Retrogame-2Player-BPlus
$ make
Dann:
sudo modprobe uinput
sudo sh -c ‘echo uinput >> /etc/modules’
Dann so wie im Tutorial beschrieben getestet mit:
sudo ./retrogame
Dann die sudo nano /etc/rc.local
Folgendes eingefügt:
/home/pi/Raspicade-Retrogame-2Player-BPlus/retrogame &
Und neu gestartet…
Aber ich muss wohl irgend was falsch bzw missverstanden haben..
Ich meine wenn ich nun gewisse GPIO Kontakte verbinde… Dann wirft er mir auch zahlen aus… Also z.b. die 1
Ich denke mal das soll so auch richtig sein.
Aber wenn ich nun in die Controller Configuration gehe mit dem RetroPie Setup und er mich die Tasten abfragt, und ich dann über den GPIO das signal für die Taste 1 gebe, zeigt er mir die 1 auch in der Controller Configuration an aber meldet dann time out also er erkennt nicht wirklich das es scheinbar eine Taste simulieren soll.
Ich hoffe ich habe es verständlich erklärt… Bin da nicht so der erklärbär 🙁
Muss ich für RetroPie noch weitere einstellungen vornehmen ? Oder woran könnte das liegen ?
das ist doch ‘nur‘ ein weiterer ‘GPIO keyboard daemon’.
Damit simulierst du keinen Controller, sondern die Tastatur. Daher auch die von dir erwähnte 1.
Du musst also RetroArch für die Steuerung per Keyboard einrichten und dort die in der
retrogame.c
definierten Tasten verwenden.Hallo. Ich verwende einen Raspberry Pi 1 mit Retropi Version 3
Und deine Anleitungen sind einfach Weltklasse.
Leider scheitere ich immer wieder beim versuch meine zwei 8bitdo NES30 Pads mit dem Pi zu verbinden. Hierzu gibt es sehr viele verschiedene Ansätze im Internet wie man hier vorzugehen hat. Leider klappt einfach nichts bei mir.
Hast du eventuell Erfahrung mit diesen Pads
Super
Hallo, ich habe von 2.6 auf 3.0 geupdated und meine controller spinnen plötzlich. Wenn man select drückt, wird das Spiel beendet. A macht einen Neustart. Bestätigen kann man anscheinend nicht mehr. Vor dem update lief alles perfekt. Habe dann deine Anleitung für die manuelle controller Einrichtung gemacht, leider ohne Erfolg. Jetzt kann ich gar nichts mehr spielen 🙁 Wäre nett, wenn du helfen könntest.
retroarch.cfg
werfen zu können. Wenn du möchstest, schick die einfach an die E-Mail-Adresse aus dem Impressum.Ich hab im RetroPie Setup den Punkt 1, Binary-based installation, ausgeführt.
Als controller verwende ich die nachgemachten snes controller.
Inzwischen hab ich es doch geschafft den controller manuell einzurichten. Hab versehentlich bei der Eingabe in der retroarch.cfg geschludert. Habe bei der Einrichtung des Hotkeys den konkreten Button in die Zeile ‘input_enable_hotkey’ geschrieben statt in ‘input_enable_hotkey_btn’.
Dennoch, der controller wurde nicht mehr automatisch korrekt wie zuvor bei 2.6 erkannt. Liegt das an der Version oder hätte ich beim updaten etwas anders machen müssen? Danke für deine schnelle Antwort!
es_systems.cfg
gelöscht. Also habe ich die aus der Sicherung verwendet. Hier stimmen aber die Aufrufe für RetroArch nicht, da die Cores in anderen Verzeichnissen liegen. Außerdem gibt es teilweise wieder neue Verzeichnisse für die ROMs, sodass man diese ggf. umkopieren muss. Um die neuen Möglichkeiten vonruncommand.sh
nutzen zu können, müssen die Aufrufe in deres_systems.cfg
angepasst werden. Was evtl. noch alles nicht passt, keine Ahnung. Ich ziehe eine Neuinstallation weiterhin vor.Da der Controller nun läuft, brauche ich die
retroarch.cfg
nicht mehr. Ich hatte einen Fehler, wie von dir selbst gefunden, erwartet. Nach meinem Update lief der XBox-Controller weiterhin automatisch. Ich habe aber keine SNES-Pads, daher kann ich das nicht überprüfen.Hast du auch schon das Problem gelöst, dass manche Spiele im PSX-Emulator nicht funktionieren? Beispielsweise Tomb Raider lässt sich nur starten, wählt man im Menü Start New Game kommt nur noch ein Blackscreen.
Schade, manche von den PSX Games funktionieren nämlich tadellos, manche dafür gar nicht!
Hast du auch schon versucht einen Controller über Bluetooth zu verbinden? Ich würde gerne meinen PS4 Controller verwenden, laut einigen Websites soll das auch funktionieren, nur ich bekomm es nicht hin!
Dann habe ich einen anderen Bluetooth-Stick genommen und es funktionierte direkt ohne nenneswerte Probleme.
Ich werde das noch mal genauer untersuchen und dann am langen Wochenende einen Text dazu verfassen.
Da ich keine PS4-Controller besitze, kann auf diese nicht gesondert eingehen.