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
Play Cuphead's campaign as your ROUNDS character: the loser picks a card, the deck resets when you win, every card works on Cuphead's…
GamesC# · PythonGitHub @neednotapplyOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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
Roundhead: real ROUNDS players in Cuphead's levels. A Cuphead x ROUNDS mod (BepInEx), live on Melty.
Translation pending
Loading the full README.
Read the full README ↗Play Cuphead's whole campaign as your ROUNDS blob.
Play it on Melty: melty.gg/m/roundhead. One click, using your own Steam copies of Cuphead and ROUNDS. The trailer is on that page; a smaller preview is in media/listing.
Requires your own Cuphead and ROUNDS (the mod-compatible "old-rounds-for-mods" branch Thunderstore supports), both on Steam. Roundhead plays Cuphead's save slot 1 (slots 2 and 3 are left as they are); its cards are saved beside it in %LOCALAPPDATA%\CupRounds\saves, never inside Cuphead's save.
Player 1 has ROUNDS's keyboard and mouse layout; gamepads work for both players.
| Keyboard + mouse | Gamepad | |
|---|---|---|
| Move | A / D (or Cuphead's keys) | left stick |
| Jump | W or Space (hold for higher) | Cuphead's Jump |
| Drop through a platform | S + jump | down + Jump |
| Aim | mouse (crosshair) | right stick |
| Shoot | left mouse (ROUNDS guns fire per click unless cards make them fast) | right trigger or Shoot |
| Block / parry | right mouse, Cuphead's Dash or EX | left trigger, Dash or EX |
| In plane levels | WASD fly, Space parries, Dash or Lock shrinks, right mouse or EX blocks | as in Cuphead; EX blocks |
| Card pick | A / D or the mouse, Space or click to take | left / right, Jump |
| World map and menus | WASD, Space | as in Cuphead |
| Card pack (shop) | P | Lock |
CupRoundsLauncher.exe: the launcher Melty starts (Thunderstore browser, the FACES editor, Play). Your faces are kept in %LOCALAPPDATA%\CupRounds\faces.txt, the editor's pictures in %LOCALAPPDATA%\CupRounds\faces.cuphead/BepInEx/plugins/CupRounds/CupRounds.Cuphead.dll: BepInEx plugin for Cuphead (sends the level and input to ROUNDS, draws ROUNDS's picture, card picks and saves).rounds/BepInEx/plugins/CupRounds.CardEngine/CupRounds.CardEngine.dll: BepInEx plugin for ROUNDS (runs ROUNDS's sandbox with Cuphead's level, the players and the pick screen), talking to Cuphead over shared memory and localhost.You need Windows, the .NET SDK (8 works; the projects target net35, net472 and net48), Python 3, Git Bash for the dev scripts, and your own Cuphead and ROUNDS on Steam. Nothing from either game is in this repository, and nothing should be added.
Unpack BepInEx 5.4.23.2 (BepInEx_win_x64_5.4.23.2.zip from the BepInEx GitHub releases) into ~/cuprounds-work/dl/bepinex. A different work folder can be set with CUPROUNDS_WORK.
Put the license texts the package ships into ~/cuprounds-work/dl. The BepInEx download contains none of them, so take each from its project's repository:
| File | From |
|---|---|
BepInEx-LICENSE.txt | github.com/BepInEx/BepInEx, LICENSE (MIT) |
UnityDoorstop-LICENSE.txt | github.com/NeighTools/UnityDoorstop, LICENSE (LGPL-2.1) |
HarmonyX-LICENSE.txt | github.com/BepInEx/HarmonyX, LICENSE (MIT) |
MonoMod-LICENSE.txt | github.com/MonoMod/MonoMod, LICENSE (MIT) |
Mono.Cecil-LICENSE.txt | github.com/jbevain/cecil, LICENSE.txt (MIT) |
The first two are required. The packager warns about the last three when they are missing.
If your games are not in D:\SteamLibrary\steamapps\common, give their folders to the build as the CupheadDir and RoundsDir environment variables. In PowerShell that is $env:CupheadDir = 'E:\Steam\steamapps\common\Cuphead', and in Git Bash export CupheadDir='E:\Steam\steamapps\common\Cuphead'. The dev scripts set both from CUPHEAD_DIR and ROUNDS_DIR. ROUNDS must be on the old-rounds-for-mods branch.
Decompile your own copies once, for the preflight's hook checks. Install the decompiler with dotnet tool install -g ilspycmd, then run it on each game's Assembly-CSharp.dll:
ilspycmd -p -o ~/cuprounds-decomp/cuphead "<Cuphead>/Cuphead_Data/Managed/Assembly-CSharp.dll"
ilspycmd -p -o ~/cuprounds-decomp/rounds "<ROUNDS>/Rounds_Data/Managed/Assembly-CSharp.dll"
This decompiled code is for checking on your machine only. Never commit it.
The design sheets in sheets/ are the source of truth, and src/Shared/Generated is made from them. Run python -I tools/sheets.py gen after editing a sheet, and python -I tools/sheets.py preflight --code before every build. It must print .
NOTES.md holds the design and testing notes. devtools has the scripts that run the mod on the real games with test bots and that filmed the listing media.
Roundhead is MIT licensed. Its package bundles BepInEx 5.4.23.2 (MIT, with HarmonyX, MonoMod and Mono.Cecil, all MIT) and UnityDoorstop 4.3.0 (LGPL-2.1, shipped unmodified as version.dll). Neither is in this repository; their licenses go in the package's third-party-notices folder. Cuphead and ROUNDS are not included: Cuphead is by Studio MDHR Entertainment Inc., ROUNDS is by Landfall Games, and the mod needs your own copies of both. Card mods are by their Thunderstore authors. Made with AI assistance (Claude) for Melty.
cleanpython -I tools/package.py 0.1.6 runs the preflight, builds all three projects and writes dist/Roundhead-0.1.6.zip, the package Melty installs.
To release it, attach that zip to a GitHub release tagged with the version (v0.1.6). melty.json at the repository root is the Melty install recipe; it names the package Roundhead-*.zip, so Melty takes the tested zip from each release instead of building from source, which needs your own games.
To play the staged build without Melty, copy dist/stage/proxy-cuphead/version.dll into your Cuphead folder and dist/stage/proxy-rounds/version.dll into your ROUNDS folder, then start dist/stage/managed/CupRoundsLauncher.exe. Remove the two version.dll files afterwards. devtools/devloader.sh does the copying for the dev install.