1
0
Fork 0

Compare commits

..

No commits in common. "3607ccc92f0baa27d27c2c71aa16500cfdcf8f88" and "ceaac4e01b870f2897c6abd9e165cc36c6135994" have entirely different histories.

57 changed files with 194 additions and 379 deletions

BIN
Assets/AttentionPls1Intro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/AttentionPls2Intro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/AttentionPlsLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/BbIXODaHETIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/BbIXODaHETLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/BeefLiver1Intro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/BeefLiver3Intro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/BeefLiver4Intro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/BeefLiver4Loop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/BeefLiverIntro.ogg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Assets/BeefLiverLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/Beha1Intro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/Beha2Intro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/Beha3Intro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/BehaLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/ChereshnyaIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/ChereshnyaLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/DurochkaIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/DurochkaLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/GodModeIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/GodModeLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/GorgorodIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/GorgorodLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/KachIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/KachLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/MoyaZhittyaIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/MoyaZhittyaLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/MuzikaGromcheIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/MuzikaGromcheLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/OnePartiyaUdarIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/OnePartiyaUdarLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/PWNEDIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/PWNEDLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/PeretasovkaIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/PeretasovkaLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/ReelGoonIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/ReelGoonLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/RiseAndShineIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/RiseAndShineLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/Song2Intro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/Song2Loop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/VseVZaleIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/VseVZaleLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/WhistleIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/WhistleLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/YalgaarIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/YalgaarLoop.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/ZmeiGorynichIntro.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Assets/ZmeiGorynichLoop.ogg (Stored with Git LFS)

Binary file not shown.

View File

@ -1,16 +1,5 @@
# Changelog
## MuzikaGromche 1337.9001.0 - v73 Music quieter Edition
- Updated netcode-patch to support Lethal Company v73.
- Remastered all the audio tracks to target a consistent loudness level which allows you hear your teammates.
- Remastered track Song2 to fix cut points.
- Shortened intro of track Peretasovka to match vanilla timings.
- Added multiple intro variants for BeefLiver.
- Added a new track BbIXODaHET.
- Added a new track Whistle. Now it can fully replace WhistleJester!
- Added a new track ReelGoon.
## MuzikaGromche 1337.420.9004 - Life Support Edition
- Override Death Screen / Game Over text in certain cases.

View File

@ -1,5 +1,5 @@
<Project>
<Target Name="NetcodePatch" AfterTargets="PostBuildEvent">
<Exec Command="dotnet netcode-patch -uv 2022.3.62 -nv 1.12.0 &quot;$(TargetPath)&quot; @(ReferencePathWithRefAssemblies->'&quot;%(Identity)&quot;', ' ')"/>
<Exec Command="dotnet netcode-patch -nv 1.5.2 &quot;$(TargetPath)&quot; @(ReferencePathWithRefAssemblies->'&quot;%(Identity)&quot;', ' ')"/>
</Target>
</Project>

View File

@ -26,9 +26,3 @@ bump version_number:
jq --indent 4 --arg v "{{ version_number }}" '.version_number = $v' < manifest.json > manifest.json.copy
mv manifest.json.copy manifest.json
sed -i 's/<Version>.*<\/Version>/<Version>{{ version_number }}<\/Version>/' MuzikaGromche/MuzikaGromche.csproj
ogg track_name:
dotnet msbuild /t:wav2ogg /p:TrackName="{{ track_name }}"
ogg1 track_name:
dotnet msbuild /t:wav2ogg1 /p:TrackName="{{ track_name }}"

View File

@ -8,7 +8,7 @@
<AssemblyName>Ratijas.MuzikaGromche</AssemblyName>
<Product>Muzika Gromche</Product>
<Description>Add some content to your inverse teleporter experience on Titan!</Description>
<Version>1337.9001.0</Version>
<Version>1337.420.9004</Version>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
@ -53,13 +53,13 @@
<HintPath>$(LethalCompanyDir)Lethal Company_Data\Managed\Unity.Netcode.Runtime.dll</HintPath>
</Reference>
<Reference Include="Unity.TextMeshPro" Publicize="true" Private="False">
<HintPath>$(LethalCompanyDir)Lethal Company_Data\Managed\Unity.TextMeshPro.dll</HintPath>
<HintPath>$(LethalCompanyDir)Lethal Company_Data\Managed\Unity.TextMeshPro.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI" Publicize="true" Private="False">
<HintPath>$(LethalCompanyDir)Lethal Company_Data\Managed\UnityEngine.UI.dll</HintPath>
<HintPath>$(LethalCompanyDir)Lethal Company_Data\Managed\UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="Unity.RenderPipelines.Core.Runtime" Publicize="true" Private="False">
<HintPath>$(LethalCompanyDir)Lethal Company_Data\Managed\Unity.RenderPipelines.Core.Runtime.dll</HintPath>
<HintPath>$(LethalCompanyDir)Lethal Company_Data\Managed\Unity.RenderPipelines.Core.Runtime.dll</HintPath>
</Reference>
</ItemGroup>
@ -118,11 +118,4 @@
</ItemGroup>
<Exec Command="ffmpeg -bitexact -y -i $(WavExportDir)%(TrackNames.Identity).wav $(SolutionDir)Assets\%(TrackNames.Identity).ogg" />
</Target>
<Target Name="wav2ogg1">
<ItemGroup>
<TrackNames Include="$(TrackName)" />
</ItemGroup>
<Exec Command="ffmpeg -bitexact -y -i $(WavExportDir)%(TrackNames.Identity).wav $(SolutionDir)Assets\%(TrackNames.Identity).ogg" />
</Target>
</Project>

View File

