An Electron powered client for ALTTPR that is designed to work with RetroPie making randomizing ROMS for configured presets a couple of controller button presses.
Warning
Electron requires a higher version of glibc than what the latest supported RetroPie image uses; therefore this will only work if you manually install RetroPie on a version of Raspberry Pi OS based on Debian Bullseye or later. This is not officially supported so your mileage may vary.
First, login in to your Raspberry Pi and download the installer by running this command:
wget "https://raw.githubusercontent.com/lsphillips/alttpr-for-my-retro-pie/refs/heads/main/retropie-installer.sh" \
--output-document ~/RetroPie-Setup/scriptmodules/ports/alttpr-for-my-retro-pie.sh \
/Tip
The above command assumes that your RetroPie-Setup installation is in the user's home directory; if that isn't the case then please adjust accordingly.
Next, create a configuration file and place it at this location: ~/.config/alttpr-for-my-retro-pie/config.json.
Finally, you can run the installer by managing packages using RetroPie-Setup (it will be listed under experimental ports). Once installed, restart EmulationStation and you will then see ALTTPR For My Retro Pie under Ports.
Tip
When you generate a randomized game ROM using a new preset (where its name is used in the ROM filename) it won't appear in your game list until you restart EmulationStation.
The alttpr-for-my-retro-pie application is powered by a JSON configuration file enabling you to configure the following properties:
| Property | Required | Type | Default | Description |
|---|---|---|---|---|
baseRomPath |
Yes | string |
The path to a Zelda no Densetsu: Kamigami no Triforce v1.0 ROM file; normally this would be located in your Retro Pie SNES ROM directory. |
|
targetDirectoryPath |
Yes | string |
The path to the directory where the application will place the randomized ROM files; normally this would by your Retro Pie SNES ROM directory. | |
seedPresets |
Yes | array or string |
Either an array of presets or a URL to a JSON file that is an array or presets. | |
heartSpeed |
No | Off, Quater, Half, Normal, Double |
Normal |
Change the speed of the beep when Link is low on health. |
menuSpeed |
No | Instant, Slow, Normal, Fast |
Normal |
Change the speed of opening and closing the item menu. |
heartColor |
No | Red, Green, Blue, Yellow |
Red |
Change the color of your hearts. |
backgroundMusic |
No | boolean |
true |
Enable or disable the background music, including MSU-1 playback. MSU-1 users should leave this enabled. |
msu1Resume |
No | boolean |
true |
Enables the MSU-1 music resume feature. This feature allows the track that was playing to resume where it left off when re-entering the overworld. |
itemQuickSwap |
No | boolean |
false |
Allow items to be changed with the L and R buttons without opening the menu. |
reduceFlashing |
No | boolean |
false |
Severely reduces the intensity of in-game flashing effects, or outright disables them. Please use caution, your photosensitivity to effects may still vary. |
A preset is a collection of settings that define how the game should be randomized. A preset object can consist of the following properties:
| Property | Required | Type | Default | Description |
|---|---|---|---|---|
name |
Yes | string |
The name of the preset. This will be used in the file name of the randomized ROM file. | |
goal |
No | DefeatGanon, FastGanon, Dungeons, Pedestal, TriforceHunt, GanonHunt, Completionist |
DefeatGanon |
Refer to the documentation |
world |
No | Standard, Open, Inverted Retro |
Standard |
Refer to the documentation |
crystalsForGanon |
No | 0 - 7 |
7 |
Refer to the documentation |
crystalsForTower |
No | 0 - 7 |
7 |
Refer to the documentation |
itemAccessibility |
No | Inventory, Locations, Beatable |
Inventory |
Refer to the documentation |
itemPlacement |
No | Basic, Advanced |
Basic |
Refer to the documentation |
itemFunctionality |
No | Normal, Hard, Expert |
Normal |
Refer to the documentation |
itemPool |
No | Normal, Hard, Expert |
Normal |
Refer to the documentation |
swords |
No | Vanilla, Assured, Swordless, Random |
Random |
Refer to the documentation |
dungeonItemShuffling |
No | Standard, MapsCompasses, MapsCompassesSmallKeys, Keysanity |
Standard |
Refer to the documentation |
bossShuffling |
No | None, Simple, Full, Random |
None |
Refer to the documentation |
entranceShuffling |
No | None, Simple, Restricted, Full, Crossed, Insanity |
None |
Refer to the documentation |
enemyShuffling |
No | None, Shuffled, Random |
None |
Refer to the documentation |
enemyDamage |
No | Default, Shuffled, Random |
Default |
Refer to the documentation |
enemyHealth |
No | Default, Easy, Hard, Expert |
Default |
Refer to the documentation |
hints |
No | boolean |
true |
Refer to the documentation |
First copy the contents of the config.sample.json file into a config.json file and change the baseRomPath property value to a absolute path to a Zelda no Densetsu: Kamigami no Triforce v1.0 ROM on your machine.
Next place the resulting config.json file in the user data location for this application:
| System | Location |
|---|---|
| Windows | %APPDATA%/alttpr-for-my-retro-pie/config.json |
| Linux | ~/.config/alttpr-for-my-retro-pie/config.json |
| Mac | ~/Library/Application/alttpr-for-my-retro-pie/config.json |
Next, to start a process that will watch for renderer process code changes, run this command:
npm run developNext, in a seperate process, set the DEBUG_ALTTPR_FOR_MY_PI environment variable:
export DEBUG_ALTTPR_FOR_MY_PI=1Finally, to run the application, run this command:
npm run startIf you perform changes to renderer process code then press the F5 key to reload and see those changes reflected in the application. However any changes made to main process code or preload scripts will require you to restart the application.
To perform code quality checks, powered by ESLint, run this command:
npm run lintAll dependencies that are used for building and testing should be added as a development dependency; this includes dependencies required by the renderer process as they are bundled into the artifact.
Only dependencies required by the main process should be made a production dependency to minimize the final package size.
First, to build a bundle in the build directory that is ready to be packaged, run this command:
npm run buildNext, to create an arm64 Linux package in the packages directory, run this command:
npm run packageFinally, to create a .deb installer in the installers directory, run this command:
npm run installerImportant
Creating an installer should be performed in a Linux environment. Please see the requirements for the electron-installer-debian tool.
This project is released under the MIT license.

