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
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Roundhead: real ROUNDS players in Cuphead's levels. A Cuphead x ROUNDS mod (BepInEx), live on Melty.
翻譯準備中
正在載入完整 README。
檢視完整 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.