MedkitScatter
Scatters **vanilla** health packs
About this mod Author’s original text
Medkit Scatter
Scatters vanilla health packs (25 / 50 / 100 HP) around every generated level in
R.E.P.O. v0.4.4.
🖥 Host-only
Only the host needs this mod. Clients see the health packs with a completely
vanilla install — the packs are spawned as Photon room objects, so they survive the
owner leaving and are buffered for late joiners.
If a client has the mod but the host does not, nothing spawns and nothing breaks.
What it does
- After level generation finishes, the mod counts the level's rooms and places health
packs across them.
- At most one mod-placed health pack per room. This is not configurable — it is the
point of the mod.
- No custom assets, no new items, no REPOLib dependency. It reuses the three vanilla
health pack items and the level designers' own loot placement points.
The formula
RoomCount = number of modules that pass the "counts" filter
TargetCount = clamp( round( RoomCount / RoomsPerMedkit ), MinMedkits, MaxMedkits )
With the defaults (RoomsPerMedkit = 4, Floor, Min = 1, no max) a level of
20 counted rooms gets 5 health packs.
Which module types count, and which may host a pack:
| Module type | Counts toward the total | May host a pack |
| --- | --- | --- |
| Normal | ✅ | ✅ |
| Passage (corridor) | ✅ | ❌ |
| Dead End | ✅ | ✅ |
| Extraction | ❌ | ❌ |
| Special | ❌ | ❌ |
| Start Room / truck | ❌ | ❌ |
Corridors count but do not host: they define how big a level feels, but loot lying in a
through-corridor reads badly.
Where a pack ends up
- Preferably a free ValuableVolume — a spot a level designer placed by hand on a
table, shelf or floor. Spots the vanilla game already filled are skipped.
- Otherwise a level navigation point, nudged slightly off the path node.
Either way the position is finished with a downward raycast onto real floor geometry
plus a clearance check, so packs do not float, sink through the floor, or clip into
vanilla loot.
Configuration
BepInEx/config/AitServices.MedkitScatter.cfg
General
| Key | Default | Meaning |
| --- | --- | --- |
| Enabled | true | Master switch |
| ExtendedLogging | false | Log the full plan and every spawn (at Info level, so it shows up in LogOutput.log) |
| FixedSeed | 0 | 0 = seed derived from the run; anything else = fixed layout |
| MaxSpawnFailuresPerLevel | 3 | Failed placements tolerated per level |
| MaxExceptionsPerSession | 10 | Caught exceptions before the mod switches itself off until restart |
Amount
| Key | Default | Range | Meaning |
| --- | --- | --- | --- |
| RoomsPerMedkit | 4 | 1…64 | Divisor of the formula |
| RoundingMode | Floor | Floor / Round / Ceil | How the division is rounded |
| MinMedkits | 1 | 0…64 | Lower bound |
| MaxMedkits | 0 | 0…128 | Upper bound, 0 = unlimited |
Rooms
| Key | Default | Meaning |
| --- | --- | --- |
| CountNormal | true | Count normal rooms in the denominator |
| CountPassages | true | Count corridors |
| CountDeadEnds | true | Count dead ends |
| CountExtraction | false | Count extraction rooms |
| CountSpecial | false | Count Special modules |
| SpawnInNormal | true | Allow packs in normal rooms |
| SpawnInPassages | false | Allow packs in corridors |
| SpawnInDeadEnds | true | Allow packs in dead ends |
| SpawnInSpecial | false | Allow packs in Special modules |
| PreferDistantRooms | false | Bias placement away from the start room |
Tiers
| Key | Default | Meaning |
| --- | --- | --- |
| WeightSmall | 60 | Weight of the 25 HP pack |
| WeightMedium | 30 | Weight of the 50 HP pack |
| WeightLarge | 10 | Weight of the 100 HP pack |
| GuaranteeVariety | true | With 3+ packs, guarantee one of each tier. This deliberately overrides the weights for the first three — with 5 packs the real Large share is ≥ 20 %, not 10 %. Turn it off if you want the honest ratio |
| DifficultyScaling | false | Shift weights toward larger packs as the run progresses |
| DifficultyScalingFactor | 0.15 | k in Large × (1 + k × levelsCompleted) |
Placement
| Key | Default | Meaning |
| --- | --- | --- |
| AllowedVolumeTy
Install & use Install: BepInEx plugin
- The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
- Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
- Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
- Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.
Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.
Install these first, or the mod will not work: