r/emulation

ShadPS4 v1.17.0 - basic netplay, compression support, macOS improvements, bugfixes and enhancements
▲ 218 r/emulation+1 crossposts

ShadPS4 v1.17.0 - basic netplay, compression support, macOS improvements, bugfixes and enhancements

#shadPS4 v0.17.0: https://github.com/shadps4-emu/shadPS4/releases/tag/v.0.17.0

Welcome to another big release of shadPS4. This release is the first to introduce shadnet support, which although still doesn't offer much it allows you to post your online scores and share them with other players. Still you can't play multiplayer games but we are working towards making it possible one day. Another big update is ZArchive support. Forget the 20.000 files per game you can now use ZArchive files for compressing games and having them in 1 file instead of hundreds. KosmicKrisp has also landed in the world of macOS giving much better compatibility and speed to macOS users. There are several other fixes let's cover the most important below

Highlights

Online stuff

  • ShadNet, our own networking backend, is now integrated for the first time
  • Most of the matchmaking library is implemented — lobbies, rooms, joining, signaling
  • Friends support. Make your online friends in shadnet
  • Invitation dialog
  • Your name now switches to your Online ID once you're connected
  • NP Manager got new settings and general cleanup
  • Web API layer grew a lot: new library implemented, multipart uploads, push events
  • NP Commerce
  • Trophy handling tidied up

Mouse support

  • sceMouse is emulated now, so the handful of games that supported a USB mouse are playable with one
  • Plus a bunch of follow-up fixes for opening, closing, and games that check whether a mouse is even plugged in

AvPlayer, video & audio

  • AvPlayer got a serious cleanup: audio/video sync, startup races, stack usage, frame sizes, buffer handling
  • Video decoder flush behaviour fixed
  • Audio3D mix queue reworked
  • AT9 no longer crashes from reading past the end of its data
  • AT9 encoder now runs natively
  • OpenAL fixes and NGS2 fixes

Graphics

  • NVIDIA clip distance emulation
  • T# min_lod implemented through VK_EXT_image_view_min_lod
  • Depth write state is now respected for register clears
  • Robustness2 is now required, allowing the null buffer/image workarounds to be removed
  • Sampler garbage collection added to the texture cache
  • Texture cache: image download handling refactored
  • sRGB handling for BC formats refactored
  • Buffer barriers for compute-written vertex/index buffers and indirect dispatch/draw buffers
  • Assorted validation errors fixed and miscellaneous renderer fixes
  • Shader cache invalidation caused by struct padding in memcmp fixed

Shader recompiler

  • GCN thread mask accuracy fix
  • Vertex attributes are always specialised on number class
  • Geometry shader vertex offsets initialised from the input primitive type
  • V_ADD_I32 carry-out propagation, V_LOG_CLAMP_F32, V_PK_MUL_LO_U16 fix
  • IREmitter atomic operation corrected from And to Or

Kernel, memory & core

  • Filesystem abstraction layer
  • File reads now go through an intermediate buffer before being copied to guest memory
  • PthreadOnce uses pthread primitives instead of std::mutex
  • TLS leak on non-primary threads fixed
  • Code patches for cmp and xor instructions involving the TCB
  • sceKernelAllocateDirectMemory now honours search_end
  • Fixed mappings with a zero address on older games is now handled properly
  • HLE libraries are no longer loaded when force-LLE is set
  • Unresolved objects are no longer auto-stubbed
  • Null dereference fixes in save data mount checks
  • Memory patch fixes, with hex exception handling
  • LLE malloc init, fixing issues with LLE fonts and allowing more LLE libs to run

Input & peripherals

  • Pad state latency reduced for single-sample reads
  • Users are no longer logged out when a pad disconnects
  • Controller colours reset on shutdown
  • Fixes to Camera support

Interface & quality of life

  • Fullscreen startup behaviour polished
  • The window icon is now set to the game's icon
  • Big Picture UI settings improved
  • Shader list, memory map and module list widget states are saved, duplicate shader dump windows prevented
  • New shadPS4 log with a logging refactor, an option to flush the log
  • MS_VC_EXCEPTION is now passed through to the handler on Windows
  • Trophy fixes and an auto-generated PathType::TrophyDir
  • NP checks moved into sceNpTrophyRegisterContext
  • Improvements to the in-app bug report flow
u/AutoModerator — 3 days ago
▲ 306 r/emulation

Super ZSNES v0.300 release

Hi r/emulation!

