Erstellt: 13. November 2016

RetroPie (V4.0.2): Controller einrichten

Raspberri Pi
RetroPie: Controller über RGUI einrichten

Dieser Text wurde archiviert! Eine Liste aller archivierten Texte findet ihr unter „RetroPie: Einrichtung für ältere Images“.

Eine Übersicht der aktuellen Beiträge gibt es unter „RetroPie: Raspberry Pi als Emulator“.


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.0.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.

Einen Controller einrichten.
Einen Controller einrichten.

Wählt CONFIGURE INPUT aus, 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:

  1. 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, …

  2. Emulatoren / Apps: Angepasste Programme greifen auf Libretro zu und versorgen uns so mit sehr vielen Emulatoren.

  3. 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.

    Die RetroArch-Oberfläche (RGUI)
    Die RetroArch-Oberfläche (RGUI)
  1. 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.

  2. 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:

(Bild-Quelle: GitHub / RetroPie)
(Bild-Quelle: GitHub / RetroPie)

Controller-Einstellungen, die über die EmulationStation vorgenommenen werden, findet ihr im Verzeichnis /opt/retropie/configs/all/retroarch-joypads.
RetroPieV30_026b

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…

Bei VICE den Joystick aktivieren.
Bei VICE den Joystick aktivieren.

Verlasst zum Schluß das Menü und schon könnt ihr euren Joystick / Controller verwenden.

Nebulus
Nebulus

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…

RetroPie-Einstellungen über die EmulationStation
RetroPie-Einstellungen über die EmulationStation

… und wählt dort RETROARCH aus.

RETROARCH
RETROARCH

Daraufhin öffnet sich die RetroArch-Oberfläche RGUI:

Das RetroArch-Menü (RGUI)
Das RetroArch-Menü (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…

Settings
Settings
Configuration
Configuration

 

ACHTUNG:
Eventuell erscheint bei euch statt dem obigen Menü, das folgende:

Falsches Menü!?!
Falsches Menü!?!

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:

Die Meldung mit A bestätigen.
Die Meldung mit A bestätigen.

Bestätigt die Meldung einfach mit eurer A-Taste und ihr landet im gewünschten Menü.

Configuration
Configuration

Benutzt ihr später einen Controller im RetroArch-Menü, dann kann es durchaus sein, dass sich dieses Fehlverhalten nicht mehr zeigt.

 

Save Configuration On Exit auf ON stellen!
Save Configuration On Exit auf ON stellen!

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…

Settings
Settings

Denkt an das oben erwähnte Problem!

Input
Input
Input User 1 Binds
Input User 1 Binds

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.

Die Joystick-Einstellungen
Die Joystick-Einstellungen

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.

User 1 Analog To Digital Type
User 1 Analog To Digital Type

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.

User 1 Device Index
User 1 Device Index

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.

User 1 Bind All
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.

Buttons zuweisen (zum Überspringen, einfach etwas warten)
Buttons zuweisen (zum Überspringen, einfach etwas warten)

Zum Schluß sollten eure Zuweisung ungefähr so aussehen…

Zugewiesene Pad-Buttons und Tastatureingaben
Zugewiesene Pad-Buttons und Tastatureingaben

Jetzt könnt ihr mit B einen Schritt zurück gehen und die ganze Prozedur nochmal für die weiteren Spieler wiederholen.

Input User 2 Binds
Input User 2 Binds

So sieht es z. B. nach der Einrichtung des Speedlink Competition Pro USB bei mir aus.

Der zweite Controller ist eingerichtet.
Der zweite Controller ist eingerichtet.

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.

Quit RetroArch
Quit RetroArch

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.

Mario Bros. im Menü der EmulationStation (hier mit Bild & Text)
Mario Bros. im Menü der EmulationStation (hier mit Bild & Text)
Der 2-Spielermodus mit zwei Controllern.
Der 2-Spielermodus mit zwei Controllern.

 

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!)

Settings
Settings

Beachtet evtl. wieder das oben beschriebene Problem.

Input
Input
Input Hotkey Binds
Input Hotkey Binds

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

Den Hotkey ändern
Enable hotkey
GUIDE-Button drücken
GUIDE-Button drücken
Statt Auto: 6 steht da jetzt eine 8 für den GUIDE-Button.
Statt „Auto: 6“ steht da jetzt eine „8“ für den GUIDE-Button.

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:

Button zum Verlassen festlegen
Button zum Verlassen festlegen
Neue Taste, um das Menü zu öffnen.
Neue Taste, um das Menü zu öffnen.

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ü.

Die RetroArch-Oberfläche (RGUI)
Die RetroArch-Oberfläche (RGUI)

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.

In diesen Verzeichnisssen könnt ihr Einstellungen für den jeweiligen Emulator hinterlegen.
In diesen Verzeichnisssen könnt ihr Einstellungen für den jeweiligen Emulator hinterlegen.

Ihr könnt mittlerweile auf diese Ordner auch direkt übers Netzwerk zugreifen. Schaut einfach in das \\retropie\configs-Verzeichnis.

Auch übers Netzwerk habt ihr Zugriff auf den „configs“-Ordner
Auch übers Netzwerk habt ihr Zugriff auf den „configs“-Ordner

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.

Geschafft, nur eine LED leuchtet.
Geschafft, nur eine LED leuchtet.

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.


Schrott!!Naja...Geht so...Ganz gut...SUPER! (2 Bewertungen | Ø 5,00 von 5 | 100,00%)

Loading...


 

<<< zurück | weiter >>>