Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
| Last updated | 5 hours ago |
| Total downloads | 40 |
| Total rating | 0 |
| Categories | Misc AI Generated |
| Dependency string | Randez-MedkitScatter-0.0.1 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2305README
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 |
|---|---|---|
AllowedVolumeTypes |
Small,Medium,Tiny,Big |
Which loot volume sizes may be used. Order = priority |
AllowLevelPointFallback |
true |
Fall back to navigation points when no volume is free |
LevelPointOffset |
0.35 |
Horizontal nudge off a navigation node, metres |
RaycastUp |
1.0 |
Ray start height above the candidate, metres |
RaycastDistance |
3.0 |
Ray length, metres |
GroundRaycastMask |
-1 |
Layer mask for floor detection, -1 = all layers |
GroundOffset |
0.08 |
Lift above the floor after the raycast, metres |
ClearanceRadius |
0.45 |
Free-space check radius, metres |
SpawnDelayFrames |
2 |
Frames to wait after generation finishes |
Compatibility
- REPOLib — not required and not referenced. Installing it alongside is fine.
- Mods that patch the vanilla valuable spawn (for example Shop Items Spawn in Level) work fine: this mod only reads which volumes are taken, it never blocks a spawn.
- A mod that adds its own health pack items will make automatic detection ambiguous. In that case Medkit Scatter logs an error and disables itself for the session rather than spawning random modded items.
Requirements
- R.E.P.O. v0.4.4
- BepInEx 5 (
BepInEx-BepInExPack 5.4.2305)
Русская версия
Разбрасывает ванильные аптечки (25 / 50 / 100 HP) по каждому сгенерированному уровню R.E.P.O. v0.4.4.
Мод нужен только хосту. Клиенты видят аптечки на чистой ванильной установке: объекты создаются как room objects Photon, поэтому переживают выход владельца и буферизуются для поздних подключений. Если мод стоит у клиента, а у хоста нет — аптечки просто не появятся, ошибок не будет.
Правила:
- В одной комнате не больше одной аптечки от мода. Это не настраивается.
- Количество:
аптечек = комнат / 4(делитель настраивается), с нижней границей 1. - Коридоры считаются в знаменателе, но лут в них не ставится.
- Грузовик, стартовая комната, точки извлечения и модули
Specialисключены. - Никаких кастомных ассетов и зависимости от REPOLib.
Файл настроек: BepInEx/config/AitServices.MedkitScatter.cfg. Полная таблица ключей —
в английской части выше; названия ключей одинаковые, значения по умолчанию тоже.
Для отладки: ExtendedLogging = true печатает весь план размещения уровнем Info,
поэтому он виден и в консоли, и в LogOutput.log. FixedSeed не равный нулю даёт
одинаковую раскладку при каждом прогоне одного и того же уровня.