Here's a new update of SUPER ZSNES v0.300. You can get it at https://www.zsnes.com/

iOS port is finally out as well: https://apps.apple.com/us/app/super-zsnes/id6786741278

Here's what's new:

  • Zelda: Link to the Past now enhanced (Thanks fatbrowne for the saves state help!)
  • Chrono Trigger audio enhancement by tssf! Thanks tssf!
  • UI Improvements:
    • Added disable drive fetching option & disable UI move
    • User defined GUI color schemes
    • New Water & Fire effects
    • Different mouse cursor sizes
  • Enhancement Engine Improvements:
    • New Shadow/Highlights, allowing for more diverse details and should help with the washed out look once we start using this more.
    • Added normal maps to fixed color layer
    • Mirrored mode for wide screen on some enhanced games, added to Megaman X
  • Emulation Improvements:
    • SPC700 timing improvements
    • SuperFX fixes
    • Mid-screen sprite update fixes
    • Multiple timing & open bus bug fixes
    • Various other emulation fixes
  • New chip emulation:
    • SA-1 emulation
    • Cx4 emulation
    • SuperFX3 emulation (Special thanks to Randy Linden!)
  • Per game overclock settings
  • SNES Mouse & SuperScope (Enable this on the per game config) with joypad override
  • Multi-button/key press combo assignment for Input
  • New 3D layers mode, lets you view each SNES layer in 3D perspective (under options/graphics mode)
  • New input shortcut for exit
  • Use double space in loading dialog to select a random game
  • Improved frequency of saving game and zsnes save data
  • Mobile controls view is more transparent for less obstruction
  • Many different performance optimizations done on various areas in emulation

Next main release will focus on: Starfox enhancement (already making good progress), Retroachievements, and starting to get the enhancement editor opened to the public.

youtube.com
u/zsKnight_dev — 3 days ago
▲ 80 r/emulation+2 crossposts

iPod Video 5.5G emulated: Apple's retail firmware boots, draws its own UI, and runs a game

github.com/siggifly/ipod-emulator

Apple's retail iPod 5.5G firmware boots on an emulator I have been building for four days. It formats its own filesystem, reads the click wheel, draws its own menus, and runs Brick.

https://i.redd.it/jxyu7lp3odjh1.gif

The 5.5G shipped on 12 September 2006. I bought one that year, at twelve, and it was the first Apple product I ever owned.

I chose this model deliberately, because it is the one every clickwheel game runs on. That it is also the one I grew up with is a coincidence I have enjoyed more than I expected: my first Apple product, now running on a MacBook Air M4, twenty years later.

Working at Apple was always the dream. Having now spent four days taking their firmware apart, I have no idea whether that brought it closer or ruined it, and I find that funny either way.

What it actually is

Not a reimplementation of the interface. Apple's own code the whole way down.

The emulator enters at address 0, where the CPU fetches out of reset. Apple's bootloader brings up SDRAM, talks to the power chip over I2C, uploads firmware to the video co-processor, reads the partition table, DMAs 7.5 MB of RetailOS into memory, checksums it and jumps. RetailOS then remaps memory, starts its RTXC kernel and 61 tasks, mounts a FAT12 volume hidden inside the firmware partition, formats and populates its own FAT32 volume, spins the drive down, and draws.

Then you scroll to Extras, open Games, and play.

https://i.redd.it/4wma2f58odjh1.gif

There is a window too — a drawn iPod whose wheel, buttons and hold switch drive the machine, with a debug mode that shows instruction counts, both clocks, and a does the input reach RetailOS? panel carrying arrival counters at the real addresses. It proves its own claim rather than asserting it.

https://preview.redd.it/ks4euy0eodjh1.png?width=2940&format=png&auto=webp&s=8ceaada6695d0836a72585cda58fb2078b216410

Before anything else: I did not write this

I am not an engineer. I am a tinkerer, and I did not write a single line of code in this project.

It was written with Claude Opus 5 over four days. The model wrote all of it and did the reverse engineering: bisecting a boot to the exact instruction where a function stops returning, reading forty instructions of ARM to recover a structure layout, running the same experiment four ways to check a result held.

What I did was steer. Decide what was worth chasing and what was a rabbit hole. Push back when an answer sounded too convenient. Come up with ideas when it got stuck, which happened plenty. Go find the prior art that unstuck it. Say "that cannot be right, look again" — which was worth more than it sounds, because a confident wrong answer costs hours and sometimes only a human going hang on catches it.

