You are viewing a potentially older version of this package. View all versions.
MountainFarmer-Medic-1.1.1 icon

Medic

[Inspired by: UltimateRevive by Quilt] Pick up your teammate’s PlayerDeathHead and press H—spend 20 HP to revive them. Players will automatically show gratitude upon revive with a configurable message.

Date uploaded a week ago
Version 1.1.1
Download link MountainFarmer-Medic-1.1.1.zip
Downloads 2224
Dependency string MountainFarmer-Medic-1.1.1

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2100 icon
BepInEx-BepInExPack

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

Preferred version: 5.4.2100

README

Medic!

Revive fallen teammates by transferring your own health while holding their PlayerDeathHead.
Press H to spend HP and bring them back. On success (and if enabled), the revived player automatically posts a global chat line using the game’s built-in chat pipeline so everyone sees it.

  • Author: callmehill
  • Version: 1.1.1
  • BepInEx: 5.x (tested with 5.4.21)

Features

  • Pick-up revive: Hold a teammate’s PlayerDeathHead and press H to revive.
  • HP transfer: Default cost is 20 HP from the reviver to the revivee.
  • Audible denial: If the reviver lacks enough HP, an in-game deny sound plays (same clip used by chat-limit enforcement).
  • True in-game chat (toggleable): The revivee sends a chat line via the native chat method—identical to a normal message—only on a successful revive and only if enabled.
  • Mixed lobby friendly: Players without the mod can still be revived. (They just won’t emit the chat line unless they’re running the mod.)
  • Randomized gratitude (1.1.0+): On a successful revive, the revivee picks a random phrase from a phrases list loaded at startup.
    • Phrases are read from gratitude_phrases.txt (one per line). Lines starting with # are comments.
    • Search order: plugin folder (next to the DLL) → BepInEx/configfallback list in config.
    • Hot reload: press Ctrl+P to reload the phrases file at runtime.

What’s new in 1.1.1

  • Added: Audible warning on revive denial (insufficient health).
  • Removed: All non-startup logging (only the activation message remains during initialization).
  • Config: Sound/DeniedSoundVolume to control deny sound volume.

What’s new in 1.1.0

  • Added: Chat/EnableGratitude toggle to silence gratitude chat when desired.
  • Added: Randomized gratitude chat with external phrases file and hot-reload.
  • Includes: 8 default phrases out of the box (gratitude_phrases.txt).
  • Guard: Phrases longer than 160 characters are trimmed during load to prevent chat overflow.
  • Fixed: When a client revives the host, the client now correctly loses the configured HP (e.g., 20), while the host respawns at that amount.
    (Added a SyncReviverHealth RPC mirroring SyncRevivedHealth so the reviver’s owner applies the HP cost locally.)

How it works (tech notes)

  • Pressing H while holding a PlayerDeathHead asks the MasterClient to perform an authoritative revive.
  • The revive triggers the game’s native ReviveRPC for the downed player across all clients.
  • After one frame, only the revivee’s client calls the game’s private PlayerAvatar.ChatMessageSend(...) method locally (and only if EnableGratitude is true), so the chat line is broadcast to everyone just like normal chat.
  • Health sync:
    • Master subtracts HP from the reviver and broadcasts it via SyncReviverHealth (v1.0.2+).
    • The revivee’s new HP is applied and broadcast via SyncRevivedHealth.
  • Gratitude phrases: MedicPlugin.GetRandomGratitude() returns a random entry from the loaded list (or the fallback list) and feeds it into the native chat send.
  • Deny sound: On insufficient HP, the mod plays the same native AudioClip the game uses for chat-limit denial.

Note: Unmodded clients may log “RPC not found” for the custom health/chat RPCs. This is harmless and does not affect gameplay.


Installation

  1. Install BepInEx 5 for your game.
  2. Drop Medic!.dll into BepInEx/plugins/Medic!/ (create the folder if needed).
  3. (Optional) Place icon.png, manifest.json, README.md, and gratitude_phrases.txt in the same plugin folder for mod managers.

Usage

  1. Pick up a fallen teammate’s PlayerDeathHead.
  2. Press H to spend HP and attempt a revive.
    • If you don’t have enough HP, you’ll hear an audible deny beep.
  3. On success, the revived player posts a global chat line (same pipeline as normal chat), visible to everyone if chat is enabled and the revivee is running the mod.

Configuration

A BepInEx/config/com.callmehill.medic.cfg file is created on first run.

  • General/HealthTransferAmount (float, default 20)
    How much HP the reviver gives to the revivee.
  • Sound/DeniedSoundVolume (float, default 1.0)
    Volume for the revive-denial beep.
  • Chat/EnableGratitude (bool, default true)
    Toggle to enable/disable the revive gratitude chat line globally on your client.
  • Chat/PhrasesFile (string, default gratitude_phrases.txt)
    File to load phrases from (plugin directory → BepInEx/config).
  • Chat/FallbackPhrases (string, default Wow! Thank you, friend!|You saved me!|I owe you one!|Back in the fight!|That was clutch!)
    Pipe-separated fallback phrases used if the file is missing or empty.
  • Phrase length guard (behavior): Phrases longer than 160 characters are trimmed during load to avoid chat overflow.

