Here are some educational resources/explanations for the games community about emulation and other game-related tools.

Note: Check my top-level replies in this thread as I ran out of text in the post

[Informational Resources]

Reddit’s ROM Megathread - Unaffiliated with this site

Emulation Wiki

[Emulation as a field]

Emulation is the process of re-implementing the functionality of something (hardware and/or software) in a separate software environment. You’re probably most most familiar in the term as it relates to game system emulation- like the Dolphin Wii and Gamecube emulator, but it’s actually much broader than that.

While emulation does cover physical systems, it can also cover things that strictly exist as software. If you’ve ever played on WoW or any other MMO private servers, the actual underlying software that was being run was likely a server emulator (or in rare cases the actual official server software itself may have leaked or released).

These server emulators are created by analyzing the network information exchange (packets) sent from the game client to the server and those received by the client from the server. A painstaking and brutal process of analyzing these packets allows server reverse-engineering projects to then re-implement the functionality of the official servers, and then we can point the game client towards our reverse-engineered private server (that speaks the exact same “language” as the official servers). This then allows the private servers to provide additional or changed functionality (for example, more exp per quest) which allows a much more customizable experience.

Emulation can also be used to re-implement vendor solutions like the Steam API which provides various utilities like DRM (which the emulator could choose to ignore). A great example of an emulator in this regard is the Goldberg Emulator.

Let’s say you’ve acquired (through legal purchase only of course) the clean steam files for a game and want to run it offline. Normally you wouldn’t be able to because the steamworks DRM check wouldn’t be able to authenticate against the official steam servers. If we instead replace the steam_api.dll (this could also be named steam_api64.dll depending on the game) with the one provided by the Goldberg Emulator, when the game makes the check for the steamworks drm authentication status, the Goldberg Emulator’s implementation of steam_api.dll will simply return true and let us play our game offline. The game itself just knows that it asked for a DRM verification check to a service, and the Goldberg variant of steam_api.dll looks (to the game) exactly like the “real” version, except that it always returns that the steamworks DRM has been verified.

Refer to the readme within the Goldberg project for more information about what to do with specific games. Also take note that this only works with games that only use steamworks drm (most of them) and games using other/multiple DRM solutions won’t work with this method only for offline play.

[Console Emulators]

All of the emulators listed below are my personal per-console pick. Each is at least in the recommended section of a great general emulation resource, the Emulation Wiki

Game Platform | Emulator Name | Emulation Platform | Comments

Nintendo Consoles

NES | Ares | Windows/Linux/Mac

SNES | Ares | Windows/Linux/Mac

SNES | bsnes-hd | Windows/Linux/Mac | Widescreen modifications for some SNES games

N64 | Simple64 | Windows/Linux | N64 emulation has a lot of viable candidate emulators, check the page here

GC | Dolphin | Windows/Linux/Mac/Android

Wii | Dolphin | Windows/Linux/Mac/Android

Wii U | Cemu | Windows/Linux

Switch | Ryujinx | Killed by Nintendo 10/1/2024

Switch | Yuzu | Windows/Linux/Android | Killed by Nintendo 3/4/2024

Nintendo Handhelds

GB/C | mGBA | Windows/Linux/Mac

GBA | mGBA | Windows/Linux/Mac

DS | MelonDS | Windows/Linux/Mac/Android

3DS | Citra (PabloMK7 Fork) | Windows/Linux/Mac/Android | UPDATE 10/31/2024 Pablomk7 will be joining efforts with Lime3DS on a new project in the near future

Sony Consoles

Playstation | DuckStation | Windows/Linux/Mac/Android

Playstation 2 | PCSX2 | Windows/Linux/Mac

Playstation 3 | RPCS3 | Windows/Linux/Mac

Playstation 4 | ShadPS4 | Windows/Linux/Mac | Heavily experimental and not for casual use yet

Sony Handhelds

PSP | PPSSPP | Windows/Linux/Mac/Android

PSVita | Vita3K | Windows/Linux/Mac

Sega Consoles

Sega Master System | Ares | Windows/Linux/Mac

Genesis | Ares | Windows/Linux/Mac

Saturn | Mednafen | Windows/Linux

Dreamcast | Flycast | Windows/Linux/Mac/Android

Microsoft Consoles

Xbox | Xemu | Windows/Linux/Mac

Xbox 360 | Xenia | Windows

Apple Phones

iOS 2.x | TouchHLE | Windows/Mac/Android

[Graphics Packs]

A lot of emulators have texture replacement capabilities built into them. What this means is that users can manually and/or AI upscale textures from the game into higher resolution or outright replace them with other textures. There aren’t currently (that I’m aware of) area that have consolidated links to these things, so you’ll unfortunately have to search individual project forums and look for texture or graphic packs links.