That is not nothing. It is also not writing an emulator, and I would rather say so than let anyone assume otherwise.

Why

Apple sold 54 clickwheel games and delisted them in 2011. For years, if you had not bought them then, that was that.

Olsro's Clickwheel Games Preservation Project changed that, and it is why I got interested. It preserves the games and works out the authorisation. I used it on my own iPod last year and left it there.

The catch is that it needs the hardware, and a used 5.5G in good condition is not cheap now. So the games are being looked after while the machine they need gets scarcer. That seemed backwards.

I was also abroad on holiday with my iPod at home, which ruled out the obvious approach. And I had just seen someone running Tahoe 26.5's kernel natively on a Galaxy A55 a few days earlier, which is most of the reason I tried at all.

Four days, roughly

Day 1 — my iPod was at home, so the first problem was having anything for iTunes to talk to. That worked the same night: a virtual iPod that iTunes accepts as a real device, with the USB identity rebuilt out of real firmware artifacts. (The Palm Pre did something similar in 2009 and Apple kept breaking it until Palm gave up. It stuck with me as proof the idea was possible.) The ARM7TDMI core was written the same day — about 1,900 lines, zero dependencies.

Day 2 — the disk. RetailOS will not finish booting until it can write, which I had not allowed: it blocks on a one-sector write, times out after 3.9 simulated seconds, and retries forever. A read-only disk looks exactly like a deadlock and is not one.

Day 3, 02:06 — Apple's bootloader loaded RetailOS, verified it, and handed over. 02:16 — I set up a headless Ghidra server. That ten-minute gap is the whole story of the day: until then most questions could be answered by running the thing and watching, and once RetailOS was booting and then halting somewhere inside itself, they became "what calls this", which does not yield to watching.

Day 4 — the display, which was the hard part and has its own section below.

Full timeline with commit counts: docs/HOW-IT-WAS-BUILT.md

The display, and the thing I would tell you if you only read one part

The iPod 5.5G has a Broadcom BCM2722 next to the PortalPlayer SoC. Rockbox treats it as a framebuffer — write pixels, kick an update. RetailOS does not. It reads a service directory out of the co-processor's memory, binds an RPC channel, creates a layer, and uploads dirty scanlines to a surface. None of that is documented anywhere I could find.

What cracked it: the resource volume on the iPod's own disk holds the co-processor's firmware and a library of .vll codec plugins, and those plugins are ordinary ELF shared objectse_machine = 0x5f, EM_VIDEOCORE, an officially assigned ELF machine number. Standard tooling reads their symbol tables, and their undefined symbols are by definition what the co-processor's runtime exports. All 183 of them, including dispman_object_create, gencmd_register, and 25 Nucleus PLUS internals.

dispman_* is DispmanX — the same display manager Broadcom would later ship on the Raspberry Pi. The later chip is publicly documented and the concepts carry.

I never emulated the VideoCore. The transport layout came out of RetailOS's own parser, on the principle that code which reads a structure is a specification of that structure.

The whole thing is written up here: research/21-the-videocore-runtime.md

A small one, afterwards

Once RetailOS was drawing, the boot still opened on a black screen with what looked like diagonal noise. That frame had been dismissed twice as fragments. It was the Apple logo — sitting in the co-processor's buffer since the very first run at 62-halfword pitch, waiting for a rectangle placement the model never executed. A 62-pixel-wide logo in a buffer being read 320 pixels wide. The fix was to stop looking at the panel in screen order and look at it in address order.

the Apple boot logo · write-up

What does not work

  • No audio. The Wolfson codec is unmodelled.
  • 30% of real time headless, 19% with the window open. A JIT is the answer and is not written.
  • Purchased titles do not launch. Apple's DRM refuses them. The identity it binds to is understood — the FireWire GUID, not the serial — the keystore is not.
  • Four values in the co-processor transport are chosen rather than measured, and there is no timing model, so a bug that only appears when a reply is late is invisible to me.
  • The boot takes ~300 seconds of simulated time where hardware takes five or ten. Something waits far longer than it should and I do not know what.

Everything faked has a row in a ledger with a written condition for retiring it. Nothing is faked without one: research/12-bypass-ledger.md

Where it goes

Running the games with no RetailOS at all is the real goal — host the framework yourself and you do not need Apple's OS in the loop. I did not know what that framework did, and there are around 98 entry points. Booting RetailOS is how you find out, because Apple's implementation of it is inside.

Then audio, a JIT, and eventually every non-iOS iPod. I picked the 5.5G because it is the superset: 14 of the 54 titles are iPod Video exclusives and do not run on a Classic at all.

