ROUNDS
Install

Details

Last Updated
First Uploaded
Downloads
24
Likes
0
Size
22KB
Dependency string
SigmaCharple-VeryBalancedRoundsMod-0.2.0
Dependants

Categories

Very Balanced Rounds Mod

Custom cards for ROUNDS, built on UnboundLib.

Cards

Card Rarity Effect How it works
Glass Cannon Rare +100% damage, -50% health stats
Glasser Cannon Rare +200% damage, -75% health stats
McDonalds Common +100% health, -50% movement speed stats
Gremlin Common -30% size, +50% movement speed stats
Titan Killer Rare Bullets deal +5% of the target max health vanilla Gun.percentageDamage
Bird Killer Uncommon Your kills cannot be undone by Phoenix DoDamage patch
Inevitable Rare +2% damage per second, compounding, resets each point DoDamage patch + ramp component
Eight Handled Sword Divine General Mahoraga Rare Each hit from an attacker cuts their damage to you by 10% DoDamage patch + adaptation component
Ihateblockbuild Uncommon Blocked bullets still deal 10% of their damage Block.blocked patch
Iloveblockbuild Rare On-block effects trigger twice Block.DoBlockAtPosition patch
Balanced Uncommon Health and bullet damage both become their average OnAddCard

Building

Requires the .NET SDK (8 or newer). From the project root:

dotnet build

That compiles the mod and copies VeryBalancedRoundsMod.dll straight into the Thunderstore profile it was set up against, so the next launch picks it up.

Useful overrides:

dotnet build -p:DeployToRounds=false                 # compile only, don't copy
dotnet build -p:ProfileDir="...\profiles\Default"    # deploy somewhere else
dotnet build -p:RoundsDir="D:\...\common\ROUNDS"     # non-default game install

To produce a Thunderstore-ready zip in dist/:

dotnet build -t:Package

Adding a card

  1. Copy src/Cards/GlassCannonCard.cs to a new file and rename the class.
  2. Add its title to src/Util/CardNames.cs.
  3. Register it in VeryBalancedPlugin.RegisterCards().
  4. dotnet build, then relaunch ROUNDS.

Two things worth knowing:

  • SetupCard runs once at game start, not on pickup. The values you assign to gun and statModifiers there are multipliers over the player's current stats: 2f doubles, 0.5f halves, 1f is neutral. A handful of fields are additive instead, notably Gun.percentageDamage and CharacterStatModifiers.regen, and those treat 0f as neutral. For anything that isn't a stat multiplier, use OnAddCard or a Harmony patch.
  • GetStats() only draws the text on the card face. It doesn't affect gameplay, so it will happily lie to your players if you change SetupCard and forget to update it.

Known caveats

These are design limits, not bugs, and are worth reading before tuning anything.

Balanced averages two quantities that aren't in the same units. Health sits near 100 while a default bullet does 55, so on a fresh player the "average" is 77.5 — which reads as lose a quarter of your health, gain about 40% damage, not as anything symmetric. It also can't be expressed as a multiplier, so it runs in OnAddCard against live values and gets recomputed every time ROUNDS re-applies cards. Expect it to interact unpredictably with other health and damage cards.

Iloveblockbuild re-fires Block.BlockAction, which covers card effects that subscribe to the on-block event — most of them. It does not double block effects implemented elsewhere: objects spawned on block, block healing, the knockback impulse, or cooldown behaviour. It also assumes every subscriber is safe to invoke twice, which other mods do not promise. Treat it as "most on-block effects", not literally all.

Bird Killer works by zeroing remainingRespawns for the duration of a killing blow. That field is what Phoenix uses, but it's also what any other respawn-granting mod uses, so this card suppresses those too. It applies to every kill you cause, not strictly bullets.

Inevitable compounds hard: 2%/second reaches roughly 3.3x at one minute and 10x at two. "Resets each round" is implemented as each point — the individual fight — which is the ROUNDS term for it.

Mahoraga resets its adaptation each point. Left to accumulate across a whole game it would make the holder nearly immune. Its title is also long enough to crowd the card face.

Ihateblockbuild deals damage from inside Block.blocked, which runs on every client via ProjectileHit.RPCA_DoHit, so it should stay in sync. It is the card most worth testing in a real online match rather than against bots.

Testing

Launch ROUNDS through Thunderstore Mod Manager, not Steam directly - the profile's BepInEx is what loads your DLL. Cards appear in the normal between-round pick screen; a local match against a bot is the fastest way to see one.

Logs land in the profile's BepInEx/LogOutput.log.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.