RuboMods-NoOrbLimit icon

NoOrbLimit

Every killed enemy always drops exactly one orb: no vanilla 3-orb cap and no player-proximity rule. Host-only. Tested on R.E.P.O. v0.5.0.

Last updated 4 days ago
Total downloads 1796
Total rating 1 
Categories AI Generated Items Server-side Monsters
Dependency string RuboMods-NoOrbLimit-1.1.0
Dependants 0 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2305 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2305

README

NoOrbLimit

NoOrbLimit makes every enemy kill drop an orb.

In vanilla R.E.P.O. an enemy only drops an orb if a player was close to it during the last few seconds, and each enemy type has a small drop cap (usually 3). NoOrbLimit removes both limits, so a killed enemy always drops exactly one orb per death, no matter where on the map it died.

Only the host needs this mod. Orb drops are decided by the master client, so clients can join without installing anything.

What it does

  • Every killed enemy drops one orb.
  • The vanilla per-enemy cap (spawnValuableMax, usually 3) is ignored.
  • The vanilla "player within 20 m in the last 10 seconds" rule is ignored.
  • Duplicate Despawn() calls for the same death cannot produce a second orb.
  • A per-level safety cap is available but disabled by default.

How it works

One orb per death

EnemyParent.Despawn() is the only place where enemy death orbs are spawned. NoOrbLimit wraps it with a Harmony patch and only changes the fields the vanilla condition reads; the original method still runs unchanged.

The spawnValuableMax cap is removed

Vanilla checks spawnValuableCurrent < spawnValuableMax. With RemoveOrbLimit = true, the cap is temporarily lifted for the duration of the call and restored afterwards, even if the original method throws.

The 20 m / 10 s proximity rule is removed

Vanilla also requires valuableSpawnTimer > 0; that timer only becomes positive when a player was within 20 m during the last 10 seconds. With IgnorePlayerProximity = true, the timer is set to 10 for the duration of the call, which is exactly what the vanilla proximity check would have done. The value is restored afterwards.

Duplicate protection

EnemyParent.Despawn() has no re-entry guard, so one death can call it more than once (for example from death code and from an animation event). NoOrbLimit remembers, per EnemyHealth component, that an orb was already produced for the current death and blocks any further attempt. The flag is reset in EnemyHealth.OnSpawn(), i.e. when the same enemy respawns, so its next death can drop one orb again.

Host only

  • Drops are spawned by the master client.
  • Clients do not need NoOrbLimit, and it does nothing on them.
  • If you are a client, install it on the host's game to change the drops.

Configuration

The config file is created at BepInEx/config/com.reponoorblimit.host.cfg after the first launch.

Setting Default Description
Enabled true Master switch for the mod.
RemoveOrbLimit true Ignore the vanilla per-enemy cap (spawnValuableMax, usually 3).
MaxOrbsPerLevel 0 Optional safety cap for enemy orbs per level. 0 = no cap.
OrbDropChancePercent 100 Extra drop chance rolled once per death. 100 = always drop.
IgnorePlayerProximity true Ignore the vanilla 20 m / 10 s player-proximity rule.
VerboseLogging false Log every drop decision and the reason it was blocked.

The "exactly one orb per death" guarantee applies with the default values:

Enabled = true
RemoveOrbLimit = true
IgnorePlayerProximity = true
MaxOrbsPerLevel = 0
OrbDropChancePercent = 100

Known limitations

  • Prefab-disabled drops are left untouched. Some enemies have spawnValuable = false or spawnValuableMax = 0 in their prefab and never drop an orb. An example is the Tick before it reaches full HP. NoOrbLimit does not override prefab-level decisions by default. Enable VerboseLogging to see the exact reason for each enemy in BepInEx/LogOutput.log.
  • Photon view ID ceiling. R.E.P.O. uses Photon and room objects share a pool of 999 view IDs (1..999). Every orb is a room object. If a level creates enough networked objects, the pool can run out; NoOrbLimit cannot raise this limit. MaxOrbsPerLevel is the available safety valve if that ever happens.
  • Performance. A large number of orbs on one level means more networked and physics objects, which can cause lag or stutter, especially for clients with a weaker connection or CPU.
  • Enemies without an EnemyHealth component can never drop an orb.

Compatibility

  • Tested with R.E.P.O. v0.5.0.
  • Requires BepInEx 5.4.23.5 (BepInEx-BepInExPack-5.4.2305).
  • Host-side only; clients do not need the mod.
  • Other mods that also patch EnemyParent.Despawn() may conflict. If drops stop working, check LogOutput.log for Harmony or reflection errors.

AI-assisted

This mod was created with the help of AI (AI-assisted development). The code was reviewed and tested in game, but please report any issues you find.

Credits

Made by RuboMods.