Credit

Rockbox first and by a distance. pp5020.h and the iPod target code are where most of the register semantics came from, and it doubled as an oracle — a known-good OS to boot when something broke and I needed to know whether it was me. iPodLinux underneath it.

dreamlayers, who identified those .vll files as ELF DLLs on the Rockbox forums in 2009. I worked it out independently and then found the post, sixteen years late.

Also Olsro, daniel5151/clicky (which independently needed the same two undocumented register bits), freemyipod and q3k's wInd3x writeup, qemu-ios, giek2000, Xlinka, dstaley, raspberrypi/userland, and the Internet Archive. The full list, with what each one gave, is in the repo and it is longer than this.

If you feel like giving money, give it to Rockbox or to Olsro before me. Rockbox has been documenting this hardware for twenty years so that anyone could use it. Olsro spent a year working out the authorisation so the games could be played again at all, and without that I would never have started.

reddit.com
u/siggifly — 6 days ago
▲ 150 r/emulation+1 crossposts

guac: Cycle Accurate GBA Emulator 🥑

Guac (GB/GBA/NDS) now has a cycle-accurate* GBA Core! A ton of tests and ROMs work now, including the notorious Classic NES series games. Additionally, DMG Games on GBC emulation and GBC Games on DMG emulation are now supported.

guacemulator.com

github.com/aabalke/guac

A big thank you to everyone who documents, builds, tests, and provides support!

youtu.be
u/aabalke — 6 days ago
▲ 14 r/emulation+1 crossposts

Me and Claude made a free thing that turns an Android phone into a drift-free PC lightgun to play Time Crisis — no sensor bar, no extra hardware

I wanted to play Time Crisis properly and every option was either dead (CRT + GunCon), expensive (Sinden), or drifty (gyro mice). So I tried something different: the phone already has ARCore, which does camera + IMU tracking. That gives you absolute position in the room, not just rotation — which is exactly what a lightgun needs.

You can find a demo gameplay here: https://youtu.be/UE3XUln_xOE

How it works: you run a small executable on the PC, it prints a QR code. Scan it with the phone, tap through a permission prompt, then point at the three corners of your monitor to calibrate. From then on the phone's aim ray gets intersected with your screen plane and moves the cursor absolutely. Aim data goes over WebRTC straight across your LAN, or over USB if you want the lowest jitter.

The part I'm happiest about: no yaw drift and no recentering. The camera corrects the IMU continuously, so it behaves like a real lightgun rather than a gyro that slowly wanders off. Phone-side latency is roughly 30ms and there's a 2ms cursor loop on the PC.

Other stuff that's in there: 20 remappable on-screen buttons (FIRE is just one of them, with haptics), multi-monitor support with per-monitor calibration and a pause hotkey so the real mouse works when you need it.

Requirements are an ARCore Android phone with recent Chrome, and a Windows or Linux PC on the same network.

It's free and MIT: https://github.com/ggcaponetto/point-bang

It's working end-to-end but still early. I've only tested DuckStation. Would genuinely like to hear how it does on other setups, especially projectors, ultrawides, and anything with a very glossy panel, since those are the tracking cases I'm least sure about. Happy to answer anything or give support.

u/ggcaponetto — 6 days ago
▲ 230 r/emulation+1 crossposts

RPCS3 optimizations on ARM64: What Didn’t Make the Cut

Made a short article about some observations/things that I left out of my recent ARM64 optimizations on RPCS3 video. Let me know what you think!

whatcookie.github.io
u/Whatcookie_ — 7 days ago
▲ 28 r/emulation+5 crossposts

ROMarr — an *arr that fills your RomM library for you (request → Prowlarr → download → imported → rescan)

RomM is where my games live, but filling it was still manual. So I built the missing piece: ROMarr, an *arr for ROMs.

https://github.com/BlizzHacker/romarr

Ask for a game → it searches your indexers through Prowlarr → scores the releases → hands the winner to qBittorrent / SABnzbd / NZBGet → picks the actual ROM out of the finished download → files it into your RomM library → triggers a rescan so it shows up without you touching anything.

Why it isn't just Radarr pointed at ROMs. Cartridge releases break the assumptions a film downloader makes:

  • The wrong file is usually in the box — readmes, box art, and several regional dumps in one archive.
  • Size is a signal, not a preference. A 40GB "SNES" result is a romset or a PC port. Smaller is usually more correct, the opposite of video.
  • Platform names collide. "Super Nintendo Entertainment System" contains "Nintendo Entertainment System", so naive matching sends every SNES request into the NES folder.

