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 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證BepInEx IL2CPP plugin for GTFO that makes co-op easier by tuning health, regen, stamina, fall damage, ammo and enemy detection, with 530+ config entries for nearly every other balance value. Adjusts the game's own loaded datablocks at runtime, so it keeps working across balance patches. On Thunderstore.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A BepInEx IL2CPP plugin for GTFO that tunes health, regen, stamina, fall damage, ammo, and enemy detection for an easier co-op run, with 530+ further config values exposed underneath for players who want to go deeper.
Try it: install from Thunderstore (listed
there as GtfoEZ, since package names can't contain a period).
.cfg, so this mod runs a one-time, per-setting migration whenever a default changes,
instead of leaving upgraders stuck on a stale number forever.Core tuning (community-consensus defaults; see package/README.md for the full
vanilla-vs-default table):
Stamina Multiplier that goes further still), fall damage amount and max-damage height, weapon/tool ammo,
and enemy movement-detection range.Fog Clearing.Bots, off by default): forces every bot's tool slot to the
basic Sentry Gun.Everything else - 530+ further config entries covering flashlights, movement speed, friendly
fire, battery drain, no-air damage, per-enemy health/damage, the full per-difficulty-tier
ExpeditionBalanceDataBlock (loot budgets, enemy caps, level generation, doors), every melee
weapon, and every ranged weapon archetype plus sentries - all left at vanilla by default. See
package/README.md for the complete breakdown, including real in-game weapon names.
Experimental (Experimental config section; see Limitations below):
PING <KEY> from any terminal reaches an item anywhere in
the level, not just the terminal's own zone. Same-zone pings are left to the game's own PING.
A cross-zone ping is sent to the whole team (over GTFO-API): every player gets the same marker on
the same item for the same 10 seconds, and their event log says who pinged what.
Technique credit: BetterTerminal by
AlexanderMakunin (MIT).| Input | Action |
|---|---|
| E (aiming your sentry) | Place the selected turret - every bot's first, yours last - instant; back to your previous weapon once yours is down |
| 4 (sentry in hand, pressed again) | Cycle the selection among the bot turrets still available |
| Shift+E (aiming your sentry) | Place a bot's turret at your aim (never yours) |
| Insert | Infinite health on/off |
| Delete | Infinite ammo on/off |
| X | Drop the next turret at your current position/orientation - bots first, then your own |
| Z | Recall every bot-placed turret and your own placed sentry, all at once |
Requires the .NET 6 SDK and BepInExPack_GTFO already installed
and launched at least once ("Modded" start) in a Thunderstore Mod Manager or r2modman profile.
git clone --recurse-submodules https://github.com/mindattic/GTFO.EZ.git
cd GTFO.EZ
.\build.ps1
This builds against the Thunderstore Mod Manager profile named "Easy Mode DEV" by default
(.\build.ps1 -Profile MyProfile to use another one), places the plugin straight into that
profile's BepInEx/plugins/GTFO.EZ/ folder so you can launch the game and test immediately, and
also produces dist/GTFO.EZ-<version>.zip for sharing. A successful load lists "GTFO.EZ vN
Active" (plus a line per other active GTFO.* mod) on the rundown-select screen and again as a warden-intel message in-level.
If you're on the older r2modman app instead, its profiles live under a different path - point the build at it directly:
dotnet build .\src\GTFO.EZ\GTFO.EZ.csproj -p:BepInEx="$env:AppData\r2modmanPlus-local\GTFO\profiles\Default\BepInEx"
GameDataInit.Initialize (game boot)
|
v
GameDataTweaks postfix patch
|
+--> ApplyPlayerTweaks (health, stamina, fall damage, ammo, movement...) /
| ApplyFlashlightTweaks / ApplyDetectionTweaks / ApplyLootTweaks / ...
| (each of the 9 tweak categories runs in its own try/catch -
| one broken category logs and skips, the rest still apply)
v
multiplies fields directly on the game's own loaded datablocks
(PlayerDataBlock, FogSettingsDataBlock, ExpeditionBalanceDataBlock, ...)
No datablock JSON is shipped or copied. Everything is a multiplier (or toggle) applied in memory
once, at load time, read from the BepInEx config. Additional Harmony patches cover behaviour that
isn't a simple datablock field: one-time control
defaults (ControlDefaultsPatch), revive speed, bot sentry equipping, instant sentry placement
(SentryInstantPlacementPatch), sentries passing through each other and bullets
(SentryPassThrough: a live sentry's solid colliders move to a layer no bullet or sentry ray
includes, picked at runtime from LayerManager's masks, and live sentries ignore each other's
colliders), the experimental bot tool controls
(DeployPickupHotkeys), Ping Anywhere (TerminalPingPatch), and fog clearing (FogClearPulse).
All tweaks are multipliers or toggles, tunable after first launch in
BepInEx/config/MindAttic.GTFO.EZ.cfg - no rebuild needed to retune a value. The first entry,
[0. Mod] Enabled, is the master switch: false and the mod returns from Load before binding or
patching anything else (the other mods sharing its code then treat it as not installed). Config sections
mirror the feature groups above: Health, Stamina, Fall Damage, Ammo, Lighting, Enemy Detection,
Movement, Combat, Utility, Environment, Enemy Balance, Loot, Interactions, Controls,
Bots, Expedition Resources/Enemies/Level Gen/Doors, one section per melee weapon and per weapon
type/archetype, Sentries, Fog Clearing, and Experimental. (The Artifacts section and the kit
settings under Loot moved to GTFO.EZ.AbsurdItems; an older .cfg keeps them as leftover lines that
do nothing here.)
BepInEx keeps whatever value is already in a player's .cfg, so when this mod changes a default
between versions, an existing install won't pick up the new number on its own -
Plugin.ApplyConfigDefaultMigrations applies the one-time, per-setting correction instead of
leaving upgraders silently stuck on a stale default (see package/CHANGELOG.md for the version
each migration was introduced in).
dotnet test tests\GTFO.EZ.Core.Tests\GTFO.EZ.Core.Tests.csproj
No game install or BepInEx profile needed - GTFO.EZ.Core holds the plugin's pure balance data and
math (weapon/melee config-table generation, the WeaponMult/MeleeMult/ScaleInt multiplier and
rounding logic, config-key validation) with no BepInEx/Il2Cpp dependency, so it's unit tested
directly with NUnit. The datablock patches themselves (src/GTFO.EZ/Patches/) can't be unit
tested - they only run against the game's own loaded data - so verify those by launching the game
after build.ps1.
src/GTFO.EZ/ the plugin project (BepInEx/Il2Cpp - needs the game installed to build)
src/GTFO.EZ.Core/ pure balance data/math the plugin uses, with no BepInEx/Il2Cpp dependency -
split out so it's unit-testable; ships alongside GTFO.EZ.dll at runtime
tests/ GTFO.EZ.Core.Tests - NUnit, runs with plain `dotnet test`, no game needed
package/ exactly what ships to Thunderstore / gets zipped for sharing
manifest.json Thunderstore package name is "GtfoEZ" (no period allowed there)
README.md becomes the Thunderstore page - full vanilla-vs-default tables and changelog
CHANGELOG.md
icon.png 256x256, resized from reference/logo-1254x1254.png
reference/ (gitignored) local-only: EasyMode's files, vanilla data dumps, notes
build.ps1 builds the plugin and packages dist/GTFO.EZ-<version>.zip
external/
GTFO.EZ.Shared/ git submodule: the shared code this mod and some companions compile in (see Shared code)
GTFO.EZ is the core of the GTFO.EZ family: GTFO.EZ.AbsurdWeapons, GTFO.EZ.AbsurdMoves and GTFO.EZ.AbsurdItems are companion mods built on it (each compiles in the code below; each works on its own too), and GTFO.CrashTestDummies compiles in the same shared code.
The code shared by GTFO.EZ, its Absurd companions and GTFO.CrashTestDummies lives in its own repo,
GTFO.EZ.Shared. Each mod has it as a git submodule
at external/GTFO.EZ.Shared and compiles the files it uses straight into its own DLL (linked
<Compile> items in its .csproj, shown under Shared\ in the IDE), so players install nothing
extra. Clone with --recurse-submodules, or run git submodule update --init in an existing clone. The files:
SharedOwner.cs - with several of the mods installed, picks the one that answers shared keys
(the first installed of GTFO.EZ, GTFO.EZ.AbsurdWeapons, GTFO.EZ.AbsurdMoves, GTFO.EZ.AbsurdItems,
GTFO.CrashTestDummies)
and holds state every copy must agree on once for the whole game process. A mod whose master
switch ([0. Mod] Enabled) is off counts as not installed. SharedOwner.IsActive(guid) and
SharedOwner.TryGetSetting<T>(guid, section, key, out entry) are how one mod checks another
(installed, loaded and switched on) and reads its settings.InfiniteToggles.cs - Insert / Delete, infinite health and ammo, announced in the event log and
always in the console too.MessageHelper.cs - on-screen messages for the local player, wherever they fit:
MessageHelper.Show(text, MessageType.Warden | EventLog | Center | Subtitle, seconds). Compiled by GTFO.EZ, its Absurd companions and GTFO.CrashTestDummies.KitLoot.cs - kits as consumables. Compiled by GTFO.EZ.AbsurdItems only (its Consumables Are
Kits, with Loot Mix's Frag/Plasma Grenades and Stim Packs as extras). GTFO.EZ doesn't use it, so
GTFO.EZ.csproj leaves it out of this mod's build.RemoteEvents.cs - RemoteEvents.Register<T>(name, handler), a GTFO-API network event whose
handler can't throw (an exception escaping one would hand GTFO-API's packet to the game's own
receive). Compiled by the mods that use GTFO-API - GTFO.EZ.AbsurdWeapons and GTFO.EZ.AbsurdMoves -
and, like KitLoot.cs, left out of this mod's build.To change any of them, commit and push to GTFO.EZ.Shared, then in each mod move the submodule to
that commit (git -C external/GTFO.EZ.Shared pull origin main), rebuild and commit the new
submodule pointer.
v1, v2, v3... - major-only bumps, matching the convention across other MindAttic projects.
Thunderstore requires manifest.json's version_number to be strict x.y.z, so "v1" is 1.0.0,
"v2" is 2.0.0, and so on (minor/patch stay 0). package/CHANGELOG.md headers use the short vN
form; the manifest keeps the N.0.0 form Thunderstore requires.
The GTFO.EZ family - GTFO.EZ, GTFO.EZ.AbsurdWeapons, GTFO.EZ.AbsurdMoves and GTFO.EZ.AbsurdItems -
shares one version number, so a matching set is easy to spot: they were aligned at v13 (the
companions were v1 before, and GTFO.EZ's in-development v14 was folded into v13), and every release of
the family bumps all four together. GTFO.CrashTestDummies and GTFO.SkipDrop joined the same vN
scheme at v17. Current release: v20.
dist/ as a local mod in your mod manager, then
Settings -> Profile -> Export profile as code and send friends the code.SentryGunInstance.PickUp(PlayerAgent) directly
too (the same real pickup call the vanilla walk-up-and-interact flow ends in). Shift+E and E are
confirmed working in play, as is the weapon switch-back after placing your own. X's quick-drop-all
and Z's own-sentry recall (v19) compile against the real interop assemblies and are placement/
pickup calls proven safe elsewhere in this mod, but haven't yet been confirmed in an actual play
session.LevelAPI.OnBuildStart
fires before level generation reads the ExpeditionBalance/artifact/consumable datablocks (the client
applies the host's values the moment they arrive in the lobby - a few seconds after joining - and
checks again at build start, but a late joiner whose level builds before the host's answer arrives
gets the warning instead); that the interop properties restore cleanly by reflection; that
re-running GTFO.EZ.AbsurdItems' kit-loot postfix (found by owner and type name among GameDataInit's
patches) gives the same tables as at startup; and that the event log is visible in the lobby (every
notice is shown again when the level starts). GTFO.EZ.AbsurdItems' level settings (kit loot, Loot
Mix, Frag/Plasma Grenade pickup counts and switches) follow the host too (G.EZ-T128/GAI-T40): handed
to its public HostLevelSettings hook by reflection before the re-apply, also unconfirmed in play
(an older AbsurdItems without the hook keeps its own values and is only warned about).docs/USER_STORIES.md - the project's living feature/ticket log (generated from the shared
workflow database; don't hand-edit it).package/README.md - the Thunderstore page: the complete vanilla-vs-default stat tables and the
full version-by-version changelog.AGENTS.md - entrypoint for LLM agents working in this repo.No LICENSE file is included in this repository; all rights are reserved.
See package/README.md for full credits to the other GTFO mods and the modding community this
project's design and defaults are built on.
Part of MindAttic - see more projects at github.com/mindattic. Other GTFO mods from the same team: GTFO.EZ.AbsurdWeapons (new weapons, with its own End toggle to carry them on a serious run), GTFO.EZ.AbsurdMoves (new movement abilities, gated behind its own Home toggle), GTFO.EZ.AbsurdItems (artifact buffs and glow, the Frag and Plasma Grenades and Stim Pack, consumables as kits, and breadcrumb markers), GTFO.CrashTestDummies, and GTFO.SkipDrop.