TCAMP (Tiny Combat Arena Multiplayer) is a BepInEx/Harmony mod for Tiny Combat Arena that adds local direct-UDP multiplayer sessions. The current focus is peer-hosted dogfighting: lobby flow, aircraft spawning, remote aircraft interpolation, combat event sync, score tracking, respawns, damageable part sync, multiplayer pause/leave flow, and mid-session loadout changes.
This repository contains the mod source only. It does not redistribute Tiny Combat Arena, Unity, BepInEx, Harmony, or other third-party/game assemblies.
This is a work-in-progress mod. It is playable enough for local host/client
testing. The current public source release is v0.4.1.
- Windows
- Tiny Combat Arena v0.14.1.4
- BepInEx installed in the game
- .NET SDK capable of building
net472projects - Visual Studio 2022 or Build Tools with .NET Framework 4.7.2 targeting pack
The project needs compile-time DLL references from your own game and BepInEx
install. These DLLs live in libs/ locally and are ignored by git.
Populate them with:
.\scripts\CopyReferenceAssemblies.ps1 -GamePath "C:\Program Files (x86)\Steam\steamapps\common\Tiny Combat Arena"If BepInEx is not installed under the game folder, pass its root folder:
.\scripts\CopyReferenceAssemblies.ps1 `
-GamePath "C:\Program Files (x86)\Steam\steamapps\common\Tiny Combat Arena" `
-BepInExPath "C:\path\to\game-or-bepinex-root"Do not commit files from libs/.
dotnet restore .\TCAMP.sln
dotnet build .\TCAMP.sln -c ReleaseThe built plugin is:
src\bin\Release\net472\TCAMP.dll
Copy it into the game's BepInEx\plugins folder.
dotnet test .\TCAMP.sln -c ReleaseThe tests still require the local reference assemblies because the mod project references game/runtime types.
Before publishing or opening a pull request, run:
.\scripts\AssertPublishable.ps1This catches accidentally tracked DLLs, logs, local game copies, decompiler output, and build artifacts.
Run releases from a local machine that already has libs/ populated and the
GitHub CLI authenticated:
.\scripts\Release-Version.ps1 -Version v0.3 -Message "Release v0.3"The release helper bumps src\TCAMP.csproj, src\Core\PluginMetadata.cs, and
this README, stages all non-ignored changes, promotes the CHANGELOG.md
Unreleased section into the new version, builds TCAMP.dll, creates
release\TCAMP-v0.3-plugin.zip, commits, tags, pushes main and the tag, and
creates the GitHub release with the changelog notes, zip, and TCAMP.dll SHA256
checksum attached.
Before running it, replace the placeholder under CHANGELOG.md Unreleased
with the release notes for the next version.
Use this helper instead of manually pushing a release tag. GitHub-hosted runners do not have the local Tiny Combat Arena, Unity, or BepInEx reference DLLs needed to build the plugin, so the workflow only validates repository hygiene on tag pushes.
Useful options:
-StagedOnlycommits only your already staged changes plus the version bump.-Closes 39,40addsFixes #39andFixes #40to the release commit.-RunTestsrunsdotnet test .\TCAMP.sln -c Releasebefore committing.-NoPushcreates the local commit, tag, and zip without pushing or uploading.
src/Core- session state, config, logging, and connection orchestrationsrc/Transport- UDP and Steam transport abstractionssrc/Protocol- packet types, serialization, routing, reliability helperssrc/Game- lobby, spawning, score, map/loadout/airfield helperssrc/Sync- local state reads, interpolation, remote aircraft managementsrc/Combat- gun, missile, bomb, radar, damage, explosion, collision syncsrc/Patches- Harmony patches into the base gamesrc/UI- multiplayer menu, scoreboard, respawn UItests- NUnit protocol/session/unit testsscripts- repo setup and publication checks
No open-source license has been selected yet. Choose and add a license before publishing this repository publicly.