Randez-MedkitScatter icon

MedkitScatter

Scatters **vanilla** health packs

By Randez
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-5.4.2305 icon
BepInEx-BepInExPack

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

Preferred version: 5.4.2305

README

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

  1. 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.
  2. 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 не равный нулю даёт одинаковую раскладку при каждом прогоне одного и того же уровня.