RomM specifics

  • Use a dedicated RomM account, not your admin one — it only needs enough to trigger a scan.
  • That account needs permission to run tasks, or the post-import rescan comes back 403 and your new ROM sits there until RomM's next scheduled scan. Took me a while to spot that on my own instance.
  • LIBRARY_PATH is RomM's library root as ROMarr sees it, so in Docker it's the container path, not the host path.
  • It also drives Gaseous, Retrom, or a plain folder — so a Batocera handheld or an ES-DE cabinet can sit alongside your RomM and take specific platforms by rule (N64 to the cabinet, Game Boy to the handheld, everything else to RomM).

Interactive search shows every release with its score and the reason for that score next to it, plus a Grab button, so when you disagree with the ranking you just take the one you wanted. That page exists because it picked wrong on me twice in a week — once a Wii Virtual Console WAD for a Genesis request, once a Steam compilation that outranked the real cartridge.

Running it

docker run -d --name romarr -p 7878:7878 \
  -e PUID=1000 -e PGID=1000 \
  -v ./config:/config -v /path/to/roms:/roms -v /path/to/downloads:/downloads \
  ghcr.io/blizzhacker/romarr:latest

Multi-arch (amd64 / arm64 / armv7), commented docker-compose.yml in the repo, and a Proxmox LXC one-liner if that's your thing. MIT.

Fair warning on provenance: most of the code was written by Claude with me directing and testing it against my own stack — a live Prowlarr, qBittorrent, SABnzbd and a 72k-game RomM. 218 tests, and scoring changes get verified by re-scoring a frozen set of real Prowlarr results old-vs-new so a fix for one release is shown not to have moved any others.

Happy to take bug reports here or on GitHub — the last outside report turned into three fixes and a test.

u/Super_Classroom_8480 — 8 days ago

Snes Station pc

Hey everyone!

I grew up with SNES Station on the PlayStation 2, and recently I started a small project with a pretty simple idea:
"What if I could recreate that SNES Station experience on PC?"
What started as an experiment ended up becoming a much bigger project than I expected. 😅
After a lot of work (and a ridiculous amount of debugging), SNES Station PC is now actually usable, and I've just released the first Public Beta: v0.13.8.
The goal isn't to create another generic SNES emulator frontend. I wanted to preserve the feeling of the original SNES Station — the interface, simplicity and controller-first experience — while adapting it for PC.

Some of the things currently implemented:

- Snes9x/Libretro emulation
- Controller-first interface
- Keyboard and gamepad support
- In-game menu with LB + RB
- Configurable controls and hotkeys
- Multiple save-state slots
- Favorites
- Recently played games
- ROM folders/subfolders
- Per-game settings
- Video and audio options
- Portuguese, English and Spanish
- Portable Windows x64 build

ROMs are NOT included. You have to provide your own game files.
The project is currently closed-source. The public GitHub is being used for releases, documentation, screenshots, bug reports and feedback.

One important limitation:

The executable currently isn't digitally signed. Code-signing certificates are surprisingly expensive for a small free hobby project, so Windows Smart App Control may block the executable on some systems.
I don't recommend disabling Windows security features just to run it.
That's actually one of the reasons I'm calling this a Public Beta rather than a finished release.
I'd really love to have some people test it on different PCs and controllers.
If you remember using SNES Station on PS2, I'd especially love to hear what you think about how close the experience feels.

GitHub / Download:

https://github.com/JPCKk/SNES-Station-PC

Any bug reports, compatibility results, suggestions or criticism are welcome.

And please don't upload ROMs when reporting bugs. :)

Credits:
Original SNES Station — A. Lee (Hiyru)
SNES Station PC — JPCKk & B4by

BTW, I'm Brazilian, so sorry if my English isn't perfect!

Before making claims about the project's licensing, please check the actual license of the Snes9x/Libretro core being used:
libretro-snes9x/LICENSE at master · sysfce2/libretro-snes9x

If we've overlooked a licensing requirement, we're more than happy to investigate and correct it.

u/Comprehensive_Lab924 — 10 days ago

Tsugaru_QT — FM TOWNS / Marty Emulator ”津軽” (Qt frontend) Version Tsugaru20260522-qt 1.0.0 for Linux

Tsugaru_QT — FM TOWNS / Marty Emulator ”津軽” (Qt frontend)

