Skip to content

SPLURT-Station/plug13

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

144 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go to Russian README version

Plug13

This is Space Station 13 and Buttplug.io integration through the service.

Implemented using Nuxt 3, Socket.IO and buttplug-js.

List of contents

Space Station 13 - Short Wiki summary

Space Station 13 is a top-down tile-based action role-playing multiplayer video game running on the freeware BYOND game engine, originally released in 2003.

The game is set on a futuristic space station; however, the location of the in-game world can differ depending on the server that is being played, including a spacecraft and an exoplanet.

Players are free to work together with their fellow crewmates to complete tasks and keep the station running smoothly, or they can choose to cause chaos and disrupt the work of others. The game has a variety of different game modes and win conditions, which can range from simple survival to complex conspiracies and political intrigue.

Go to the Wikipedia page

How to use Plug13

  • You open the app and authorize (authorization is just for discord to handle bots, spam and stuff).
  • Connect to Intiface Central.
  • Find devices and configure them.
    App allows you to set modifier for every type of interaction with your character:
    • Face for kisses and oral things, chest for breasts and chest... crotch for crotch and back for ass.
    • Basic is for hugs, headpats, etc.
    • Masochism for Security department players.
  • Generate and copy code XXXXX-XXXXX.
  • Open the game and enter/paste this code in the special menu.
    OOC -> Plug13 by default.
  • Enjoy your game.

– It's overcomplicated!

Yes it is. This is the only way you can do this without hacking into a game, risking to be banned.

And also when everything is already set up, you need just to connect Intiface and copy the secret code. That's it.

What toys devices are supported?

Currently only vibration and oscillation are supported.

A list of devices that can connect to buttplug.io can be found on IoST Index.
The same site also contains referral links from the developers of buttplug.io for the purchase of devices - a great way to support them.

Service internals

So, Space Station 13 is a game that has roleplay servers. Every server runs their own code.

This project has two parts:

  • Plug13 service, that acts like a bridge between Intiface Central and the game.
  • Module for SS13 servers that allows SS13 server and Plug13 service communicate.

By steps:

  • On server procedure plug13.send_emote(type, strength, duration) is called
  • SS13 server sends HTTP(S) POST request to Plug13 server.
  • Plug13 server sends WS message to the Plug13 web-client.
  • Web-client applies custom user-defined modifiers and sends message to Intiface Central.
  • Intiface Central handles message and activates actuators.

What? Whyyyy?!

- Hey! Intiface Central is already a bridge, that allows you to do that without an external server!

Yes. I know. But.

BYOND engine is so old... It doesn't allow you to use WS on the client side natively.
Yeah.

In theory I could use hidden IE11 browser window in game interface, but it would be a way bigger pain in my back to implement that, than this web-service.

How to run this project

DM server - Byond

Read here: Plug13 DM - ReadMe

Web - Short explanation

This project uses pnpm.

# To install modules run:
pnpm install

# To start a development server:
pnpm run dev

# To build project in production mode:
pnpm run build
pnpm run prisma migrate deploy

# To preview production-built project:
pnpm run preview

# To run production-built project:
node ./server/index.mjs

Web - Detailed explanation

Run in Docker

  1. Install Docker
  2. Clone this repo:
git clone https://github.com/SPLURT-Station/plug13.git
cd plug13
  1. Configure environment variables:

Copy variables from .env.example to .env

cp .env.example .env

Then change them to your needs
You have to provide your own PostgreSQL database

  1. Build the image:
docker build -t plug13 .
  1. Run the image:
docker run -d -p 3000:3000 plug13

Server will be available on http://localhost:3000

Docker Compose

docker-compose.yml runs the same image as above. Copy .env.example to .env and set every variable there, or override keys in the compose environment block (see comments in the file).

cp .env.example .env
# edit .env
docker compose up -d --build
  • PLUG13_HTTP_PORT — host port (default 3000).

  • Registry image: comment out build: and set image: ghcr.io/splurt-station/plug13:latest (or your fork).

  • Optional Postgres: add POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB to .env, set both POSTGRES_*_URL values to postgresql://USER:PASSWORD@postgres:5432/DB (see comments in compose), then:

    docker compose --profile db up -d

CI: GitHub Actions → GHCR → Dokploy (Docker Compose)

This repo includes .github/workflows/docker-build-dokploy.yml. On every push to main it:

  1. Builds the image from the root Dockerfile and pushes to GitHub Container Registry (ghcr.io/splurt-station/plug13 for this repo), tags: latest and short Git SHA.
  2. POSTs to your Dokploy Docker Compose webhook so the stack redeploys and pulls the new image.

Secrets (GitHub → Settings → Environments → production)

The workflow runs against the production environment so you can use environment secrets and protection rules (required reviewers, wait timers, branch limits).

Secret Description
DOKPLOY_COMPOSE_WEBHOOK_URL Full webhook URL from Dokploy → Docker ComposeDeployments. Repository secrets still work; prefer storing this on the production environment. If omitted, the image is still pushed; the Dokploy trigger step is skipped.

Dokploy Compose file (created in the Dokploy app) should reference the same image the workflow pushes, e.g.:

services:
  app:
    image: ghcr.io/splurt-station/plug13:latest
    # env, ports, networks — set in Dokploy as usual

Forks use their own ghcr.io/<owner>/plug13 path (see the workflow log after push). For private images, configure registry credentials in Dokploy so the host can pull from GHCR.

Per Dokploy auto-deploy docs, Docker-based flows expect the pushed tag to match what the Compose service uses (e.g. latest). You can instead use API deploy (POST /api/application.deploy with x-api-key) for single applications; Compose stacks use the webhook URL pattern above.

Run natively

  1. Install Node.js and pnpm

Short opinionated guide:

curl -fsSL https://raw.githubusercontent.com/mklement0/n-install/stable/bin/n-install | bash -s 20
corepack enable pnpm
  1. Clone this repo:
git clone https://github.com/SPLURT-Station/plug13.git
cd plug13
  1. Install modules:
pnpm install --frozen-lockfile
  1. Configure environment variables:

Copy variables from .env.example to .env

cp .env.example .env

Then change them to your needs
You have to provide your own PostgreSQL database

  1. Migrate database:
pnpm prisma migrate deploy
  1. Start the server

Development server: pnpm dev

Production server:

  • pnpm build
  • node ./server/index.mjs

Server will be available on http://localhost:3000


If you encounter an error like

ERROR Error while requiring module shadcn-nuxt: Error: Cannot find module '@oxc-parser/binding-linux-x64-musl'

then you need to install oxc-parser manually:

pnpm install -D oxc-parser

and then rebuild the project

About

SpaceStation13 + Buttplug.io

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Vue 47.0%
  • TypeScript 41.5%
  • DM 6.1%
  • JavaScript 2.8%
  • SCSS 1.6%
  • Dockerfile 1.0%