@ -330,7 +330,7 @@ namespace MuzikaGromche
Name = "Peretasovka",
AudioType = AudioType.OGGVORBIS,
Language = Language.ENGLISH,
WindUpTimer = 39.68f,
WindUpTimer = 59.07f,
Bars = 8,
BeatsOffset = 0.3f,
ColorTransitionIn = 0.4f,
@ -366,7 +366,7 @@ namespace MuzikaGromche
Name = "Chereshnya",
AudioType = AudioType.OGGVORBIS,
Language = Language.RUSSIAN,
WindUpTimer = 45.48f,
WindUpTimer = 45.58f,
Bars = 16,
BeatsOffset = 0.0f,
ColorTransitionIn = 0.3f,
@ -460,7 +460,7 @@ namespace MuzikaGromche
Name = "Kach",
AudioType = AudioType.OGGVORBIS,
Language = Language.ENGLISH,
WindUpTimer = 47.30f,
WindUpTimer = 48.30f,
Bars = 12,
// let them overlap, such that there is an actual hard cut to the next color
BeatsOffset = 0.4f,
@ -480,75 +480,26 @@ namespace MuzikaGromche
Lyrics = [],
GameOverText = "[DIDN'T PUMP IT: LOUDER]",
},
new SelectableTracksGroup
new SelectableAudioTrack
{
Name = "BeefLiver",
AudioType = AudioType.OGGVORBIS,
Language = Language.ENGLISH,
Tracks =
[
new CoreAudioTrack
{
Name = "BeefLiver1",
FileNameLoop = "BeefLiverLoop.ogg",
AudioType = AudioType.OGGVORBIS,
WindUpTimer = 39.35f,
Bars = 12,
BeatsOffset = 0.2f,
ColorTransitionIn = 0.4f,
ColorTransitionOut = 0.4f,
ColorTransitionEasing = Easing.OutExpo,
Palette = Palette.Parse([
"#FFEBEB", "#FFEBEB", "#445782", "#EBA602",
"#5EEBB9", "#8EE3DC", "#A23045", "#262222",
]),
LoopOffset = 0,
FadeOutBeat = -3,
FadeOutDuration = 3,
FlickerLightsTimeSeries = [-48, -40, -4.5f, 44],
Lyrics = [],
},
new CoreAudioTrack
{
Name = "BeefLiver3",
FileNameLoop = "BeefLiverLoop.ogg",
AudioType = AudioType.OGGVORBIS,
WindUpTimer = 39.35f,
Bars = 12,
BeatsOffset = 0.2f,
ColorTransitionIn = 0.4f,
ColorTransitionOut = 0.4f,
ColorTransitionEasing = Easing.OutExpo,
Palette = Palette.Parse([
"#FFEBEB", "#FFEBEB", "#445782", "#EBA602",
"#5EEBB9", "#8EE3DC", "#A23045", "#262222",
]),
LoopOffset = 0,
FadeOutBeat = -3,
FadeOutDuration = 3,
FlickerLightsTimeSeries = [-48, -40, -4.5f, 44],
Lyrics = [],
},
new CoreAudioTrack
{
Name = "BeefLiver4",
AudioType = AudioType.OGGVORBIS,
WindUpTimer = 31.68f,
Bars = 12,
BeatsOffset = 0.2f,
ColorTransitionIn = 0.4f,
ColorTransitionOut = 0.4f,
ColorTransitionEasing = Easing.OutExpo,
Palette = Palette.Parse([
"#FFEBEB", "#FFEBEB", "#445782", "#EBA602",
"#5EEBB9", "#8EE3DC", "#A23045", "#262222",
]),
LoopOffset = 0,
FadeOutBeat = -3,
FadeOutDuration = 3,
FlickerLightsTimeSeries = [-32, -24, -4.5f, 44],
Lyrics = [],
},
],
WindUpTimer = 39.35f,
Bars = 12,
BeatsOffset = 0.2f,
ColorTransitionIn = 0.4f,
ColorTransitionOut = 0.4f,
ColorTransitionEasing = Easing.OutExpo,
Palette = Palette.Parse([
"#FFEBEB", "#FFEBEB", "#445782", "#EBA602",
"#5EEBB9", "#8EE3DC", "#A23045", "#262222",
]),
LoopOffset = 0,
FadeOutBeat = -3,
FadeOutDuration = 3,
FlickerLightsTimeSeries = [-48, -40, -4.5f, 44],
Lyrics = [],
},
new SelectableTracksGroup
{
@ -646,11 +597,12 @@ namespace MuzikaGromche
IsExplicit = true,
Tracks =
[
new CoreAudioTrack
new SelectableAudioTrack
{
Name = "AttentionPls1",
FileNameLoop = "AttentionPlsLoop.ogg",
AudioType = AudioType.OGGVORBIS,
Language = Language.RUSSIAN,
WindUpTimer = 39.19f,
Bars = 8,
BeatsOffset = 0.3f,
@ -666,11 +618,12 @@ namespace MuzikaGromche
DrunknessLoopOffsetTimeSeries = new([7f, 12f, 15f], [0f, 0.90f, 0f]),
CondensationLoopOffsetTimeSeries = new([23f, 28f, 31f], [0f, 0.4f, 0f]),
},
new CoreAudioTrack
new SelectableAudioTrack
{
Name = "AttentionPls2",
FileNameLoop = "AttentionPlsLoop.ogg",
AudioType = AudioType.OGGVORBIS,
Language = Language.RUSSIAN,
WindUpTimer = 39.19f,
Bars = 8,
BeatsOffset = 0.3f,
@ -688,101 +641,6 @@ namespace MuzikaGromche
},
],
},
new SelectableAudioTrack
{
Name = "BbIXODaHET",
AudioType = AudioType.OGGVORBIS,
Language = Language.RUSSIAN,
WindUpTimer = 40.85f,
Bars = 8,
BeatsOffset = 0.3f,
ColorTransitionIn = 0.7f,
ColorTransitionOut = 0.3f,
ColorTransitionEasing = Easing.InOutCubic,
Palette = Palette.Parse([
"#E6D58F", "#612F7E", "#D9783F", "#C3411C", "#D3B742", "#549BDE",
]),
LoopOffset = 0,
FadeOutBeat = -6,
FadeOutDuration = 6,
FlickerLightsTimeSeries = [-32.5f, -16.5f, 30.5f],
Lyrics = [],
DrunknessLoopOffsetTimeSeries = new(
[-1, 2, 7, 31],
[0, 0.4f, 0, 0]),
},
new SelectableAudioTrack
{
Name = "Whistle",
AudioType = AudioType.OGGVORBIS,
Language = Language.ENGLISH,
WindUpTimer = 41.27f,
Bars = 12,
BeatsOffset = 0.0f,
ColorTransitionIn = 0.5f,
ColorTransitionOut = 0.2f,
ColorTransitionEasing = Easing.OutExpo,
Palette = Palette.Parse([
"#8DDEDD", "#98DE28", "#E8DB4B", "#F060A8", "#EEC263", "#725DEB",
]),
LoopOffset = 16,
FadeOutBeat = -22,
FadeOutDuration = 6,
FlickerLightsTimeSeries = [-20, 12],
Lyrics = [
(-40, "Can you blow my whistle, baby, whistle, baby?"),
(-36, "Can you blow my whistle, baby, whistle, baby? Let me know"),
(-33.5f, "Girl, I'm gonna show you how to\ndo it"),
(-30.5f, "Girl, I'm gonna show you how to\ndo it and we start real slow"),
(-27, "You just put your lips together"),
(-24, "You just put your lips together and you come real close"),
(-21, "Can you blow my whistle, baby, whistle, baby?"),
(-17, "HERE WE GO"),
(10, "Yeah, baby, make that whistle"),
(12, "Yeah, baby, make that whistle\nblow oh oh oh"),
(15, "Can you blow my whistle, baby, whistle, baby?"),
(20, "Can you blow my whistle, baby, whistle, baby? Let me know"),
(23, "Girl, I'm gonna show you how to\ndo it"),
(28, "Girl, I'm gonna show you how to\ndo it and we start real slow"),
(32, "You just put your lips together"),
(36, "You just put your lips together and you come real close"),
(39, "Can you blow my whistle, baby, whistle, baby?"),
(46, "HERE"),
(47, "Here WE"),
(48, "Here we GO"),
],
DrunknessLoopOffsetTimeSeries = new(
[-16f, -15.25f, -12f, 9f, 15f, 16f, 18f, 21f],
[0f, 0.7f, 0f, 0f, 0.4f, 0.7f, 0.4f, 0f]),
},
new SelectableAudioTrack
{
Name = "ReelGoon",
AudioType = AudioType.OGGVORBIS,
Language = Language.ENGLISH,
WindUpTimer = 45.15f,
Bars = 16,
BeatsOffset = -0.35f,
ColorTransitionIn = 0.1f,
ColorTransitionOut = 0.35f,
ColorTransitionEasing = Easing.OutExpo,
Palette = Palette.Parse([
"#DE1C31", "#F7E26B", "#3D3D3D", "#FBB040",
"#ED4E4A", "#F0BD37", "#E41E2E", "#2E2D2B",
]),
LoopOffset = 0,
FadeOutBeat = -2,
FadeOutDuration = 2,
FlickerLightsTimeSeries = [-41, 61],
Lyrics = [],
DrunknessLoopOffsetTimeSeries = new(
[-0.5f, -0.05f, 6f, 60f, 61f],
[0f, 0.5f, 0f, 0f, 0.5f]),
},
];
public static ISelectableTrack ChooseTrack()
@ -1071,7 +929,7 @@ namespace MuzikaGromche
// Number of beats between WindUpTimer and where looped segment starts (not the loop audio).
public int LoopOffset { get; }
public float LoopOffsetInSeconds => (float)LoopOffset / (float)Beats * LoadedLoop.length;
public float LoopOffsetInSeconds => LoopOffset / Beats * LoadedLoop.length;
// MPEG is basically mp3, and it can produce gaps at the start.
// WAV is OK, but takes a lot of space. Try OGGVORBIS instead.
@ -2177,10 +2035,7 @@ namespace MuzikaGromche
public static bool ExtrapolateTime { get; private set; } = true;
public static bool ShouldSkipWindingPhase { get; private set; } = false;
// Audio files are normalized to target -14 LUFS, which is too loud to communicate. Reduce by another -12 dB down to about -26 LUFS.
public static float DefaultVolume = 0.25f;
#if DEBUG
public static ConfigEntry<float> Volume { get; private set; } = null!;
// Latest set track, used for loading palette and timings.
private static IAudioTrack? CurrentTrack = null;
// All per-track values that can be overridden
@ -2238,18 +2093,17 @@ namespace MuzikaGromche
SkipExplicitTracks = configFile.Bind("General", "Skip Explicit Tracks", false,
new ConfigDescription("When choosing tracks at random, skip the ones with Explicit Content/Lyrics."));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(SkipExplicitTracks, requiresRestart: false));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(SkipExplicitTracks, Default(new BoolCheckBoxOptions())));
OverrideSpawnRates = configFile.Bind("General", "Override Spawn Rates", true,
new ConfigDescription("Deviate from vanilla spawn rates to experience content of this mod more often."));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(OverrideSpawnRates, requiresRestart: false));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(OverrideSpawnRates, Default(new BoolCheckBoxOptions())));
#if DEBUG
SetupEntriesForGameOverText(configFile);
SetupEntriesForScreenFilters(configFile);
SetupEntriesForExtrapolation(configFile);
SetupEntriesToSkipWinding(configFile);
SetupEntriesForVolume(configFile);
SetupEntriesForPaletteOverride(configFile);
SetupEntriesForTimingsOverride(configFile);
#endif
@ -2271,14 +2125,18 @@ namespace MuzikaGromche
string buttonText = "Toggle";
var button = new GenericButtonConfigItem(section, buttonOptionName, buttonDescription, buttonText, () =>
{
var tracks = Plugin.Tracks.Where(t => t.Language.Equals(language)).ToList();
var isOff = tracks.All(t => t.Weight.Value == 0);
var newWeight = isOff ? 50 : 0;
foreach (var t in tracks)
if (CanModifyWeightsNow())
{
t.Weight.Value = newWeight;
var tracks = Plugin.Tracks.Where(t => t.Language.Equals(language)).ToList();
var isOff = tracks.All(t => t.Weight.Value == 0);
var newWeight = isOff ? 50 : 0;
foreach (var t in tracks)
{
t.Weight.Value = newWeight;
}
}
});
button.ButtonOptions.CanModifyCallback = CanModifyWeightsNow;
LethalConfigManager.AddConfigItem(button);
}
@ -2290,7 +2148,7 @@ namespace MuzikaGromche
50,
new ConfigDescription(description, chanceRange, track));
LethalConfigManager.AddConfigItem(new IntSliderConfigItem(track.Weight, requiresRestart: false));
LethalConfigManager.AddConfigItem(new IntSliderConfigItem(track.Weight, Default(new IntSliderOptions())));
}
}
@ -2304,12 +2162,46 @@ namespace MuzikaGromche
#endif
}
public static CanModifyResult CanModifyIfHost()
{
var startOfRound = StartOfRound.Instance;
if (!startOfRound)
{
return CanModifyResult.True(); // Main menu
}
if (!startOfRound.IsHost)
{
return CanModifyResult.False("Only for host");
}
return CanModifyResult.True();
}
public static CanModifyResult CanModifyWeightsNow()
{
var startOfRound = StartOfRound.Instance;
if (!startOfRound)
{
return CanModifyResult.True(); // Main menu
}
if (!startOfRound.IsHost)
{
return CanModifyResult.False("Only for host");
}
#if !DEBUG // Changing tracks on the fly might lead to a desync. But it may speed up development process
if (!startOfRound.inShipPhase)
{
return CanModifyResult.False("Only while orbiting");
}
#endif
return CanModifyResult.True();
}
#if DEBUG
private void SetupEntriesForExtrapolation(ConfigFile configFile)
{
var entry = configFile.Bind("General", "Extrapolate Audio Playback Time", true,
new ConfigDescription("AudioSource only updates its playback position about 20 times per second.\n\nUse extrapolation technique to predict playback time between updates for smoother color animations."));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(entry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(entry, Default(new BoolCheckBoxOptions())));
entry.SettingChanged += (sender, args) => apply();
apply();
@ -2323,7 +2215,7 @@ namespace MuzikaGromche
{
var entry = configFile.Bind("General", "Skip Winding Phase", false,
new ConfigDescription("Skip most of the wind-up/intro music.\n\nUse this option to test your Loop audio segment."));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(entry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(entry, Default(new BoolCheckBoxOptions())));
entry.SettingChanged += (sender, args) => apply();
apply();
@ -2333,13 +2225,6 @@ namespace MuzikaGromche
}
}
private void SetupEntriesForVolume(ConfigFile configFile)
{
Volume = configFile.Bind("General", "Volume", DefaultVolume,
new ConfigDescription("Volume of the music played by this mod.", new AcceptableValueRange<float>(0f, 1f)));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(Volume, requiresRestart: false));
}
private void SetupEntriesForPaletteOverride(ConfigFile configFile)
{
const string section = "Palette";
@ -2350,12 +2235,13 @@ namespace MuzikaGromche
var loadButton = new GenericButtonConfigItem(section, "Load Palette from the Current Track",
"Override custom palette with the built-in palette of the current track.", "Load", load);
loadButton.ButtonOptions.CanModifyCallback = CanModifyIfHost;
LethalConfigManager.AddConfigItem(loadButton);
customPaletteSizeEntry = configFile.Bind(section, "Palette Size", 0, new ConfigDescription(
"Number of colors in the custom palette.\n\nIf set to non-zero, custom palette overrides track's own built-in palette.",
new AcceptableValueRange<int>(0, maxCustomPaletteSize)));
LethalConfigManager.AddConfigItem(new IntSliderConfigItem(customPaletteSizeEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new IntSliderConfigItem(customPaletteSizeEntry, Default(new IntSliderOptions())));
customPaletteSizeEntry.SettingChanged += (sender, args) => apply();
for (int i = 0; i < maxCustomPaletteSize; i++)
@ -2363,7 +2249,7 @@ namespace MuzikaGromche
string entryName = $"Custom Color {i + 1}";
var customColorEntry = configFile.Bind(section, entryName, "#FFFFFF", "Choose color for the custom palette");
customPaletteEntries[i] = customColorEntry;
LethalConfigManager.AddConfigItem(new HexColorInputFieldConfigItem(customColorEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new HexColorInputFieldConfigItem(customColorEntry, Default(new HexColorInputFieldOptions())));
customColorEntry.SettingChanged += (sender, args) => apply();
}
@ -2419,11 +2305,12 @@ namespace MuzikaGromche
var loadButton = new GenericButtonConfigItem(section, "Load Timings from the Current Track",
"Override custom timings with the built-in timings of the current track.", "Load", load);
loadButton.ButtonOptions.CanModifyCallback = CanModifyIfHost;
LethalConfigManager.AddConfigItem(loadButton);
overrideTimingsEntry = configFile.Bind(section, "Override Timings", false,
new ConfigDescription("If checked, custom timings override track's own built-in timings."));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(overrideTimingsEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(overrideTimingsEntry, Default(new BoolCheckBoxOptions())));
overrideTimingsEntry.SettingChanged += (sender, args) => apply();
fadeOutBeatEntry = configFile.Bind(section, "Fade Out Beat", 0f,
@ -2447,16 +2334,17 @@ namespace MuzikaGromche
colorTransitionEasingEntry = configFile.Bind(section, "Color Transition Easing", Easing.Linear.Name,
new ConfigDescription("Interpolation/easing method to use for color transitions", new AcceptableValueList<string>(Easing.AllNames)));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(fadeOutBeatEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(fadeOutDurationEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(flickerLightsTimeSeriesEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(lyricsTimeSeriesEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(drunknessTimeSeriesEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(condensationTimeSeriesEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(beatsOffsetEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(colorTransitionInEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(colorTransitionOutEntry, requiresRestart: false));
LethalConfigManager.AddConfigItem(new TextDropDownConfigItem(colorTransitionEasingEntry, requiresRestart: false));
var floatSliderOptions = Default(new FloatSliderOptions());
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(fadeOutBeatEntry, floatSliderOptions));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(fadeOutDurationEntry, floatSliderOptions));
LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(flickerLightsTimeSeriesEntry, Default(new TextInputFieldOptions())));
LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(lyricsTimeSeriesEntry, Default(new TextInputFieldOptions())));
LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(drunknessTimeSeriesEntry, Default(new TextInputFieldOptions())));
LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(condensationTimeSeriesEntry, Default(new TextInputFieldOptions())));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(beatsOffsetEntry, floatSliderOptions));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(colorTransitionInEntry, floatSliderOptions));
LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(colorTransitionOutEntry, floatSliderOptions));
LethalConfigManager.AddConfigItem(new TextDropDownConfigItem(colorTransitionEasingEntry, Default(new TextDropDownOptions())));
registerStruct(fadeOutBeatEntry, t => t.FadeOutBeat, x => FadeOutBeatOverride = x);
registerStruct(fadeOutDurationEntry, t => t.FadeOutDuration, x => FadeOutDurationOverride = x);
@ -2652,6 +2540,13 @@ namespace MuzikaGromche
};
}
#endif
private T Default<T>(T options) where T : BaseOptions
{
options.RequiresRestart = false;
options.CanModifyCallback = CanModifyIfHost;
return options;
}
}
[HarmonyPatch(typeof(GameNetworkManager))]
@ -2714,26 +2609,16 @@ namespace MuzikaGromche
IntroAudioSource.maxDistance = Plugin.AudioMaxDistance;
IntroAudioSource.dopplerLevel = 0;
IntroAudioSource.loop = false;
IntroAudioSource.volume = Config.DefaultVolume;
LoopAudioSource = loopAudioGameObject.GetComponent<AudioSource>();
LoopAudioSource.maxDistance = Plugin.AudioMaxDistance;
LoopAudioSource.dopplerLevel = 0;
LoopAudioSource.loop = true;
LoopAudioSource.volume = Config.DefaultVolume;
Debug.Log($"{nameof(MuzikaGromche)} {nameof(MuzikaGromcheJesterNetworkBehaviour)} Patched JesterEnemy");
}
}
#if DEBUG
void Update()
{
IntroAudioSource.volume = Config.Volume.Value;
LoopAudioSource.volume = Config.Volume.Value;
}
#endif
public override void OnNetworkSpawn()
{
ChooseTrackDeferred();

View File

@ -1,53 +1,34 @@
# Muzika Gromche — The ultimate Jester party music mod
# Muzika Gromche!
_Add some content to your Inverse teleporter experience on Titan!<sup>1</sup>_
Muzika Gromche literally means "crank music louder".
This mod replaces Jester's winding up and chasing sounds with a whole library of timed to the beat and seamlessly looped popular energetic songs, combined with various visual effects.
If a picture is worth a thousand words, a demo video is priceless. Check out what Muzika Gromche does:
[![Thumbnail for MuzikaGromche demo](https://ratijas.me/share/public/LC/MuzikaGromche/video/demo/thumb-360.jpg)](https://ratijas.me/share/public/LC/MuzikaGromche/video/demo/MuzikaGromche-demo.mp4)
An example of trapping One Punch Man themed Jester at mineshaft:
[![Thumbnail for MuzikaGromche - How not to trap Jester at mineshaft](https://ratijas.me/share/public/LC/MuzikaGromche/video/mineshaft-trap/thumb-360.jpg)](https://ratijas.me/share/public/LC/MuzikaGromche/video/mineshaft-trap/How%20not%20to%20trap%20Jester%20at%20Mineshaft.mp4)
This mod's name literally means "cranck music louder".
To keep it a surprise, it is adviced that you do not read the detailed description below.
## Compatibility
Muzika Gromche is compatible with *Almost Vanilla™* gameplay and [*High Quota Mindset*](https://youtu.be/18RUCgQldGg?t=2553). It slightly changes Jester's wind-up timers to pop up on the drop, so won't be compatible with leaderboards. If you are a streamer™, be aware that it does play *copyrighted content.*
Muzika Gromche is compatible with *Almost Vanilla™* gameplay and [*High Quota Mindset*](https://youtu.be/18RUCgQldGg?t=2553). It slightly changes certain timers, so won't be compatible with leaderboards. If you are a streamer™, be aware that it does play *copyrighted content.*
Muzika Gromche v1337.9001.0 has been updated to work with Lethal Company v73. Previous versions of Muzika Gromche work with all Lethal Company versions from all the way back to v40 and up to v72.
Muzika Gromche works with all Lethal Company versions from v72 all the way back to v40, and is likely to work on all future versions as long as dependencies are working. [`LobbyCompatibility`] is recommended but optional.
- [`LobbyCompatibility`] is recommended but optional.
- [`V70PoweredLights_Fix`] is not strictly required, but it doesn't hurt to have it installed on any version, and it makes this mod more enjoyable on the new Mansion tiles introduced in v70.
## Playlist
Music track names are codenamed, and by default have equal chance of being selected. In the Lethal Config menu tracks are grouped by language, where the whole group can be quickly toggled ON or OFF at once. For example, you might want to toggle Russian or Hindi tracks OFF if you don't speak those languages.
English playlist features artists such as Imagine Dragons, Fall Out Boy, Bon Jovi, Black Eyed Peas, LMFAO (Party Rock Anthem / Every day I'm shufflin'), CYBEЯIA / "Cyberia" (Russian Hackers), and of course Whistle by Joel Merry / Flo Rida.
Russian playlist includes Би-2, Витас, ГлюкoZa (Глюкоза) & Ленинград, Дискотека Авария, Noize MC, Oxxxymiron, Сплин, Пошлая Молли.
There are also a K-pop track by aespa, an anime opening from One Punch Man, and an Indian banger by CarryMinati & Wily Frenzy.
Speaking of dependencies, [`V70PoweredLights_Fix`] is not strictly required, but it doesn't hurt to have it installed on any version, and it makes this mod more enjoyable on new Mansion tiles.
## Configuration
Configuration integrates with [`LethalConfig`] mod.
If you are just trying out this mod for the first time, or want to experience it more often, consider leaving the "Override Spawn Rates" config entry ON. Otherwise it might take a frustratingly long time to find out what you need to find out.
If you are just trying out this mod for the first time, or want to experience it more often, consider toggling ON the "Override Spawn Rates" config entry. Otherwise it might take a frustratingly long time to find out what you need to find out.
Track selection options are only configurable by the host player.
Track selection options are only configurable by host player and only while orbiting.
Any player can change their personal preferences locally.
- Audio Offset: If you are playing with a Bluetooth headset, adjust Audio Offset to -0.2 seconds.
- Display Lyrics toggle: Shows lyrics in a popup whenever player hears music.
- If you are playing with a Bluetooth headset, adjust Audio Offset to -0.2 seconds.
- Display Lyrics toggle: show lyrics in a popup whenever player hears music.
## Authors & Special Thanks
- Oflor: Original author; wrote the code and sliced the first tracks.
- [Ratijas](https://t.me/ratijas): Rewrote the code to sync the lights to the beat, added configuration options and many features, fixed gaps in existing tracks, and sliced many new ones.
- Oflor: Original author, wrote the code and sliced the first tracks.
- [Ratijas](https://t.me/ratijas): Rewrote the code to sync the lights to the beat, added configuration options and many features, fixed gaps in existing tracks and sliced many new ones.
- [Just Nothing](https://t.me/REALJUSTNOTHING): Visual artist; contributed palettes, timings and animation curves.
- [WaterGun](https://www.youtube.com/channel/UCCxCFfmrnqkFZ8i9FsXBJVA): Created [`V70PoweredLights_Fix`] mod, patched certain tiles with amazing lightshow.

View File

@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"evaisa.netcodepatcher.cli": {
"version": "4.4.2",
"version": "4.3.0",
"commands": [
"netcode-patch"
]

View File

@ -1,6 +1,6 @@
{
"name": "MuzikaGromche",
"version_number": "1337.9001.0",
"version_number": "1337.420.9004",
"author": "Ratijas",
"description": "Add some content to your inverse teleporter experience on Titan!",
"website_url": "https://git.vilunov.me/ratijas/muzika-gromche",