Compatibility

  • BepInEx 5 (5.4.x).
  • Works in mixed lobbies; only the chat line requires the revivee to be running the mod.
  • No extra keybinds or admin controls are introduced.

Troubleshooting

  • H does nothing: Make sure you are holding a PlayerDeathHead and have at least HealthTransferAmount + 1 HP.
  • No deny beep: Ensure overall game audio isn’t muted and Sound/DeniedSoundVolume > 0.
  • Client didn’t lose HP when reviving host: Update to v1.0.2 or later on all modded players to ensure the reviver’s HP cost is synced (SyncReviverHealth).
  • No chat line appears: The revive succeeded, but either EnableGratitude is off or the revivee isn’t running the mod (chat is emitted locally on the revivee).
  • Phrases not changing: Edit gratitude_phrases.txt and press Ctrl+P to reload.

Changelog

See CHANGELOG.md for full history.


Credits

  • Author: callmehill

CHANGELOG

Changelog

All notable changes to Medic! will be documented in this file.

[1.1.3] - 2025-09-07

Added

  • Failed revive chat messages: Attempting to revive without the required HP now posts a clear, configurable chat line so everyone understands why the revive didn’t fire.
  • Personalized messages: The failed-revive notice includes the downed player’s name for quick identification in busy lobbies.
  • Smart cooldown system: Chat and denial sounds now share per-player cooldowns to prevent spam (default 12s, configurable).
  • Performance optimization: Smoothed the revive-key handler to avoid frame drops when rapidly pressing H on low HP.

Fixed

  • FPS drops on low-HP revives: Rapid H-presses no longer tank framerate when you’re below the health cost.
  • Audio spam: Denial sounds respect the new shared cooldown, eliminating bursty playback.
  • Failed revive chat spam: Multiple chat lines are now suppressed during a single cooldown window.

Changed

  • Single AudioSource: Centralized denial audio through one AudioSource to reduce overhead and allocation churn.
  • Cached lookups: Avatar references and current health values are cached for faster access.
  • Cleanup: Removed periodic heartbeat invocation and related console noise.
  • Configurable cooldowns and messages: New options to tune durations and customize text:
    • Chat/FailedReviveMessage — template for the failure notification (includes revivee name).
    • Chat/FailedReviveCooldownSeconds — per-player chat cooldown (default 12).
    • Sound/DeniedCooldownSeconds — per-player denial-sound cooldown (default 12).

[1.1.2] - 2025-09-03

Fixed

  • Deny sound origin: Now emits from the reviver’s position instead of a global/menu location, preventing distant/quiet audio near the cart or extraction point.

Improved

  • Revive chat timing: Added a one-frame delay before posting the revive chat on the revivee’s client to improve reliability in mixed/laggy lobbies.

[1.1.1] - 2025-09-02

Added

  • Audible warning on revive denial: Plays when the reviver lacks sufficient health (config: Sound/DeniedSoundVolume).

Removed

  • Non-startup logging: Only the activation message remains during initialization.

[1.1.0] - 2025-09-01

Added

  • Randomized gratitude chat: Revived players now post a random phrase chosen from gratitude_phrases.txt.
  • Chat toggle: Chat/EnableGratitude boolean to enable/disable the gratitude chat line.
  • Hot reload: Press Ctrl+P to reload phrases at runtime.
  • Config options:
    • Chat/PhrasesFile — file name to load phrases from (plugin folder → BepInEx/config).
    • Chat/FallbackPhrases — pipe-separated fallback list used if the file is missing/empty.
  • Content: Includes 8 default phrases out of the box in gratitude_phrases.txt.

Improved

  • Phrase length guard: Phrases longer than 160 characters are trimmed during load to avoid chat overflow.

Compatibility

  • No breaking changes. Mixed lobby behavior unchanged.

[1.0.2] - 2025-08-31

Fixed

  • Reviver HP sync: When a client revives the host, the client now correctly loses the configured HP (e.g., 20), while the host respawns at the configured amount. Added SyncReviverHealth RPC mirroring SyncRevivedHealth so the reviver’s owner applies the HP cost locally.

Compatibility

  • No config or save changes. Mixed-mod lobbies still supported.

[1.0.1] - 2025-08-31

Removed

  • Development heartbeat logger that printed every 5 seconds.
    No gameplay or network behavior changes; purely removes debug noise from logs.

Compatibility

  • No breaking changes. Config and save data unaffected.

[1.0.0] - 2025-08-31

Added

  • Pick-up revive: Hold a teammate’s PlayerDeathHead and press H to revive (cost: 20 HP by default).
  • Revivee gratitude message: The revived player automatically shows gratitude via in-game chat.
  • Mixed lobby support: Unmodded players can be revived; chat/gratitude requires the revivee to run the mod.
  • Config: HealthTransferAmount (default 20).