Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3.

Related tags

c retroarch libretro
Overview

Build Status Coverity Scan Build Status Crowdin

RetroArch

RetroArch is the reference frontend for the libretro API. Popular examples of implementations for this API includes video game system emulators and game engines as well as more generalized 3D programs. These programs are instantiated as dynamic libraries. We refer to these as "libretro cores".

XMB menu driver

rgui menu driver

glui menu driver

ozone menu driver

libretro

libretro is an API that exposes generic audio/video/input callbacks. A frontend for libretro (such as RetroArch) handles video output, audio output, input and application lifecycle. A libretro core written in portable C or C++ can run seamlessly on many platforms with very little to no porting effort.

While RetroArch is the reference frontend for libretro, several other projects have used the libretro interface to include support for emulators and/or game engines. libretro is completely open and free for anyone to use.

libretro API header

Binaries

Latest binaries are currently hosted on the buildbot.

Support

To reach developers, either make an issue here on GitHub, make a thread on the forum, chat on discord, or visit our IRC channel: #retroarch @ irc.freenode.org. You could create a post in Reddit with Technical Support flair.

Documentation

See our Documentation Center. On Unix, man-pages are provided. More developer-centric stuff is found here.

Related projects

Philosophy

RetroArch attempts to be small and lean while still having all the useful core features expected from an emulator. It is designed to be very portable and features a gamepad-centric and touchscreen UI. It also has a full-featured command-line interface.

In some areas, RetroArch goes beyond and emphasizes on not-so-common technical features such as multi-pass shader support, real-time rewind (Braid-style), video recording (using FFmpeg), run-ahead input latency removal, etc.

RetroArch also emphasizes being easy to integrate into various launcher frontends.

Platforms

RetroArch has been ported to the following platforms:

  • DOS
  • Windows
  • Linux
  • Emscripten (WebAssembly and JavaScript)
  • FreeBSD
  • NetBSD
  • OpenBSD
  • Haiku
  • Solaris
  • macOS (PPC, x86-32 and x86-64)
  • PlayStation 2
  • PlayStation 3
  • PlayStation Portable
  • PlayStation Vita
  • Original Microsoft Xbox
  • Microsoft Xbox 360 (Libxenon/XeXDK)
  • Nintendo GameCube
  • Nintendo Wii
  • Nintendo Wii U
  • Nintendo 3DS/2DS
  • Nintendo Switch
  • Nintendo NES/SNES Classic Edition
  • Raspberry Pi
  • Android
  • iOS
  • Blackberry

Dependencies (PC)

There are no true hard dependencies per se.

On Windows, RetroArch can run with only Win32 as dependency.

On Linux, there are no true dependencies. For optimal usage, the following dependencies come as recommended:

  • GL headers / Vulkan headers
  • X11 headers and libs, or EGL/KMS/GBM

OSX port of RetroArch requires latest versions of XCode to build.

RetroArch can utilize these libraries if enabled:

  • nvidia-cg-toolkit
  • libfreetype2 (TTF font rendering on screen)

RetroArch needs at least one of these audio driver libraries:

  • ALSA
  • OSS
  • RoarAudio
  • RSound
  • OpenAL
  • JACK
  • SDL
  • PulseAudio
  • XAudio2 (Win32, Xbox 360)
  • DirectSound (Win32, Xbox 1)
  • CoreAudio (OSX, iOS)

To run properly, RetroArch requires a libretro implementation present; however, as it's typically loaded dynamically, it's not required at build time.

Dependencies (Console ports, mobile)

Console ports have their own dependencies, but generally do not require anything other than what the respective SDKs provide.

Configuring

The default configuration is defined in config.def.h. It is not recommended to change this unless you know what you're doing. These can later be tweaked by using a config file. A sample configuration file is installed to /etc/retroarch.cfg. This is the system-wide config file.

RetroArch will on startup create a config file in $XDG\_CONFIG\_HOME/retroarch/retroarch.cfg if it does not exist. Users only need to configure a certain option if the desired value deviates from the value defined in config.def.h.

To configure joypads, use the built-in menu or the retroarch-joyconfig command-line tool.

Compiling and installing

Instructions for compiling and installing RetroArch can be found in the Libretro/RetroArch Documentation Center.

CRT 15Khz Resolution Switching

CRT SwitchRes will turn on, on the fly. However, you will need to restart RetroArch to disable it. With CRT SwitchRes enable RetroArch will start in 2560 x 480 @ 60.