Version Tsugaru20260522-qt 1.0.0 for Linux

A Qt 6 frontend for CaptainYS's FM TOWNS / Marty emulator Tsugaru.

Main differences from Tsugaru_CUI:

Qt menu-bar UI — The frontend uses Qt 6 with a conventional menu-bar layout. Game-port devices, fullscreen, sprite transfer speed, and similar options are available from the menu.

Timing — Real-time pacing was reworked so audio tempo stays steady and emulated VSYNC does not wobble. By default the emulator waits for real time (same idea as CUI -YESWAIT) and does not catch up a time deficit in one burst.

Disc profiles — Settings are saved per mounted CD. Mount the same disc and restart to load them. Floppy (FD0 / FD1) mount state is stored and restored on the next launch. Mouse-integration settings are part of the profile.

Mouse integration — Writing coordinates into guest memory reduces pointer latency. For titles that do not use Mouse BIOS, you can search for the in-game cursor phys, then read and write coordinates to integrate the mouse. A few presets are bundled. Some titles still cannot be integrated, because phys location and write method vary.

CDDA cache — CD audio (CDDA) is prefetched so data-track reads do not interrupt playback.

CD images — In addition to the CD-ROM image formats Tsugaru already supports, .chd is accepted.

MIDI — Software synthesis via FluidSynth (a separate package is required). Only GS-oriented SysEx is handled at present. A GS SoundFont is recommended.

Wayland idle-inhibit — Suppresses screen sleep / screensaver while running.

UI localization (i18n) — en / ja / zh-CN / zh-TW / ko / de / fr / es (en and ja embedded in the binary; others load JSON from share/townsqt/translations/; select via TOWNSQT_LANG or system locale)

github.com
u/Chemical-Resource765 — 10 days ago
▲ 96 r/emulation+1 crossposts

Progresso no desenvolvimento do emulador de Zeebo - (Zeeno)

Nova interface em Qt com sistema de configurações integrado e um debugger funcional. O teclado e os controles agora estão 100% funcionais, com suporte completo ao mapeamento. Também foram implementadas melhorias na renderização 3D, além de diversas correções, otimizações e aprimoramentos na emulação.

https://reddit.com/link/1vk9u45/video/6gzgg3xiwgih1/player

reddit.com
u/NXGZ — 11 days ago

DuckStation on RISC-V

Just to be clear, the developer of DuckStation does NOT support custom Linux builds. If you need support, just ask here.

It is possible to build DuckStation on RISC-V, but you need vectors. I tested on the SpacemiT K3 RVA23 RISC-V SoC.

You can build the dependencies with the script for Linux, found in this repo: https://github.com/duckstation/dependencies

Put the directories (bin, doc, include, lib, etc.) somewhere in the DuckStation directory. I created a directory called prebuilt in dep.

Reference this directory in DuckStationDependencies.cmake, and I commented out the error about unsupported architecture.

set(DEPS_PATH "${CMAKE_SOURCE_DIR}/dep/prebuilt/")

Follow the build instructions: https://github.com/stenzek/duckstation#linux-1

I have the best result with OpenGL ES, as I see a lot of issues with Vulkan. But that is probably because of issues with the Vulkan driver for the Imagination Technologies IMG BXM-4-64.

I can play Colin McRae Rally at 3x resolution.

https://youtu.be/yec1HxNT6bs

u/LivingLinux — 10 days ago
▲ 42 r/emulation+1 crossposts

Custom Nintendo 3DS Overlays for RetroArch Citra – NES, Famicom, SNES, Kirby & More

I’ve been working on a custom Nintendo 3DS setup for RetroArch using the Citra core. I wanted the games to feel like they’re actually being played on different 3DS models, so I created my own high-resolution overlays and matched the top and bottom screens to each design.
I have to give credit to u/CoolFiverIsABabe. I came across his custom 3DS overlays a few days ago and they were what inspired me to start making my own. I really liked his NES and Famicom concepts, so I recreated those designs myself in Photoshop using my own high-resolution 3DS artwork as a base.
From there I started creating more designs and colorways, including Kirby and others, while also using real Nintendo 3DS editions as inspiration.
I’m using Mega Bezel shaders with individual configurations where needed to get the screens positioned and scaled correctly for each game.
These are just screenshots of my personal RetroArch setup. I wanted to share what I’ve been working on and give credit to the person whose work gave me the idea to start the project in the first place.
Which one is your favorite?

u/TekkaBlad3 — 11 days ago