A frontend for the SameBoy GameBoy emulator, with a focus on music creation. It runs standalone and can be used as an audio plugin (VST) in your favourite DAW!
Visit the releases page to download the latest version.
C:\Program Files\Common Files\VST2
NOTE: Depending on your system configuration, you may need to install the latest Visual C++ redistributable from Microsoft. If the plugin crashes when you try to load it, this is most likely the cause.
RetroPlug is configurable with Lua configuration files. The configuration files are written on first load if they do not exist, and will be written to the following locations:
C:\Users\USERNAME\AppData\Roaming\RetroPlug
You can get to this folder quickly by using the Settings -> Open Settings Folder...
option in the context menu.
config.lua
- contains default options for projects and systemsinput/*.lua
- contains various input configurationsThe following are defined as the default keyboard and joypad mappings: | Button | Default key | Default pad button |
---|---|---|---|
A | W | B | |
B | D | A | |
Up | UpArrow | Up, Left Analog Up | |
Down | DownArrow | Down, Left Analog Down | |
Left | LeftArrow | Left, Left Analog Left | |
Right | RightArrow | Right, Left Analog Right | |
Select | Ctrl | Select (+ R2 for LSDj) | |
Start | Enter | Start |
There are also LSDj specific key bindings to actions:
Action | Default key | Default pad button |
---|---|---|
DownTenRows | PageDown | R1 |
UpTenRows | PageUp | L1 |
CancelSelection | Esc | N/A |
Delete | Delete | N/A |
StartSelection | Shift (Hold) | X |
CopySelection | Ctrl + C | N/A |
CutSelection | Ctrl + X | N/A |
PasteSelection | Ctrl + V | N/A |
ScreenUp | N/A | Right Analog Up |
ScreenDown | N/A | Right Analog Down |
ScreenLeft | N/A | Right Analog Left |
ScreenRight | N/A | Right Analog Right |
Additionally, Tab
/ Pad Y
can be used to move between instances when multiple systems are loaded, and Ctrl + S
can be used to save your project.
Input maps have their own specific configuration format. Both keyboard and pad inputs can be assigned directly to Gameboy buttons, or they can be assigned to actions which are defined in Lua scripts. Both keyboard and pad inputs can be defined in a single file, but can be chosen independently of each other in a project.
To modify the button mapping, you can either edit one of the currently existing button maps, or create your own. It is recommended that you make a copy of input/default.lua
and modify it to suit your needs. Your button map can then be selected in the context menu via the Settings -> Keyboard
and Settings -> Pad
menu options.
Keys 0 - 9
and A - Z
can be used for alpha numeric keys, as well as the following keys:
Backspace, Tab, Clear, Enter, Shift, Ctrl, Alt, Pause, Caps, Esc, Space, PageUp, PageDown, End, Home, LeftArrow, UpArrow, RightArrow, DownArrow, Select, Print, Execute, PrintScreen, Insert, Delete, Help, LeftWin, RightWin, Sleep, NumPad0, NumPad1, NumPad2, NumPad3, NumPad4, NumPad5, NumPad6, NumPad7, NumPad8, NumPad9, Multiply, Add, Separator, Subtract, Decimal, Divide, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, NumLock, Scroll
The following buttons can be referenced in the input config:
Start, Select, Left, Right, Up, Down, A, B, X, Y, L1, R1, L2, R2, L3, R3, Home, Button17, Button18, Button19, Button20, Button21, Button22, Button23, Button24, Button25, Button26, Button27, Button28, Button29, Button30, Button31
It is also possible to bind the analog sticks to events:
LeftStickLeft, LeftStickRight, LeftStickDown, LeftStickUp, RightStickLeft, RightStickRight, RightStickDown, RightStickUp
All key/button names are CASE SENSITIVE!
You can load multiple instances of the emulator in a single window, and link them with virtual link cables. The goal of this feature is to offer a streamlined way of working with multiple instances of LSDj. You can create an additional emulator instance using the Project -> Add Instance
submenu. Choose one of the following options:
Additional information:
Game Link
option is enabled. This has to be done on every instance that is to be linked.Tab
key.By default, the output of all instances will be summed together in to a single stereo output. The Project -> Audio Routing
menu contains additional options for audio routing:
By default, each instance receives all MIDI messages received on all channels. The Project -> MIDI Routing
menu contains additional options for MIDI routing:
C-2
note on.For LSDj versions lower than v6.1.0, one instance of LSDj needs to be set to MASTER
and the others need to be set to SLAVE
. Versions v6.1.0 and above no longer have these modes, but have a singular LSDJ
mode, where the instance that initiates playing automatically becomes the master. It appears there may be additional overhead to this new mode that may make things go slightly out of sync - so it is recommended that if you want perfect sync between more than one instance of LSDj that you use one of the MIDI sync modes. This will sync both instances to your DAW, rather than to each other.
When LSDj is detected, additional options are added to the context menus.
Off: No sync with your DAW at all. If you hit play in LSDj it will play regardless of what else is happening.
MIDI Sync:
MIDI Sync (Arduinoboy Variation):
MIDI Map:
Auto Play:
Start
. If this happens just press Start
again.Thanks to the liblsdj library you are able to list, export, import, load, and delete tracks contained in your LSDj save. The LSDj -> Songs
context menu contains these features. Additionally, dragging a .lsdsng
file on to the window will add the song to your .sav
file and load it immediately (if the .sav
has space to contain the song).
Kits can be patched, deleted, and exported using the LSDj -> Kits
menu.
.kit
files, or imported from a previously patched LSDj ROM.LSDj -> Kits -> Import...
menu item. If a kit is already in the ROM it will not be imported. This allows you to import all kits from a ROM that the current ROM does not have without creating duplicates.Load...
or Replace...
respectively..rplg
file when you save the project to disk.The ROM that you loaded from disk isn't actually modified. To save the patched ROM out to disk for use on harware or other emulators, using the LSDj -> Export ROM...
menu option.
Updating to a new verison of LSDj can be quite cumbersome when your ROM is patched with custom samples, though RetroPlug tries to help make this easy by offering a way of swapping out a ROM and keeping custom samples patched. To do this, use the LSDj -> Upgrade To...
menu item and select the new LSDj ROM. Please note that this doesn't upgrade the sav data for your songs, so you will still need to be aware that different LSDj versions may make your songs sound completely different!
Prerequisites
aeffect.h
and affectx.h
need to be copied in to thirdparty/iPlug2/Dependencies/IPlug/VST2_SDK/
All other dependencies are included in the repository. Run configure.bat
, this will write a project to build/vs2019/RetroPlug.sln
. Open and build.
Coming soon!
Please refrain from asking usage questions in GitHub issues, and use them purely for bugs and feature requests. If you need help, the official support chat for this plugin is on the PSG Cabal discord channel: https://discord.gg/V3GyA5dtqB
Q: HALP! The keyboard does not work ;(
A: All hosts are different, and some have restrictions on routing keyboard input in to VST instruments. First, click the center of the window to try and force the host to give focus to the correct control. If that doesn't work, make sure your host is allowing the plugin to receive keyboard input (Renoise has an "Enable keyboard" option, etc). If it still doesn't work, try editing default keyboard mapping in default.lua
(written to C:\Users\USERNAME\AppData\Roaming\RetroPlug\input
on first run). There are some quirks with certain DAWs...
If you find you have issues with a particular DAW, please feel free to submit a bug report.
Q: OMG! LSDj does not start when I hit play in my DAW :o
A: Make sure you have the correct sync mode selected in both LSDj, and in the context menu!
If you'd like to support development of RetroPlug, donations of any amount are appreciated!
MIT