Skip to content

EmuLinker-K is a server that facilitates emulator netplay using the Kaillera protocol.

License

Notifications You must be signed in to change notification settings

hopskipnfall/EmuLinker-K

Repository files navigation

Maintained build Make a pull request

Watch on GitHub Star on GitHub Tweet

EmuLinker-K

EmuLinker-K (ELK) is a server that uses the Kaillera protocol to facilitate online multiplayer for emulators.

EmuLinker-K is a Kotlin rewrite of EmulinkerSF, with an emphasis on measuring and improving performance, patching security and privacy vulnerabilities, and adding useful features for both server owners and users. EmuLinker-K is maintained by nue.

Feel free to file bugs and feature requests on this repository, or find our channel in the Kaillera Reborn discord:

Discord

Setting up a new server

If you want to start a new server, see our Releases page for the latest stable release.

// TODO(nue): Write better instructions, including how to work with charsets.

Features

Experimental/beta features

These features may be removed or changed without warning.

Twitter integration

You can have the server make a Twitter post when a user opens a game, and either delete it or reply marking it as "closed" when the game starts. At the time of writing this, both options are supported by the Twitter API free tier.

image

To set it up, configure the following values in config/emulinker.cfg:

# Twitter reporting integration switch. When enabled it will
# broadcast new open games.
twitter.enabled=true

# Delay (in seconds) before sending a tweet.
twitter.broadcastDelaySeconds=20

# Comma-separated list of phrases that, if found in the name
# after a "@", will prevent tweet posting.
# Example username: nue@waiting
twitter.preventBroadcastNameSuffixes=waiting,restart
# If true, will simply delete the tweet when the game starts.
twitter.deletePostOnClose=false

# You will need to make a new Twitter API app and fill in these values.
twitter.auth.oAuthAccessToken=
twitter.auth.oAuthAccessTokenSecret=
twitter.auth.oAuthConsumerKey=
twitter.auth.oAuthConsumerSecret=

You will also need to configure some messages in config/language.properties:

KailleraServerImpl.TweetPendingAnnouncement=Posting a tweet in {0} seconds. Type \"/stop\" to disable.
KailleraServerImpl.TweetCloseMessage=(opponent found)
KailleraServerImpl.CanceledPendingTweet=Canceled pending tweet.

With these settings, users whose name ends in @waiting (meaning they are waiting for a specific person to join their game) or @restart (meaning they are restarting the game and are waiting for the same person to join) will not have tweets sent. Similarly, users will be notified and given 20 seconds to type /stop to stop the tweet from sending. After the game starts, the account will respond to the original tweet with the text "(opponent found)".

Contributing

If you're interested in contributing to this project, please read Contributing.md.