rpynx v0.1.0pre-release

Getting started

Overview

The three parts of rpynx, how a game starts, and what works on a real Switch today.

Source README.md, docs/ARCHITECTURE.md, BUILD_STATUS.md
On this page

The parts

PartFileRuns onRole
Loaderrenpy-loader.nroSwitchGame library, controller settings, diagnostics. Drawn with LVGL 9.6 on the CPU.
Runtimerenpy-runtime.nroSwitchCPython 3.12.8 and Ren’Py 8.5.3 in one 55 MB program. Plays one game, then returns.
Importerrsl_import.py, RSL Importer appmacOS; Windows not yet tested on a Windows machineChecks a game, writes its manifest, copies it to the SD card or the Switch.

The SD card folder is still called switch/renpy-loader/, from before the project was renamed to rpynx. The .nro file names kept the old name too.

How a game starts

The loader and the runtime are separate programs. When you press Launch:

  1. The loader asks the Homebrew loader to start the runtime next (envSetNextLoad), with the game’s folder as an argument, and exits.
  2. The runtime starts as a fresh process, starts Ren’Py on the game, and plays it.
  3. When the game quits, the runtime asks for the loader to be started next, and you are back in the library.

Each game gets a clean process. A game that crashes cannot take the loader’s state with it, and a game can ask for a different runtime by name. The cost is a few seconds of loading per launch; that has not been measured yet.

note

Chain-loading goes through the Homebrew loader, so the loader must be started from the Homebrew Menu. See Start with full memory.

What works on a Switch

These were checked on a real console. The number is the hardware run that checked it.

WhatStatus
Ren’Py 8.5.3 starts, renders with OpenGL ES 3.2 on nouveau, and quitsHW verifiedrun 5
A game exported by the importer launches from the libraryHW verifiedrun 9
A Ren’Py 7 game, recompiled with --recompile, runsHW verifiedrun 13
Music and sound, also from an .rpa archiveHW verifiedrun 21
Quit, then start another game, without a crashHW verifiedrun 24
Save, quit, start again, load back to the same lineHW verifiedrun 26
A remapped button used in a gameHW verifiedrun 26
Games refused in applet mode, with a messageHW verifiedrun 27
Covers, backgrounds, Change pictureHost-tested
Touch, docked play, controller reconnectHW unverified

The full list is in Statuses and test runs.

What rpynx does not do

  • It does not decrypt anything or work around DRM. The importer does not unpack .rpa archives; it only reads their index as plain data.
  • It ships no game assets and no Nintendo SDK files. The loader’s text font and button icons are the console’s own, read from its shared memory at run time.
  • It cannot run Live2D or 3D models (GLTFModel): there are no Switch libraries for them.
  • It has no Python 2 runtime. Ren’Py 7 games run only if they can be recompiled for Python 3.

↑↓ move↵ openesc close