If you are running Windows, before enabling the CRT SwitchRes options please make sure you have installed CRTEmudriver and installed some modelines. The minimum modelines for all games to switch correctly are:

  • 2560 x 192 @ 60.000000
  • 2560 x 200 @ 60.000000
  • 2560 x 240 @ 60.000000
  • 2560 x 224 @ 60.000000
  • 2560 x 237 @ 60.000000
  • 2560 x 256 @ 50.000000
  • 2560 x 254 @ 55.000000
  • 2560 x 448 @ 60.000000
  • 2560 x 480 @ 60.000000

Install these modelines replacing 2560 with your desired super resolution. The above resolutions are NTSC only so if you would be playing any PAL content please add PAL modelines:

  • 2560 x 192 @ 50.000000
  • 2560 x 200 @ 50.000000
  • 2560 x 240 @ 50.000000
  • 2560 x 224 @ 50.000000
  • 2560 x 288 @ 50.000000
  • 2560 x 237 @ 50.000000
  • 2560 x 254 @ 55.000000
  • 2560 x 448 @ 50.000000
  • 2560 x 480 @ 50.000000

Some games will require higher PAL resolutions which should also be installed:

  • 2560 x 512 @ 50.000000
  • 2560 x 576 @ 50.000000

Ideally install all these modelines and everything will work great.

Super Resolutions

The default super resolution is 2560. It is displayed just under the CRT switch option, which can be found in video settings. This can be changed within the retroarch.cfg. The only compatible resolutions are 1920, 2560 and 3840. Any other resolutions will be ignored and native switching will be activated.

Native Resolutions

If native resolutions are activated you will need a whole new set of modelines:

  • 256 x 240 @ 50.006977 SNESpal

  • 256 x 448 @ 50.006977 SNESpal

  • 512 x 224 @ 50.006977 SNESpal

  • 512 x 240 @ 50.006977 SNESpal

  • 512 x 448 @ 50.006977 SNESpal

  • 256 x 240 @ 60.098812 SNESntsc

  • 256 x 448 @ 60.098812 SNESntsc

  • 512 x 240 @ 60.098812 SNESntsc

  • 512 x 224 @ 60.098812 SNESntsc

  • 512 x 448 @ 60.098812 SNESntsc

  • 256 x 192 @ 59.922745 MDntsc

  • 256 x 224 @ 59.922745 MDntsc

  • 320 x 224 @ 59.922745 MDntsc

  • 320 x 240 @ 59.922745 MDntsc

  • 320 x 448 @ 59.922745 MDntsc

  • 320 x 480 @ 59.922745 MDntsc

  • 256 x 192 @ 49.701458 MDpal

  • 256 x 224 @ 49.701458 MDpal

  • 320 x 224 @ 49.701458 MDpal

  • 320 x 240 @ 49.701458 MDpal

  • 320 x 288 @ 49.701458 MDpal

  • 320 x 448 @ 49.701458 MDpal

  • 320 x 480 @ 49.701458 MDpal

  • 320 x 576 @ 49.701458 MDpal

  • 256 x 288 @ 49.701458 MSYSpal

  • 256 x 240 @ 60.098812 NESntsc

  • 256 x 240 @ 50.006977 NESpal

  • 640 x 237 @ 60.130001 N64ntsc

  • 640 x 240 @ 60.130001 N64ntsc

  • 640 x 480 @ 60.130001 N64ntsc

  • 640 x 288 @ 50.000000 N64pal

  • 640 x 480 @ 50.000000 N64pal

  • 640 x 576 @ 50.000000 N64pal

  • 256 x 252 @ 49.759998 PSXpal

  • 320 x 252 @ 49.759998 PSXpal

  • 384 x 252 @ 49.759998 PSXpal

  • 640 x 252 @ 49.759998 PSXpal

  • 640 x 540 @ 49.759998 PSXpal

  • 384 x 240 @ 59.941002 PSXntsc

  • 256 x 480 @ 59.941002 PSXntsc

  • 352 x 240 @ 59.820000 Saturn/SGFX_NTSCp

  • 704 x 240 @ 59.820000 SaturnNTSCp

  • 352 x 480 @ 59.820000 SaturnNTSCi

  • 704 x 480 @ 59.820000 SaturnNTSCi

  • 352 x 288 @ 49.701458 SaturnPALp

  • 704 x 288 @ 49.701458 SaturnPALp

  • 352 x 576 @ 49.701458 SaturnPALi

  • 704 x 576 @ 49.701458 SaturnPALi

  • 240 x 160 @ 59.730000 GBA

  • 320 x 200 @ 60.000000 Doom

// Arcade

  • 400 x 254 @ 54.706841 MK
  • 384 x 224 @ 59.637405 CPS1

These modelines are more accurate giving exact hz. However, some games may have unwanted results. This is due to mid-scanline resolution changes on the original hardware. For the best results super resolutions are the way to go.

CRT resolution switching & MAME

Some arcade resolutions can be very different from consumer CRTs. There is resolution detection to ensure MAME games will be displayed in the closest available resolution but drawn at their native resolution within this resolution. Meaning that the MAME game will look just like the original hardware.

MAME ROMs that run in a vertical aspect like DoDonPachi need to be rotated within MAME before resolution switching and aspect correction will work. Do this before enabling CRT SwitchRes so that RetroArch will run in your desktop resolution. Once you have rotated any games that may need it turn CRT SwitchRes on.

Socials

The links below belong to our official channels. Links other than this may have been created by fans, independent members or followers. We seriously recommend using our original resources.

Issues
  • [iOS] retroarch 1.1 -nightly- problems

    [iOS] retroarch 1.1 -nightly- problems

    cant change any settings in core funtions for mupen64 cant change anything in user settings modules folder (no cores) is empty in retroarch app (but download them separately nighly cores) gl shader folder is empty to after open retroarch my phone overheat.

    opened by brujo5 228
  • VFS support

    VFS support

    Work in progress, adding VFS support to RetroArch

    opened by claudiuslollarius 147
  • Niche issue when streaming RA using some shader presets

    Niche issue when streaming RA using some shader presets

    First and foremost consider this:

    • Only RetroArch bugs should be filed here. Not core bugs or game bugs
    • This is not a forum or a help section, this is strictly developer oriented

    This is probably exceptionally low priority and something i'll have to live with. Still - I wanted to make sure it was put out there. As of a few versions back, I am no longer able to stream RA properly, at least in the means I have for a long time now. Unfortunately I'm a serial updater, and ive had a good week off of playing, so i cant say exactly what or when caused the regression.

    The short of it is this.

    I have content directory shader presets set up. In this case, for beetle psx hw. I load a game from said playlist, config override kicks in and positions window properly/places within overlay, and shader preset kicks in which ties into the configured sizing present in the config.

    this has stopped working if I am streaming and if im using my go-to shader that I have set up (ctr guest dr venom.) I stream via steam BPM via steam link app and if I load retroarch and load any playlist which uses that shader, I get a black screen with audio. This also happens with several other higher end crt shaders.

    If i come back to my pc, the image is on the screen, but is without color. If i remove the shader preset, all is fine. If i load a basic shader such as Geom's as a preset, that works fine as well.

    One other oddity. If i load a game via command line/shortcut direct from steam, it works fine. ONLY if i load it via retroarch itself does it fail.

    Im not sure if something a few versions back changed the priority or order these things were drawn or loaded - but definitely puts a damper on my vastly preferred means of playing.

    at current my options are command line shortcuts/launching of any game i want to play that uses that shader. The removal of those shader presets entirely from ~30 playlists and go with something basic like geoms, and resize all my config files to accomodate. Or, play exclusively from my pc.

    This could very well stem elsewhere, however I did try several different gpu drivers just in case. Also tried removing curve to eliminate that as being a potential variable as i know royale fails when curve is added to the picture.

    The strange part is, if i remove the preset, and load it manually after the game is loaded - it works just fine as well. its purely giving me hell when loaded automatically via content directory preset.

    Expected behavior

    The game to display alongside overlay AND shader, instead of overlay + black screen + audio.

    Actual behavior

    See above.

    Steps to reproduce the bug

    1. Launch retroarch via (presumably) a steam link - or in my case the steam link app.
    2. Load a game from a playlist that uses crt-guest-dr-venom
    3. note everything loads, (can see overlay, audio is playing) the gameplay area is black.

    Bisect Results

    I cant say exactly, as ive been not playing (but updating) for the past week or so. But its very recent.

    Version/Commit

    You can find this information under Information/System Information

    • RetroArch: 1.78 9a36851beb

    Environment information

    Windows 10

    opened by klepp0906 121
  • [Feature request] GXM driver for hardware acceleration on PS Vita

    [Feature request] GXM driver for hardware acceleration on PS Vita

    As of today, RetroArch / Libretro on the PS Vita is using software rendering. This is preventing cores from using the full potential of the device in terms of, of course, 3D emulation, but hardware acceleration could also do wonders for 2D display.

    Examples of GXM code found here : https://github.com/xerpi/gxmfun A little bit more context here : https://www.reddit.com/r/vitahacks/comments/5pbdgo/having_fun_with_libgxm_psvitas_3d_graphics_api/

    opened by kwyxz 105
  • iOS port issues - remaining

    iOS port issues - remaining

    This will be used to track all remaining issues until we feel confident to do a release. Please add to this issue as we go along.

    • (tested with PCSX ReARMed and verified there is an issue) - There seem to be pretty big savestate conflict problems right now. If I have a savestate saved on slot 1 for Soul Blade and if I then try to load state 1 in Resident Evil 2, it will actually load Soul Blade (!!!).

    I have also noticed saved states overwriting themselves this way.

    Meancoot - try to use the RGUI savestate functions in combination with the Cocoa savestate slots and tell me if you see any problems of the sort occurring.

    NOTE: I am using real BIOS files. Put the required BIOS files into Documents/.RetroArch

    opened by twinaphex 85
  • Video width and height are switched when a vertically-oriented game is loaded

    Video width and height are switched when a vertically-oriented game is loaded

    Description

    With vertically oriented games, Retroarch switches the emulator-provided width and height. For example, if the width/height is supposed to be 320x240, RA will switch this to 240x320. This only occurs with vertically oriented games. I tested this in both MAME and FBA using the Windows 64 bit version of RA.

    Expected behavior

    The game to be displayed using the correct resolution (width/height).

    Actual behavior

    The height and width is switched when a vertically oriented game is loaded.

    Steps to reproduce the bug

    1. load any vertically oriented game in either FBA or MAME using Windows 64 bit version of RA (example: DonPachi)
    2. under video settings, enable integer scale.
    3. set "custom aspect ratio width/height" to 1x.
    4. look at "custom aspect ratio width/height" to see that it says 240 for width and 320 for height. This is the reverse of what it should be; it should be 240 for height and 320 for width.

    Bisect Results

    I first noticed this a few days ago.

    Version/Commit

    You can find this information under Information/System Information

    • RetroArch: 1.7.6 Git version: 9750719074

    Environment information

    • OS: Windows 10
    • Compiler: NA

    image

    image

    opened by Patrickdroid 82
  • Vulkan video driver in fullscreen on GeForce Driver 387.92 causing black screen

    Vulkan video driver in fullscreen on GeForce Driver 387.92 causing black screen

    Description

    With the new nVidia GeForce 387.92 video driver, the RetroArch Vulkan video driver only displays a black screen when starting any emulator. This only occurs in fullscreen mode. If you run in Windowed mode or alt-tab out of RetroArch and back in, then you'll get an image again (unless you change a resolution setting in the emulator causing the video driver to initialize).

    nVidia's driver release notes say the following relating to the issue:

    Implemented improved behavior for full-screen Vulkan swapchains using VK_KHR_win32_surface.

    This optimization will cause more events that trigger an out-of-date swapchain, such as when entering or leaving full-screen mode (typically by pressing Alt+tab). Applications that do not properly respond to the VK_ERROR_OUT_OF_DATE_KHR return code may not function properly when these events occur. See the WSI Swapchain section of the Vulkan specification.

    Other users reporting the issue here: https://forums.libretro.com/t/vulkan-full-screen-broken-with-new-nvidia-drivers-387-92-win10/12691

    Expected behavior

    Video to be displayed normally.

    Actual behavior

    Screen goes black when starting any emulator

    Steps to reproduce the bug

    1. Install nVidia Geforce Driver 387.92
    2. Start any emulator in-game
    3. Experience the black screen
    4. Exit Fullscreen or simply alt-tab out and back in to get the image back

    Bisect Results

    Only occurs with 387.92 and up nVidia driver. Rolling back to 385.69 works fine.

    Version/Commit

    • RetroArch: 1.6.3 - 1.6.7

    Environment information

    • OS: Windows 10 64-bit 1703 (Creators Update)
    • HW: GeForce GTX 1070
    bounty 
    opened by WhiteZeroX 80
  • IOS9/Pangu: Instant Crash

    IOS9/Pangu: Instant Crash

    I'm running the Pangu jailbreak on IOS 9.0.2 and it seems no matter which version of Retroarch I get (or where I get it from), the problem is the same: The app installs fine, but when I tap it it loads for a split second and then returns me to my icons. I tap the home button and it's running in the background, switch to it, and I'm returned (once again) to my icons. I'm assuming it's a problem due to the new IOS + Jailbreak but I'm not entirely sure.

    This happened on 1.0.0.1 from the ZoDTTD repo, 1.0.0.2 from the buildbot page and both versions from the Kromite repo (http://kromite.github.io).

    I've heard a lot of ranting about date / time, but this had no effect on the outcome.

    bug: major 
    opened by thecoreyburton 80
  • Fetch translation from Crowdin

    Fetch translation from Crowdin

    Guidelines

    1. Rebase before opening a pull request
    2. If you are sending several unrelated fixes or features, use a branch and a separate pull request for each
    3. If possible try squashing everything in a single commit. This is particularly beneficial in the case of feature merges since it allows easy bisecting when a problem arises

    Description

    Fetch translation from Crowdin. Update python script to support UTF-8 better and fix some key mismatch.

    Related Issues

    Related Pull Requests

    Reviewers

    opened by guoyunhe 79
  • [Wii U] DSI Error on launching Roms with Retroarch 1.67

    [Wii U] DSI Error on launching Roms with Retroarch 1.67

    img_0368

    DSI error ocurring randomly when launching ROMs under 1.67.

    FBA mainline core seems to trigger it most often. Usually the first ROM will load ok, while subsequent ROMs may trigger the error.

    Setup: Wii U 5.5.1, CBHC, launching Retroarch from channel. Same setup working fine previously, tried fresh .cfg as well with same results.

    platform: wiiu 
    opened by retrob0t 78
  • Retroarch doesn't launch on steam

    Retroarch doesn't launch on steam

    Description

    Retroarch doesn't launch on Steam

    Expected behavior

    Retroarch should launch after clicking play on Steam

    Actual behavior

    Retroarch doesn't launch after clicking play on Steam

    Steps to reproduce the bug

    1. Launch steam
    2. Launch Retroarch on steam

    Bisect Results

    This started happening since i download Retroarch on steam and tried to launch, curiously if try multiples times appears a pop up of AppImage saying if i want to integrate the app or run once, when i run once Retroarch starts but without steam overlay. Also, if i manually start the AppImage of Retroarch in the app folder it works. I launched Steam on terminal and pasted the results here, https://pastebin.com/Af09fqHb

    Version/Commit

    • RetroArch: 1.9.10

    Environment information

    • OS: Manjaro Linux 21.1.3
    opened by Blackmateus901 0
  • [Feature Request]

    [Feature Request] "Quit RetroArch" menu option for iOS

    Description

    RetroArch on iOS does not have the Quit option in the main menu.

    Not sure if the option missing is a technical feature implemented over the years, but at least on modern iOS I can quit gracefully by hitting ESC twice on a keyboard. Can the same quit hook be used for the menu option?

    What ends up happening is I change some settings and inevitably forget to save the config manually, quit via the application switcher (which is NOT GRACEFUL), and it doesn't auto save the config (works when pressing ESC twice)

    Expected behavior

    Being able to exit RetroArch via the menu (either via touch or controller)

    Actual behavior

    Option is missing.

    Version/Commit

    • RetroArch: 1.9.10/nightly

    Environment information

    • OS: iOS 14.8
    opened by parkerlreed 0
  • Crash on manual scan for MAME with mameinfo.dat file

    Crash on manual scan for MAME with mameinfo.dat file

    Description

    Using retroarch v1.9.9 and MAME (current) core (0.235), manually scanning a folder for roms and specifying the Arcade DAT file mameinfo.dat from this page retroarch crashes and no log information is generated about the crash, even if set to Debug.

    Expected behavior

    Retroarch should not crash and MAME playlist should be generated (ideally with the correct names).

    Actual behavior

    Retroarch crashes and it doesn't generate a log file that indicates any information about the crash.

    Steps to reproduce the bug

    1. Import content -> Manual scan
    2. Content directory pointing to ROMS folder
    3. System name set to "MAME"
    4. Default Core set to "Arcade (MAME - Current)
    5. Scan recursively and Scan inside Archives set to "ON"
    6. Arcade DAT File pointing to mameinfo.dat file, downloaded from site above
    7. Start scan
    8. Retroarch crashes

    Version/Commit

    • Build Date: Sep 6 2021
    • Version 1.9.9
    • Git Version: 36888612eb

    Environment information

    • OS: Archlinux
    • Compiler: GCC(11.1.0) 64-bit (installed through pacman, I didn't compile it myself)
    opened by betovidal 0
  • Support saving and loading directly into states 0 through 9

    Support saving and loading directly into states 0 through 9

    Guidelines

    1. Rebase before opening a pull request
    2. If you are sending several unrelated fixes or features, use a branch and a separate pull request for each
    3. If possible try squashing everything in a single commit. This is particularly beneficial in the case of feature merges since it allows easy bisecting when a problem arises

    Description

    This PR adds new hotkeys for directly saving and loading into save states. More details:

    • The savestate_max_direct_slot setting determines the highest slot that can be used with the hotkeys. For example, if this value is 1, hotkeys for directly saving and loading slots 0 and 1 can be used. This defaults to -1, which disables the feature.
    • Similarly, the options and bindings for the direct slots won't show up in the Hotkeys menu if the slot is greater than savestate_max_direct_slot.
    • None of the new hotkeys are binded by default.

    MaxDirectSaveStateSlot

    DirectSaveStates

    Related Issues

    https://github.com/libretro/RetroArch/issues/12990

    Reviewers

    @jdgleaver @twinaphex @bozothegeek

    opened by kimimaru4000 2
  • Add environment callback to get the rate retro_run is called

    Add environment callback to get the rate retro_run is called

    Description

    In my endeavor to add automatic performance scaling to a non-multi-threaded DOSBox core I ran into the problem that a core cannot feasibly distinct between these 3 scenarios:

    • The core uses too much CPU time
    • The user has activated slow-motion
    • VSync is active and limiting the call-rate of retro_run

    Only the first of these scenarios actually require the core to lower it's automatically scaling performance requirements. Without this extension I cannot properly support the features used in the other two scenarios while automatic performance scaling is active.

    So this PR adds a new environment callback RETRO_ENVIRONMENT_GET_THROTTLE_STATE to ask the frontend about some details on what the actual rate it tries to call retro_run() and why.

    The relevant sections of the API are as follows:

    #define RETRO_ENVIRONMENT_GET_THROTTLE_STATE (70 | RETRO_ENVIRONMENT_EXPERIMENTAL)
                                               /* struct retro_throttle_state * --
                                                * Allows an implementation to get details on the actual rate
                                                * the frontend is attempting to call retro_run().
                                                */
    
    enum retro_throttle_mode
    {
       /* During normal operation, rate will be equal to the core's FPS. */
       RETRO_THROTTLE_NONE              = 0,
    
       /* While paused or stepping single frames, rate will be 0. */
       RETRO_THROTTLE_FRAME_STEPPING    = 1,
    
       /* During fast forwarding.
        * Rate will be 0 if not specifically limited to a maximum speed. */
       RETRO_THROTTLE_FAST_FORWARD      = 2,
    
       /* During slow motion. Rate will be less than the core's internal FPS. */
       RETRO_THROTTLE_SLOW_MOTION       = 3,
    
       /* Rewinding recorded save states. Rate can vary depending on the rewind
        * speed or be 0 if the frontend is not aiming for a specific rate. */
       RETRO_THROTTLE_REWINDING         = 4,
    
       /* While vsync is active in the video driver and the target refresh rate is
        * lower than the core's internal FPS. Rate is the target refresh rate. */
       RETRO_THROTTLE_VSYNC             = 5,
    };
    
    struct retro_throttle_state
    {
       /* The current throttling mode. */
       enum retro_throttle_mode mode;
    
       /* How many times per second the frontend tries calls retro_run.
        * Depending on the mode, it can be 0 if there is no known fixed rate.
        * This won't be accurate if the total processing time of the core and
        * the frontend is longer than what is available for one frame. */
       float rate;
    };
    

    (I appended | RETRO_ENVIRONMENT_EXPERIMENTAL because RETRO_ENVIRONMENT_GET_FASTFORWARDING also has it, not sure if that is needed or not)

    If this environment callback is available, it can be used instead of RETRO_ENVIRONMENT_GET_FASTFORWARDING. A core can be backwards compatible by using something like this:

    	retro_throttle_state throttle = { RETRO_THROTTLE_NONE };
    	if (!environ_cb(RETRO_ENVIRONMENT_GET_THROTTLE_STATE, &throttle))
    	{
    		bool fast_forward = false;
    		if (environ_cb(RETRO_ENVIRONMENT_GET_FASTFORWARDING, &fast_forward) && fast_forward)
    			dbp_throttle.mode = RETRO_THROTTLE_FAST_FORWARD;
    	}
    

    This is my first PR that modifies libretro.h so I'm open to any feedback or request for change.

    Reviewers

    @jdgleaver

    opened by schellingb 4
  • No sound in recorded or streamed video stream

    No sound in recorded or streamed video stream

    Description

    While recording to a local file, or streaming, there is no sound included in the video stream.

    Expected behavior

    Sound included in the stream.

    Actual behavior

    Both recording to a local file, as well as streaming to twitch, seems to work perfectly, except for the little annoyance of there being no sound produced in the stream.

    The sound in the game itself, while playing, is there.

    I'm using pulseaudio, and this is what ffprobe has to say about a recorded file:

    Input #0, matroska,webm, from 'Addams Family, The (USA, Europe)-210920-142325.mkv':
      Metadata:
        title           : RetroArch Video Dump
        ENCODER         : Lavf58.76.100
      Duration: 00:00:15.79, start: 0.000000, bitrate: 104 kb/s
      Stream #0:0: Video: h264 (High), yuv420p(progressive), 256x224 [SAR 5:4 DAR 10:7], 62.50 fps, 59.94 tbr, 1k tbn, 119.85 tbc (default)
        Metadata:
          DURATION        : 00:00:15.787000000
      Stream #0:1: Audio: aac, 64000 Hz, stereo, fltp (default)
        Metadata:
          DURATION        : 00:00:00.000000000
    

    Bisect Results

    It has been this way since I started using retroarch a few days ago.

    Version/Commit

    • RetroArch: v1.9.9 -- 36888612eb

    Environment information

    • OS: Manjaro 5.14.2
    opened by trapd00r 0
  • [Feature Request] APNG support

    [Feature Request] APNG support

    While somewhat infrequently used in general, apng support would allow users to add motion screenshots for their games, animated backgrounds, and -potentially- animated achievement icons down the line (I won't be pursuing implementation of that unless support can be added). I inquired on Discord and apparently it -appears- it should be simple to implement. Of course, as with anything involving the menu code, I realize that may be far from the truth.

    opened by Sanaki 0
  • [3DS] Vertical games rotate the top screen the wrong way

    [3DS] Vertical games rotate the top screen the wrong way

    First and foremost consider this:

    • Only RetroArch bugs should be filed here. Not core bugs or game bugs
    • This is not a forum or a help section, this is strictly developer oriented

    Description

    This is easiest seen with the Beetle Cygne core for WonderSwan, since with that core you can press the select button to rotate the screen.

    This has also been reported with Final Burn cores: https://www.reddit.com/r/RetroArch/comments/pm62zt/fba_and_fb_neo_on_new_3ds_top_screen_display/

    Screenshots from WonderSwan, before and after pressing select: landscape portrait

    Expected behavior

    Vertical screen is right side up.

    Actual behavior

    Vertical screen is upside down.

    Steps to reproduce the bug

    1. Open up content for the Beetle Cygne core for WonderSwan.
    2. Press the select button.

    Bisect Results

    No idea.

    Version/Commit

    You can find this information under Information/System Information

    • RetroArch 1.9.9, Build Date Sep 5 2021

    Environment information

    New Nintendo 3DS XL with system update 11.15.0-47U with custom firmware installed (Luma3DS v10.2.1)

    opened by Tinister 0
  • New feature: Use gamepad combo to quit Retroarch

    New feature: Use gamepad combo to quit Retroarch

    Description

    This is my first Retroarch PR, so please be kind and thorough in code review!

    I built a home arcade with Retroarch. It has no keyboard, just arcade-style joysticks and buttons. I found my young kids couldn't quite understand how to quit Retroarch with the buttons.

    I found the "toggle menu with gamepad combo" feature, and tried to teach my kids how to navigate to the quit option from there, but they couldn't figure it out.

    I tried setting up AutoHotKey to map various joystick buttons to the ESC key on the keyboard, but it's fairly flaky and doesn't handle joysticks being plugged/unplugged (we have Bluetooth gamepads that we use from time to time).

    So, this PR builds on the existing "toggle menu with gamepad combo" feature and:

    1. Refactors the existing "toggle menu" logic and gamepad combo-related enums so they can be reused for non-menu-toggling features
    2. Moves the static timers for the "hold start" / "hold select" combos out into input_driver_state_t so they can be used separately for the "toggle menu" feature and other features which use a gamepad combo
    3. Adds a new config option and menu entry to quit Retroarch with a gamepad combo

    I tested this on macOS 11.5.2 and confirmed both the "hold start" and "hold select" options worked for quit and for toggling the menu.

    Related Issues

    This is another way to address #2670.

    Reviewers

    @jdgleaver was kind enough to inspire me in #12534 to contribute, so thanks to them, and maybe they can take a look as well.

    opened by bhamiltoncx 4
  • [FEATURE REQUEST] Pause to Retroarch frontend when Bluetooth controller is empty

    [FEATURE REQUEST] Pause to Retroarch frontend when Bluetooth controller is empty

    This is something I have been wishing for some time. When a Bluetooth controller disconnects the game should pause to the Retroarch frontend. This is the default behavior of the PlayStation for example. I don't think that any special message from the controller like "I am dying" is required to implement this. Just enter the frontend when the connection is lost - may it be an empty battery or connectivity issues. I think this should also happen for any controller losing connection for fairness when being in a multiplayer session. Best would be only controllers that are actively being used in the current game, but I think that will be harder to detect.

    opened by coldspark29 0
Releases(v1.9.10)
Cross-platform Nestopia emulator core with a GUI

About This project is a fork of the original Nestopia source code, plus the Linux port. The purpose of the project is to make sure people who want a s

0ldsk00l 437 Sep 21, 2021
Snes9x - Portable Super Nintendo Entertainment System (TM) emulator

Snes9x Snes9x - Portable Super Nintendo Entertainment System (TM) emulator This is the official source code repository for the Snes9x project. Please

null 1.6k Sep 15, 2021
Free (as in freedom) open source clone of the Age of Empires II engine :rocket:

openage: a volunteer project to create a free engine clone of the Genie Engine used by Age of Empires, Age of Empires II (HD) and Star Wars: Galactic

[SFT]Technologies 10.5k Sep 14, 2021
⚔️ A cross-platform, open source, and super fast MUD client with scripting in Lua

Mudlet Play immersive, multiplayer, pure-text RPGs on Mudlet. Windows: Linux & MacOS: About • Key Features • Download • How To Use • Roadmap • Credits

Mudlet 474 Sep 14, 2021
Admin, ban, and comms management system for the Source engine

SourceBans++ Global admin, ban, and communication management system for the Source engine Issues If you have an issue you can report it here. To solve

SourceBans++ Dev Team 228 Sep 21, 2021
GZDoom is a feature centric port for all Doom engine games, based on ZDoom, adding an OpenGL renderer and powerful scripting capabilities

Welcome to GZDoom! GZDoom is a modder-friendly OpenGL and Vulkan source port based on the DOOM engine Copyright (c) 1998-2021 ZDoom + GZDoom teams, an

Christoph Oelckers 1.2k Sep 22, 2021
An open source re-implementation of RollerCoaster Tycoon 2 🎢

OpenRCT2 An open-source re-implementation of RollerCoaster Tycoon 2. A construction and management simulation video game that simulates amusement park

OpenRCT2 9.9k Sep 22, 2021
Hardcore 3D space scroll-shooter with spaceship upgrade possibilities.

AstroMenace Installation (Windows, macOS, Linux) Build (Windows) Build (macOS, Linux, BSD) Translators Wanted Work In Progress Donate to Support Devel

Mikhail Kurinnoi 130 Sep 12, 2021
This is a read-only mirror of OpenMW. For latest releases, issue tracking and development, visit our Gitlab page below.

OpenMW OpenMW is an open-source game engine that supports playing Morrowind by Bethesda Softworks. You need to own the game for OpenMW to play Morrowi

null 3.7k Sep 21, 2021
Classic overhead run-and-gun game

Introduction C-Dogs SDL is a classic overhead run-and-gun game, supporting up to 4 players in co-op and deathmatch modes. Customize your player, choos

Cong 506 Sep 15, 2021
A cross-platform virtual tabletop for multiplayer card games

Cockatrice | Download | Get Involved | Community | Translations | Build | Run | License To get started, ⇢ view our webpage To get support or suggest

Cockatrice 1.1k Sep 20, 2021
Modern reimplementation of the Diablo 1 game engine

Hello my friend, stay a while and listen! freeablo is a modern cross platform reimplementation of the game engine used in Diablo 1. As it is just an e

Tom Mason 2.1k Sep 16, 2021
Minetest is an open source voxel game engine with easy modding and game creation

Minetest Minetest is a free open-source voxel game engine with easy modding and game creation. Copyright (C) 2010-2020 Perttu Ahola [email protected]

Minetest 6.3k Sep 17, 2021
Minetest is an open source voxel game engine with easy modding and game creation

Minetest Minetest is a free open-source voxel game engine with easy modding and game creation. Copyright (C) 2010-2020 Perttu Ahola [email protected]

Minetest 6.3k Sep 25, 2021
Open Source real-time strategy game engine for early Westwood games such as Command & Conquer: Red Alert written in C# using SDL and OpenGL. Runs on Windows, Linux, *BSD and Mac OS X.

OpenRA A Libre/Free Real Time Strategy game engine supporting early Westwood classics. Website: http://www.openra.net IRC: #openra on irc.freenode.net

OpenRA 9.8k Sep 15, 2021
A meta-JavaScript adventure game by Alex Nisnevich and Greg Shuflin.

Untrusted —or— the Continuing Adventures of Dr. Eval is an exciting Meta-JavaScript Adventure Game wherein you guide the dashing, steadfast Dr. Eval t

Alex Nisnevich 4.2k Aug 30, 2021
SuperTux source code

SuperTux SuperTux is a jump'n'run game with strong inspiration from the Super Mario Bros. games for the various Nintendo platforms. Run and jump throu

SuperTux 1.2k Sep 15, 2021
♞ lichess.org: the forever free, adless and open source chess server ♞

lichess.org Lila (li[chess in sca]la) is a free online chess game server focused on realtime gameplay and ease of use. It features a search engine, co

Thibault Duplessis 10k Sep 22, 2021
Freedoom is an entirely free software game based on the Doom engine.

Freedoom The Freedoom project aims to create a complete, free content first person shooter game, but Freedoom by itself is just the raw material for a

null 635 Sep 13, 2021