A small launcher (Windows, Linux and macOS) for running The Duskbloods Network Test on Eglantine-based Switch 2
emulators (Eglantine, Lichii, Eden-style builds) with the online features served by local
stand-in servers, either for yourself (offline, loopback only) or for a room of friends
(online rooms, still in testing and not working yet: see ONLINE.md). New in 1.2.0: Bot Match, a full match against
7 CPU players (see below). New in 1.2.1: the window can be resized, maximized and scrolled; Lichii
160+ keeps its data in %APPDATA%\lichii and is handled; the Windows exe no longer trips antivirus
false positives (see below). New in 1.3.0: Patch Lichii, which lets stock Lichii builds play
(see below). New in 1.3.1: Bot Match comes in two modes, Bot Match (Solo) and Bot Match (Duo). New in 1.3.2: hosting a room works on PCs with
Radmin VPN or Hamachi.
Best with a Duskbloods emulator build (Eglantine, or the Duskbloods Lichii builds v31 and later). The game needs its online services even offline, and those builds send it to the launcher's servers. Stock Lichii (for example build 160) and Eden boot the game but, on their own, stop at "Online connection is required" / "Could not verify Nintendo Switch Online membership" (error 2321-4992).
When the chosen emulator lacks the Duskbloods online support, the Setup tab shows a red note and a
Patch Lichii button (Patch Eden for Eden). Pressing it (and confirming) adds one file,
version.dll, next to the emulator. Remove patch deletes it again.
- The patch only acts when the launcher starts the game. It does what the Duskbloods builds do: sends the game's online names to the launcher's servers and, offline, keeps all traffic on this PC. Lichii started on its own runs exactly as before.
- The launcher also writes a small certificate archive with its test certificate into its own test NAND, so the game's own encrypted connections trust the launcher's servers.
- Tested with stock Lichii build 160: the game logs in, reaches the online main menu and starts a game. Performance and graphics are Lichii's own; the Duskbloods builds still run the game better.
- It never replaces a
version.dllthat belongs to another program. Source and build steps:tools/online_shim/.
It gives you a window styled after the game's menus where you pick:
- the game: a
.nuppackage (Browse; opened by emulators with NUP support, such as Eglantine v30+ and Lichii) or the unpacked game folder that containsbase/exefs/main(Folder). The version is checked either way. And - the emulator (
eglantine.exe,lichii.exe,eden.exeoryuzu.exe; on Linuxeglantine,lichii,eden,yuzuor an AppImage), found automatically next to the launcher, in sibling build folders and in aLichiifolder, or chosen with Browse.
Press Start game and it starts the stand-in servers, launches the emulator with the game, and
stops the servers when the game closes. Logs are written next to the emulator's data (Open logs).
The launcher adds two entries to the game's Battle Remembrance > Tutorials list. Each is a complete Dusk Battle on the full map with 7 CPU players, from the first phase to the final battle:
- Bot Match (Solo): everyone for themselves (the game's hidden mission 8000).
- Bot Match (Duo): played in alliances of two (mission 8020; this was "Bot Match" before 1.3.1).
They are the game's own hidden full-map missions, switched on by the launcher. At each start it adds
the missions to the game's regulation and their names and descriptions to the game's menu text (all
languages), both built from your own game files. The text goes into the emulator's mod folder as
Bot Match (playDB-CNT). Untick Bot Match in the Setup tab to use the game's own files.
Online play does not work yet. You and your friends can connect (over a VPN or the same network), reach the game's online menus and be matched together, but the match never starts: the game goes back to searching after about 15 seconds. The step that starts a match needs a game server the launcher doesn't have yet, and it is still being worked on and tested. To play a full match today, use Bot Match (Battle Remembrance > Tutorials), which works offline.
The Online tab has three modes: Just me (offline, as before), Host a room and Join a room. Everyone who types the same room password is matched together: one friend hosts, the others type the host's address and join.
The in-game match connects the emulators directly, and the server has no relay for that. Players need the same home network, a VPN such as ZeroTier (recommended), Tailscale or Radmin VPN, or router port forwards. The Online tab lists the ports.
Step-by-step guide, VPN setup and troubleshooting: ONLINE.md.
| Path | What |
|---|---|
play_duskbloods.py |
the launcher (Tk window, game/emulator discovery, process management) |
tools/npln_server/ |
local stand-in for the online login/session service (127.0.0.1; also the host's network addresses when hosting a room) |
tools/dusk_server/ |
"front door" stand-in for the game's own web API, plus the room matchmaking used by online rooms |
ONLINE.md |
how to play online with friends (VPN recommendations, ports, troubleshooting) |
assets/ |
window art and the icon, taken from the game's title screen |
build_exe.py |
builds the single-file Play Duskbloods.exe with PyInstaller (see its notes on the loader) |
dusk_mods.py |
Bot Match (Solo/Duo): patches the regulation and adds the menu text |
tools/online_shim/ |
the Patch Lichii version.dll (with source): online support for stock Lichii/Eden |
tools/ooz/ |
the open-source Kraken decompressor ooz (GPL-3.0, with source), used to read the game's menu text |
linux/ |
play-duskbloods.sh (starts the launcher on Linux) and README-LINUX.md |
mac/ |
Play Duskbloods.command (starts the launcher on macOS) and README-MAC.md |
- Download
Play Duskbloods.exefrom the Releases page, put it anywhere (next to your emulator build is easiest). - Run it, pick the game (
.nupfile with Browse, or the game folder with Folder) and the emulator. - Have your own
prod.keysandtitle.keysin the emulator'skeysfolder (portable builds:user/keys; Eden and older Lichii:%APPDATA%\eden\keys; Lichii 160+:%APPDATA%\lichii\keys). The launcher tells you if they are missing. - Press Start game. To play with friends, see ONLINE.md. On a small screen, scroll (mouse wheel, Page Down or the scroll bar) or maximize the window to reach Start game.
"Virus detected" when downloading? Versions up to 1.2.0 were built with PyInstaller's stock
loader, which Windows Defender's machine-learning check sometimes reports as
Trojan:Win32/Wacatac.B!ml (a known false positive for Python programs packed into one exe).
Since 1.2.1 the exe uses a loader compiled for this project and scans clean. You can also run the
launcher from source (python play_duskbloods.py, see build_exe.py for the packages).
On the first run the launcher creates private test certificates for your PC (in the emulator's
data folder) and seeds an empty test NAND/save. Packaged builds that already have a
user/test_data folder keep using it.
The launcher itself runs on Linux. It does not include an emulator: you need a Linux build of Eglantine (or Lichii / Eden / yuzu) that supports the Duskbloods network test. If you are not used to Linux, follow these steps in order; commands go in a terminal.
-
Install the requirements (once). Debian / Ubuntu / Mint:
sudo apt install python3 python3-venv python3-tkFedora:
sudo dnf install python3 python3-tkinter. Arch:sudo pacman -S python tk. -
Download
Play-Duskbloods-linux.tar.gzfrom the Releases page and unpack it:tar xf Play-Duskbloods-linux.tar.gz cd Play-Duskbloods-linux -
Start it:
./play-duskbloods.shThe first start needs internet for a minute: it creates a private Python environment in
~/.local/share/duskbloods-launcher/venvand installs three small libraries (grpcio,cryptography,zstandard). Later starts are instant. (If you get "Permission denied", runchmod +x play-duskbloods.shonce.) -
In the window, pick the game (a
.nupfile, or the folder containingbase/exefs/main) and the emulator (it looks in the launcher folder,~/Applications,~/.local/bin,~/Downloadsand on yourPATH; use Browse for anything else), then press Start game. -
Put your own
prod.keysandtitle.keysin the emulator'skeysfolder. The launcher shows the exact path if they are missing.
Where things are on Linux:
| What | Path |
|---|---|
| Emulator data and keys | ~/.local/share/eden (or lichii, eglantine, yuzu); portable builds use <emulator folder>/user |
| Emulator config | ~/.config/eden/qt-config.ini (or the portable user/config) |
| Launcher saves and logs | <data folder>/duskbloods_test/, logs in runs/<time>/ (Open logs uses xdg-open) |
Linux troubleshooting:
- "... is not executable": run
chmod +x ./your-emulator(the launcher also tries this itself). - "Port 18443 is already in use": an earlier session is still running; close it and retry.
- The window shows no text or odd fonts: install
fonts-dejavu(sudo apt install fonts-dejavu). - No window and "Tk is missing": install the Tk package from step 1.
The Linux package is small (about 330 KB) because it only holds the launcher's scripts and images; it uses your system Python. The Windows exe is about 18 MB because it carries its own Python.
The launcher runs on macOS (Apple Silicon and Intel). It does not include an emulator: you need a macOS build of an emulator with Duskbloods (Switch 2) support.
- Install Python 3 from https://www.python.org/downloads/macos/ (it includes Tk).
- Download
Play-Duskbloods-mac.zipfrom the Releases page and unzip it. - Double-click Play Duskbloods.command. The first time, macOS may say it is from an unidentified developer: right-click it, choose Open, then Open again.
The first start creates a private Python environment and installs grpcio, cryptography and
zstandard. Emulator apps (Eden.app, Lichii.app, ...) are found in /Applications,
~/Applications, ~/Downloads and next to the launcher. Details: mac/README-MAC.md.
pip install pyinstaller cryptography grpcio zstandard
python build_exe.py
The exe appears in dist/. Python 3.10+ with Tk is required. On Linux there is nothing to build:
run ./linux/play-duskbloods.sh from a checkout of this repository, or use the release tarball.
- Offline (Just me), the servers bind to 127.0.0.1 only; nothing is sent to any real service, and the emulator is started in its loopback-only online mode.
- Online rooms talk only to the host's PC, never to any real service. The room password is never sent; only a hash of it is. Hosting opens the ports listed in ONLINE.md while the game runs, so only play with people you trust.
- No keys, game files, saves or certificates are in this repository or the exe. Certificates are generated on your own PC the first time you play.
- The launcher stores your selected paths and Online tab choices (mode, room password, host
address) in
launcher_settings.jsonbeside the exe. - Before each launch it resets the emulator's saved network adapter to automatic (an adapter name copied from another PC, e.g. a VPN, makes the game report "no internet connection").
You must provide your own legally obtained game and keys. This project is not affiliated with FromSoftware, Nintendo or any emulator project, and contains no copyrighted game files; the banner and icon are screenshots of the game's title screen used for identification only.
Made by sikoGD as part of an effort to get The Duskbloods Network Test running on Switch 2 emulators: the launcher here, plus the emulator-side work (rendering, performance, local servers) done alongside it.
If this saved you time and you'd like to support the work: