Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Discover and get set up with SharpMUSH.
GamesC# · HTMLGitHub @SharpMUSHOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A dotnet MUSH Server with a PennMUSH compatibility layer
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
SharpMUSH is a modern iteration of a style of text-based role-playing servers referred to as ' MUSHes ' or ' MU* ', written with more modern needs in mind.
It takes its basis and functionality heavily from PennMUSH and its brethren with the intent of a compatibility layer.
Why SharpMUSH
SharpMUSH is a modern iteration of the time-tested MUSH frameworks. It provides a layer of compatibility for PennMUSH for transferability, and builds a modern tech landscape around it that does away with many of the limitations that have made MUSHes harder to use, without losing what makes them great.Read the full README ↗Build and run your own multiplayer text world.
SharpMUSH is an open-source MUSH server for collaborative stories, roleplay and world building. A game plays out in a MU* client, a browser and a Discord server at once, and its systems are written in softcode that builders and players can read and change.
Try the live example · Run a game · Read the docs
Ask questions on Discord · Explore the package library · Develop SharpMUSH
The first release, 1.0.0, is being prepared. See CHANGELOG.md for what each release contains.
To launch a game on a host, see Launch a Server, or deploy one on Railway:
SharpMUSH is available as Docker images on DockerHub:
sharpmush/sharpmush-server - Main serversharpmush/sharpmush-socketserver - Stable telnet/WebSocket socket ownersharpmush/sharpmush-renderer - Replaceable rendering workersharpmush/sharpmush-edge - Caddy, NATS and the socket server in one image, run beside the server and renderer images on hosts that run one container per app (Fly.io, Railway)sharpmush/sharpmush-allinone - Everything in one image, for a one-app game on those hostsFor information on setting up automatic DockerHub publishing when new versions are released, see DockerHub Setup Guide.
The full guide to running SharpMUSH from source and running its tests is Develop SharpMUSH on the documentation site.
global.jsonBuild with:
dotnet build
Run the tests with:
dotnet test
Note: Test telemetry output is disabled by default to reduce console noise. To enable telemetry metrics during test runs, set the environment variable:
export SHARPMUSH_ENABLE_TEST_TELEMETRY=true dotnet test
The main entrypoint to set as a Startup Project is SharpMUSH.Server.
For full integration, run SharpMUSH.SocketServer, which owns client sockets, and SharpMUSH.RenderingWorker, which renders output over a shared Unix socket. The local Compose stack wires all three processes and persistent NATS storage:
docker compose up --build
When launching projects separately on Linux, set Rendering__SocketPath to the same writable path (for example /tmp/sharpmush-render.sock) for both SocketServer and RenderingWorker, and provide NATS_URL to SocketServer and the main server. For quick images from Release binaries, use Dockerfile.socketserver.local for SocketServer and Dockerfile.renderingworker.local for the renderer; mount their shared socket directory.
See connection updates and recovery for migration and restart behavior. The development Kubernetes manifest keeps SocketServer and renderer in one Pod: updating either image replaces that Pod and drops sockets. Use the single-host Compose deployment for independent renderer updates that retain client sockets.
Additionally, a Blazor web client is available at SharpMUSH.Client.