000_000_0000-GTFOCustomMusic icon

GTFOCustomMusic

A sound engine for GTFO that plays your own music, driven by what the team is doing. Combat music and a boot sound so far, synced in multiplayer. Ships no music.

Last updated 5 hours ago
Total downloads 5
Total rating 0 
Categories
Dependency string 000_000_0000-GTFOCustomMusic-1.0.0
Dependants 0 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack_GTFO-3.2.3 icon
BepInEx-BepInExPack_GTFO

BepInEx pack for GTFO. Preconfigured and includes Unity Base DLLs.

Preferred version: 3.2.3

README

GTFOCustomMusic

A sound engine for GTFO that plays your own music in place of the game's, driven by what your team is actually doing.

Status: combat music and a boot sound are done. More (elevator drop, menus, expedition end, stingers) is planned. The package ships no music: you bring the tracks.

What it does

  • Combat music. It plays the right mood for what the team is doing:
    • Suspense: a muffled or layered version of the track while you sneak, or when an alarm starts.
    • Combat: it opens up into the full loop on contact, or when a room wakes.
    • Cooldown: it fades out when the fight is over.
  • Pools. Combat, Alarm and Extraction pools, so alarms and the run to the exit get their own tracks.
  • Sample-accurate playback. Loops, lead-ins and stingers are scheduled on the audio clock: no seams, no gaps.
  • Synced multiplayer. The host decides, and every player hears the same track at the same moment.
  • GTFO's own music is muted while yours plays. Your Master and Music sliders still apply.
  • Boot sound. An optional clip plays when you press Inject on the start screen.
  • Pause support. It pauses along with GTFOPause, or anything else that stops game time.

Setup

  1. Install with r2modman, and start the game once.
  2. Put your .ogg or .wav files in BepInEx/config/GTFOCustomMusic/.
  3. Edit playlist.json in that folder (the first start creates an empty one; comments are allowed):
{
  "BootSound": "boot.ogg",           // optional
  "Tracks": [
    { "Id": "my-song", "Pools": ["Combat"], "Loop": "my-song-loop.ogg", "Bpm": 120 },
    { "Id": "big-one", "Pools": ["Alarm", "Extraction"], "LeadIn": "big-one-leadin.ogg",
      "Loop": "big-one-loop.ogg", "Volume": 0.8, "Bpm": 140 }
  ]
}
  1. Press F10 in game to reload the playlist without restarting (only while no music is playing).

Track fields

Only Id and Loop are required.

Field What it is
Loop The part that loops through a fight. Cut it on whole bars.
LeadIn A build-up played when suspense starts. It ends exactly where Loop begins.
Stinger A short hit played when a scout screams, right before Loop.
SuspenseLayer A quieter version of Loop with exactly the same length, played while sneaking. Without one, a muffled copy of Loop is used.
Suspense A separate looping clip used for suspense instead of the layer.
Pools Combat, Alarm and/or Extraction. Empty pools fall back to the one before.
Volume, Bpm, BeatsPerBar Loudness, and the tempo used to land switches on a bar.
Meme Occasional filler track; how often is set by the MemeChance* settings.

Multiplayer

Everyone needs the mod and the same playlist and files. If they differ, it's logged on both sides.

The easiest way to share is an r2modman profile export as a file (Settings → Export profile as a file). That .r2z file carries everything in BepInEx/config, including your music and playlist. A profile code is limited to 20 MB, so it usually can't carry the music.

Settings

BepInEx/config/dev.ntainy.GTFOCustomMusic.cfg, or r2modman's config editor:

Setting Default What it does
MasterVolume 1 Balance of your music against the game's
FollowGameSliders true GTFO's Master and Music sliders scale your music too
GameMusic MuteWhilePlaying Mute GTFO's music while yours plays (Never to keep it)
BootSoundEvent PLAY_06_MAIN_MENU_LAUNCH The game sound the boot clip replaces
RotateAfter 600 Seconds before a long fight moves on to another track
ShowOverlay false Debug overlay (F9 toggles it)

Every detection and playback setting is described in the config file itself.