Some known graphics packs repositories:

Dolphin Forums

Citra Forums Killed by Nintendo 3/4/2024; waiting for the dust to settle for recommendations

[Graphics API Translation Layers]

Sometimes there are scenarios where a game may only use DirectX to draw it’s rendered graphics to screen and we may not want this. This could be for performance reasons (maybe the Vulkan graphics api has better performance, maybe DirectX isn’t available on our OS, or maybe the DirectX version is really old and not properly supported by our OS/GPU/Driver combination). In these instances we can use translations layers to translate DirectX graphics api calls into Vulkan calls using utilities like DXVK . Explaining which files to copy over depends on a per-DirectX version basis, so you’ll have to use a combination of the PCGamingWiki and DXVK documentation to figure out which files to replace.

[Graphics Post-Processing]

With a utility called ReShade we’re able to inject various post-processing effects into the final stage of the graphic rendering pipelines of games. This allows you to adjust color curves, inject path-traced global illumination (a method like ray-tracing), and add a bunch of other effects to DirectX9/11/12/Vulkan games.

  • makotech222 [he/him]@hexbear.net
    link
    fedilink
    English
    arrow-up
    10
    ·
    1 year ago

    hell yeah, great thread. i got my start in programming from contributing to emulators like PPSSPP and Citra. If you’ve used cheats or fps limit in either of those emulators, thats from me :)

    I also have a PR out for a fps limiter in Ryujinx right now

  • riseuppikmin [he/him]@hexbear.netOP
    link
    fedilink
    English
    arrow-up
    3
    ·
    edit-2
    1 year ago

    [Engine Reimplementations]

    This is a relatively new area that gaining a bunch of steam right now where people re-make the engines (the thing that actually runs a game) for older games in order to support newer hardware and vastly broaden the scope of modding functionality. Essentially what these projects do are take the assets from a game (textures, models, etc) and then load them into a a modernized game client (with all the bells and whistles you’d expect from a modern project in terms of graphics settings and compatibility). Most of these projects require a subset of the original game files to run, so make sure you acquire them prior to running these projects.

    Projects

    OpenMW - a Morrowind engine re-implementation

    TES3MP - an OpenMW fork focused on multiplayer support

    OpenRCT2 - a Rollercoaster Tycoon 1 and 2 engine reimplementation that greatly boosts compatibility, removes legacy game restrictions (park size, number of rides in park, number of decoration in park) as well as adding online multiplayer

    OpenTTD - A Transport Tycoon Deluxe reimplementation that I’m not especially familiar with but I see get good mentions

    [Game Decompilation Projects]

    A more recent trend falls under the umbrella of game decompilation. The goals of these projects are to reverse-engineer games in a way that results in source code that when coupled with a games assets will produce a 1:1 exact replica of the ROM it was reverse-engineered from. Once this feat is accomplished (and more complex things like shiftability have been achieved) people can take the functioning source code and build around/on top of it to add new functionality, change existing functionality, and create native ports for various new platforms.

    For more information, search around the internet for game decompilation projects and reference this thread as a decent starting point for tracking projects.

    Some games with WIP or finished PC ports include:

    The Legend of Zelda: A Link to the Past

    The Legend of Zelda: Ocarina of Time

    Super Mario 64

    Jak and Daxter: The Precursor Legacy

    Sonic Mania

    Super Metroid

    Super Mario World

    [Notable Game Mods and Fan-Remakes]

    PrimeHack - native mouse and keyboard controls for the Wii Metroid Prime Trilogy games. This is a Dolphin emulator fork.

    AM2R - Another Metroid 2 Remake

    DSP Nebula Mod - Multiplayer mod for Dyson Sphere Program

    Nehrim - Mod using the Oblivion engine to build a unique fantasy story independent of the elder scrolls universe

    Enderal - The sequel to Nehrim using the Skyrim engine to build a unique fantasy story independent of the elder scrolls universe and probably one of the best WRPGs of all time

    Nitrox - Subnautica Multiplayer mod

    Stardew Valley Expanded - an absurdly impressive mode for Stardew Valley that explodes the amount of content in the game

    Space Exploration; Bob’s mods; Angel’s Mods - 3 separate incredible mods for Factorio

      • riseuppikmin [he/him]@hexbear.netOP
        link
        fedilink
        English
        arrow-up
        3
        ·
        1 year ago

        It’s worth checking the Xenia compatibility list to see what game-to-game progress is. This is one of the emulators I’m least familiar with so I unfortunately can’t help more

    • riseuppikmin [he/him]@hexbear.netOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      Xemu is making consistent progress and is worth checking out. Phantom Dust seems to be marked as playable so I’d definitely give it a shot. Insignia is an Xbox Live emulator that has made strides recently trying to revive functionality for a bunch of games so keep an eye on it.

      Also because I’m not familiar with Phantom Dust care to share some about it?

      • axont [she/her, comrade/them]@hexbear.net
        link
        fedilink
        English
        arrow-up
        1
        ·
        edit-2
        1 year ago

        It’s a difficult to explain game without playing it. It’s third person, you control a character where you go around an area picking up orbs that correspond to different abilities. The orbs are kind of like cards in a card game, all magic spells. You’ve got stuff like close range magic sword strikes, heals, buffs, fireballs, magic missile things. It’s awesome. A lot of the strategy in the multiplayer games is deciding if you should find orbs to level up your skills or go hunt down the other players before they get too powerful, it’s a neat balance.

        The environments are great, really destructable. You can shoot a guy with a fireball into a concrete wall and it’ll make a big crater. You can knock over street lights and stuff too, it’s actually pretty impressive how good the environments and physics in a 2004 original Xbox game.

    • jabrd [he/him]@hexbear.net
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Seconding. Been trying to find a way to play the original Mech Assault again without having to buy a refurbished Xbox

    • riseuppikmin [he/him]@hexbear.netOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      11 months ago

      This one is gonna be fairly experimental because I’m not especially knowledgeable on integrated graphics, but I would definitely give Dolphin (Nightly build) a shot (and please report back because I’d like to know). If I had to guess I would say GameCube games other than the two Star Wars Squadrons games will probably be perfectly playable (possibly with resolution enhancements as well). Wii games I would also expect to be overwhelmingly playable.

      Vita3k is in a much earlier state than Dolphin in terms of being a complete and optimized solution (although it has had a ton of progress in the past year), so it might be out of reach.

      RPCS3/Xenia are definite no’s, but I’d also be curious what Cemu (Wii U) performance would be like.

      Also on the laptop make sure to set battery to performance mode (if it doesn’t switch automatically) when trying any of these.

      My hunch is that the Vulkan renderer will probably perform better than DX11/12 on integrated.

      If you have more questions please drop them here I’m glad to help.

  • neo [he/him]@hexbear.net
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    It is extremely worth saying that Ares has very high system requirements, partly due to the fact that it emulates systems with extremely high accuracy. And, if I understand its roots correctly, because it wasn’t written specifically to be clever and fast, but to be more documentary in its code style. So while it is a great choice, here are some options that won’t slam your CPU as hard:

    NES: FCEUX SNES: SNES9X Genesis: Kega Fusion is decent. I haven’t tried BlastEm

  • DickFuckarelli [he/him]@hexbear.net
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    Good thread.

    Also worth noting the MiSTer project which recreates, or emulates, hardware architecture via FPGAs. For most casual users, it’s not worth the hassle of this type of recreation vs software emulation. However, most MiSTer cores are nearly indistinguishable from the original hardware which is very exciting from a preservation aspect, with the added benefit of being (mostly) lag free and super accurate. The only real downside is the current FPGA technology seems to top out at around Playstation 1, possibly N64.

    Highly recommended.

    • riseuppikmin [he/him]@hexbear.netOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      1 year ago

      Most game “cracks” that you see are actually just people distributing steam service emulators like goldberg (among a few others). There are exceptions (like games with Denuvo or other non-steam DRM solutions), but the overwhelming majority are doing exactly what you just learned about.

  • KimJongGoku [comrade/them]@hexbear.net
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    This isn’t quite directly about emulation itself, but if you’re the kind of person who enjoys cheap dopamine hits in the form of video game achievements and want some of those while emulating older games you should definitely check out RetroAchievements!

    The way it works is that some emulator cores (including some listed in the OP) support it by exposing their memory in a way that lets members of the RA community script conditions under which an emulator frontend or custom RA version of the emulator automatically unlocks the achievement for your account, a lot like PlayStation achievements. It’s super easy to use if you just want to start unlocking stuff, especially with a frontend like RetroArch or bizhawk.

    The whole thing is a collaborative effort and it’s already supporting more than 7000 games and a ton of consoles. If you want to try making an achievement set yourself it’s really not that hard to get started either even with very minimal programming knowledge since there is decent documentation and people are fairly helpful if you want contribute.

    • riseuppikmin [he/him]@hexbear.netOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      1 year ago

      I’d love a write up about BizHawk/RetroArch here but they aren’t things I use and didn’t feel I could explain them well enough. If you have the time to take to explain them for other users it’d be great for this thread.