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 | Windows/Linux/Mac | Has a free multiplayer-enabled build called LDN 3.1.3 on Patreon

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 | Fork by longtime former contributor of Citra receiving additional development from GPUCode (another longtime contributor)

Sony Consoles

Playstation | DuckStation | Windows/Linux/Mac/Android

Playstation 2 | PCSX2 | Windows/Linux/Mac

Playstation 3 | RPCS3 | Windows/Linux/Mac

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.

  • DickFuckarelli [he/him]
    ·
    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]
      hexagon
      ·
      1 year ago

      Would you mind linking some resources to learn more about FPGA? I'm loosely familiar with its goal/mission but I'd love to have some information about it available in this thread.

      • DickFuckarelli [he/him]
        ·
        1 year ago

        https://misterfpga.org/ This is usually where the power users interact with the coders. Also has a new user section.

        https://github.com/MiSTer-devel This is where all the dev stuff resides

        https://www.youtube.com/watch?v=rhT6YYRH1EI This is a great video for the uninitiated, but it is now a little dated.

        https://www.youtube.com/@LusRetroSource This dude has weekly MiSTer updates and it's worth scoping his stuff at least once a month to have some idea what's coming down the pike.