This is an emulator hack that turns 1-player games into 2-player games by sharing in-game inventory over the internet.

A screenshot. The Link on the right is now holding a lantern.

It currently works with Legend of Zelda: A Link to the Past; the Link to the Past Randomizer; Super Metroid; and Legend of Zelda for the NES (plus its randomizer). It works well for any game that has locks and keys and backtracking.


In order to run emu-coop, you will need an emulator that can run Lua scripts, such as snes9x-rr or FCEUX. (BizHawk does not work but could in a later version). If you already have an emulator, you can just download:

If you don’t have one, here is a copy of snes9x-rr with the coop script bundled in:

The above are for Windows. You may need to install the “x86” version of the VS2015 C++ redistributable.

If you are on Mac or Linux, you can get this working by dropping built copies of LuaSocket and IUPLua into the folder with the Lua files. I will try to get a Mac version uploaded soon.


Once you have the scripts and emulator, open snes9x-rr and the ROM you wish to play. Then select File->Lua Scripting->New Lua Script Window. Click “Browse” and select “coop.lua” inside the emu-coop directory.

Emu-coop communicates using Internet Relay Chat. You will get a popup asking which IRC server you want to connect to, what nickname you want to use, and what the nickname of your Player 2 will be. Once you’re connected, tell your Player 2 to connect to the same network and enter your nick in their emulator. You should see either “Connected to partner”, or an error message, pop up on your game screen.

If you halt a game in the middle and have to restart– maybe your emulator crashed, or your Internet disconnected, or you died in Super Metroid– you might “desync”, where there are items that one player has but not the other. If this happens, both players should save, close their emulators, connect again, and this time check “Yes” for “Are you reconnecting after a crash?”. This will resend all the data that emu-coop is tracking.

If you run into any problems, please feel free to file an issue on the GitHub page for this project.


You can add support for additional games– or new modes for games emu-coop already supports– by creating a .lua file and putting it into emu-coop’s “modes” directory. If you add a new mode file, you will also need to add its name to the file modes/index.lua.

WARNING: Lua files are PROGRAMS, like a .exe file. A Lua file you install could give you a virus or delete files from your computer. Do not install a mode file unless it came from someone you know and trust.

Sorry, there is no documentation for creating a mode file yet.

Game Support

Some more about the games currently supported:


This was made by Andi McClure. You can find some “normal” video games I made here. The Zelda 1 modes were contributed by MegMacAttack.

Big thanks to:

The change history for the project is here.


I think there’s a LOT you could do with this basic concept, and there’s some changes I’d still like to make. Make sure to watch back here for updates.

Some ideas I think are cool:

There’s also some known bugs/limitations:

If you have your own ideas, feel free to modify the code and send back a pull request on GitHub. The github page for emu-coop is here and the github page for the snes9x build is here.


The default IRC network used by emu-coop is SpeedRunsLive. I went with SRL because Sluip there said it was okay. If you run an IRC network, and you want to ban emu-coop users from using your server, you can spot them because their usernames will end in “-bot” and their “real name”s will end in “(snes bot)”.