forked from nikita/muzika-gromche
Compare commits
14 Commits
ceaac4e01b
...
3607ccc92f
| Author | SHA1 | Date |
|---|---|---|
|
|
3607ccc92f | |
|
|
8570505758 | |
|
|
049a14e440 | |
|
|
1ec8275831 | |
|
|
9efe6adaf3 | |
|
|
a5b117e26d | |
|
|
01332ab77f | |
|
|
7aa3570b33 | |
|
|
e7866fda55 | |
|
|
cd9e0a7a10 | |
|
|
8223425b19 | |
|
|
9bf3a80341 | |
|
|
72a8016ab5 | |
|
|
9619a75427 |
BIN
Assets/AttentionPls1Intro.ogg (Stored with Git LFS)
BIN
Assets/AttentionPls1Intro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/AttentionPls2Intro.ogg (Stored with Git LFS)
BIN
Assets/AttentionPls2Intro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/AttentionPlsLoop.ogg (Stored with Git LFS)
BIN
Assets/AttentionPlsLoop.ogg (Stored with Git LFS)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Assets/BeefLiverIntro.ogg (Stored with Git LFS)
BIN
Assets/BeefLiverIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/BeefLiverLoop.ogg (Stored with Git LFS)
BIN
Assets/BeefLiverLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/Beha1Intro.ogg (Stored with Git LFS)
BIN
Assets/Beha1Intro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/Beha2Intro.ogg (Stored with Git LFS)
BIN
Assets/Beha2Intro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/Beha3Intro.ogg (Stored with Git LFS)
BIN
Assets/Beha3Intro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/BehaLoop.ogg (Stored with Git LFS)
BIN
Assets/BehaLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/ChereshnyaIntro.ogg (Stored with Git LFS)
BIN
Assets/ChereshnyaIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/ChereshnyaLoop.ogg (Stored with Git LFS)
BIN
Assets/ChereshnyaLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/DurochkaIntro.ogg (Stored with Git LFS)
BIN
Assets/DurochkaIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/DurochkaLoop.ogg (Stored with Git LFS)
BIN
Assets/DurochkaLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/GodModeIntro.ogg (Stored with Git LFS)
BIN
Assets/GodModeIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/GodModeLoop.ogg (Stored with Git LFS)
BIN
Assets/GodModeLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/GorgorodIntro.ogg (Stored with Git LFS)
BIN
Assets/GorgorodIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/GorgorodLoop.ogg (Stored with Git LFS)
BIN
Assets/GorgorodLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/KachIntro.ogg (Stored with Git LFS)
BIN
Assets/KachIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/KachLoop.ogg (Stored with Git LFS)
BIN
Assets/KachLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/MoyaZhittyaIntro.ogg (Stored with Git LFS)
BIN
Assets/MoyaZhittyaIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/MoyaZhittyaLoop.ogg (Stored with Git LFS)
BIN
Assets/MoyaZhittyaLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/MuzikaGromcheIntro.ogg (Stored with Git LFS)
BIN
Assets/MuzikaGromcheIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/MuzikaGromcheLoop.ogg (Stored with Git LFS)
BIN
Assets/MuzikaGromcheLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/OnePartiyaUdarIntro.ogg (Stored with Git LFS)
BIN
Assets/OnePartiyaUdarIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/OnePartiyaUdarLoop.ogg (Stored with Git LFS)
BIN
Assets/OnePartiyaUdarLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/PWNEDIntro.ogg (Stored with Git LFS)
BIN
Assets/PWNEDIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/PWNEDLoop.ogg (Stored with Git LFS)
BIN
Assets/PWNEDLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/PeretasovkaIntro.ogg (Stored with Git LFS)
BIN
Assets/PeretasovkaIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/PeretasovkaLoop.ogg (Stored with Git LFS)
BIN
Assets/PeretasovkaLoop.ogg (Stored with Git LFS)
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Assets/RiseAndShineIntro.ogg (Stored with Git LFS)
BIN
Assets/RiseAndShineIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/RiseAndShineLoop.ogg (Stored with Git LFS)
BIN
Assets/RiseAndShineLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/Song2Intro.ogg (Stored with Git LFS)
BIN
Assets/Song2Intro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/Song2Loop.ogg (Stored with Git LFS)
BIN
Assets/Song2Loop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/VseVZaleIntro.ogg (Stored with Git LFS)
BIN
Assets/VseVZaleIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/VseVZaleLoop.ogg (Stored with Git LFS)
BIN
Assets/VseVZaleLoop.ogg (Stored with Git LFS)
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Assets/YalgaarIntro.ogg (Stored with Git LFS)
BIN
Assets/YalgaarIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/YalgaarLoop.ogg (Stored with Git LFS)
BIN
Assets/YalgaarLoop.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/ZmeiGorynichIntro.ogg (Stored with Git LFS)
BIN
Assets/ZmeiGorynichIntro.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Assets/ZmeiGorynichLoop.ogg (Stored with Git LFS)
BIN
Assets/ZmeiGorynichLoop.ogg (Stored with Git LFS)
Binary file not shown.
11
CHANGELOG.md
11
CHANGELOG.md
|
|
@ -1,5 +1,16 @@
|
|||
# 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.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<Project>
|
||||
<Target Name="NetcodePatch" AfterTargets="PostBuildEvent">
|
||||
<Exec Command="dotnet netcode-patch -nv 1.5.2 "$(TargetPath)" @(ReferencePathWithRefAssemblies->'"%(Identity)"', ' ')"/>
|
||||
<Exec Command="dotnet netcode-patch -uv 2022.3.62 -nv 1.12.0 "$(TargetPath)" @(ReferencePathWithRefAssemblies->'"%(Identity)"', ' ')"/>
|
||||
</Target>
|
||||
</Project>
|
||||
|
|
|
|||
6
Justfile
6
Justfile
|
|
@ -26,3 +26,9 @@ 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 }}"
|
||||
|
|
|
|||
|
|
@ -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.420.9004</Version>
|
||||
<Version>1337.9001.0</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,4 +118,11 @@
|
|||
</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>
|
||||
|
|
|
|||
|
|
@ -330,7 +330,7 @@ namespace MuzikaGromche
|
|||
Name = "Peretasovka",
|
||||
AudioType = AudioType.OGGVORBIS,
|
||||
Language = Language.ENGLISH,
|
||||
WindUpTimer = 59.07f,
|
||||
WindUpTimer = 39.68f,
|
||||
Bars = 8,
|
||||
BeatsOffset = 0.3f,
|
||||
ColorTransitionIn = 0.4f,
|
||||
|
|
@ -366,7 +366,7 @@ namespace MuzikaGromche
|
|||
Name = "Chereshnya",
|
||||
AudioType = AudioType.OGGVORBIS,
|
||||
Language = Language.RUSSIAN,
|
||||
WindUpTimer = 45.58f,
|
||||
WindUpTimer = 45.48f,
|
||||
Bars = 16,
|
||||
BeatsOffset = 0.0f,
|
||||
ColorTransitionIn = 0.3f,
|
||||
|
|
@ -460,7 +460,7 @@ namespace MuzikaGromche
|
|||
Name = "Kach",
|
||||
AudioType = AudioType.OGGVORBIS,
|
||||
Language = Language.ENGLISH,
|
||||
WindUpTimer = 48.30f,
|
||||
WindUpTimer = 47.30f,
|
||||
Bars = 12,
|
||||
// let them overlap, such that there is an actual hard cut to the next color
|
||||
BeatsOffset = 0.4f,
|
||||
|
|
@ -480,26 +480,75 @@ namespace MuzikaGromche
|
|||
Lyrics = [],
|
||||
GameOverText = "[DIDN'T PUMP IT: LOUDER]",
|
||||
},
|
||||
new SelectableAudioTrack
|
||||
new SelectableTracksGroup
|
||||
{
|
||||
Name = "BeefLiver",
|
||||
AudioType = AudioType.OGGVORBIS,
|
||||
Language = Language.ENGLISH,
|
||||
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 = [],
|
||||
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 = [],
|
||||
},
|
||||
],
|
||||
},
|
||||
new SelectableTracksGroup
|
||||
{
|
||||
|
|
@ -597,12 +646,11 @@ namespace MuzikaGromche
|
|||
IsExplicit = true,
|
||||
Tracks =
|
||||
[
|
||||
new SelectableAudioTrack
|
||||
new CoreAudioTrack
|
||||
{
|
||||
Name = "AttentionPls1",
|
||||
FileNameLoop = "AttentionPlsLoop.ogg",
|
||||
AudioType = AudioType.OGGVORBIS,
|
||||
Language = Language.RUSSIAN,
|
||||
WindUpTimer = 39.19f,
|
||||
Bars = 8,
|
||||
BeatsOffset = 0.3f,
|
||||
|
|
@ -618,12 +666,11 @@ namespace MuzikaGromche
|
|||
DrunknessLoopOffsetTimeSeries = new([7f, 12f, 15f], [0f, 0.90f, 0f]),
|
||||
CondensationLoopOffsetTimeSeries = new([23f, 28f, 31f], [0f, 0.4f, 0f]),
|
||||
},
|
||||
new SelectableAudioTrack
|
||||
new CoreAudioTrack
|
||||
{
|
||||
Name = "AttentionPls2",
|
||||
FileNameLoop = "AttentionPlsLoop.ogg",
|
||||
AudioType = AudioType.OGGVORBIS,
|
||||
Language = Language.RUSSIAN,
|
||||
WindUpTimer = 39.19f,
|
||||
Bars = 8,
|
||||
BeatsOffset = 0.3f,
|
||||
|
|
@ -641,6 +688,101 @@ 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()
|
||||
|
|
@ -929,7 +1071,7 @@ namespace MuzikaGromche
|
|||
|
||||
// Number of beats between WindUpTimer and where looped segment starts (not the loop audio).
|
||||
public int LoopOffset { get; }
|
||||
public float LoopOffsetInSeconds => LoopOffset / Beats * LoadedLoop.length;
|
||||
public float LoopOffsetInSeconds => (float)LoopOffset / (float)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.
|
||||
|
|
@ -2035,7 +2177,10 @@ 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
|
||||
|
|
@ -2093,17 +2238,18 @@ 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, Default(new BoolCheckBoxOptions())));
|
||||
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(SkipExplicitTracks, requiresRestart: false));
|
||||
|
||||
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, Default(new BoolCheckBoxOptions())));
|
||||
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(OverrideSpawnRates, requiresRestart: false));
|
||||
|
||||
#if DEBUG
|
||||
SetupEntriesForGameOverText(configFile);
|
||||
SetupEntriesForScreenFilters(configFile);
|
||||
SetupEntriesForExtrapolation(configFile);
|
||||
SetupEntriesToSkipWinding(configFile);
|
||||
SetupEntriesForVolume(configFile);
|
||||
SetupEntriesForPaletteOverride(configFile);
|
||||
SetupEntriesForTimingsOverride(configFile);
|
||||
#endif
|
||||
|
|
@ -2125,18 +2271,14 @@ namespace MuzikaGromche
|
|||
string buttonText = "Toggle";
|
||||
var button = new GenericButtonConfigItem(section, buttonOptionName, buttonDescription, buttonText, () =>
|
||||
{
|
||||
if (CanModifyWeightsNow())
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
t.Weight.Value = newWeight;
|
||||
}
|
||||
});
|
||||
button.ButtonOptions.CanModifyCallback = CanModifyWeightsNow;
|
||||
LethalConfigManager.AddConfigItem(button);
|
||||
}
|
||||
|
||||
|
|
@ -2148,7 +2290,7 @@ namespace MuzikaGromche
|
|||
50,
|
||||
new ConfigDescription(description, chanceRange, track));
|
||||
|
||||
LethalConfigManager.AddConfigItem(new IntSliderConfigItem(track.Weight, Default(new IntSliderOptions())));
|
||||
LethalConfigManager.AddConfigItem(new IntSliderConfigItem(track.Weight, requiresRestart: false));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2162,46 +2304,12 @@ 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, Default(new BoolCheckBoxOptions())));
|
||||
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(entry, requiresRestart: false));
|
||||
entry.SettingChanged += (sender, args) => apply();
|
||||
apply();
|
||||
|
||||
|
|
@ -2215,7 +2323,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, Default(new BoolCheckBoxOptions())));
|
||||
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(entry, requiresRestart: false));
|
||||
entry.SettingChanged += (sender, args) => apply();
|
||||
apply();
|
||||
|
||||
|
|
@ -2225,6 +2333,13 @@ 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";
|
||||
|
|
@ -2235,13 +2350,12 @@ 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, Default(new IntSliderOptions())));
|
||||
LethalConfigManager.AddConfigItem(new IntSliderConfigItem(customPaletteSizeEntry, requiresRestart: false));
|
||||
customPaletteSizeEntry.SettingChanged += (sender, args) => apply();
|
||||
|
||||
for (int i = 0; i < maxCustomPaletteSize; i++)
|
||||
|
|
@ -2249,7 +2363,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, Default(new HexColorInputFieldOptions())));
|
||||
LethalConfigManager.AddConfigItem(new HexColorInputFieldConfigItem(customColorEntry, requiresRestart: false));
|
||||
customColorEntry.SettingChanged += (sender, args) => apply();
|
||||
}
|
||||
|
||||
|
|
@ -2305,12 +2419,11 @@ 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, Default(new BoolCheckBoxOptions())));
|
||||
LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(overrideTimingsEntry, requiresRestart: false));
|
||||
overrideTimingsEntry.SettingChanged += (sender, args) => apply();
|
||||
|
||||
fadeOutBeatEntry = configFile.Bind(section, "Fade Out Beat", 0f,
|
||||
|
|
@ -2334,17 +2447,16 @@ 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)));
|
||||
|
||||
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())));
|
||||
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));
|
||||
|
||||
registerStruct(fadeOutBeatEntry, t => t.FadeOutBeat, x => FadeOutBeatOverride = x);
|
||||
registerStruct(fadeOutDurationEntry, t => t.FadeOutDuration, x => FadeOutDurationOverride = x);
|
||||
|
|
@ -2540,13 +2652,6 @@ namespace MuzikaGromche
|
|||
};
|
||||
}
|
||||
#endif
|
||||
|
||||
private T Default<T>(T options) where T : BaseOptions
|
||||
{
|
||||
options.RequiresRestart = false;
|
||||
options.CanModifyCallback = CanModifyIfHost;
|
||||
return options;
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(GameNetworkManager))]
|
||||
|
|
@ -2609,16 +2714,26 @@ 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();
|
||||
|
|
|
|||
43
README.md
43
README.md
|
|
@ -1,34 +1,53 @@
|
|||
# Muzika Gromche!
|
||||
# Muzika Gromche — The ultimate Jester party music mod
|
||||
|
||||
_Add some content to your Inverse teleporter experience on Titan!<sup>1</sup>_
|
||||
|
||||
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.
|
||||
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:
|
||||
|
||||
[](https://ratijas.me/share/public/LC/MuzikaGromche/video/demo/MuzikaGromche-demo.mp4)
|
||||
|
||||
An example of trapping One Punch Man themed Jester at mineshaft:
|
||||
|
||||
[](https://ratijas.me/share/public/LC/MuzikaGromche/video/mineshaft-trap/How%20not%20to%20trap%20Jester%20at%20Mineshaft.mp4)
|
||||
|
||||
## Compatibility
|
||||
|
||||
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 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 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.
|
||||
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.
|
||||
|
||||
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.
|
||||
- [`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.
|
||||
|
||||
## 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 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.
|
||||
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.
|
||||
|
||||
Track selection options are only configurable by host player and only while orbiting.
|
||||
Track selection options are only configurable by the host player.
|
||||
|
||||
Any player can change their personal preferences locally.
|
||||
- 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.
|
||||
- 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.
|
||||
|
||||
## 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.
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"isRoot": true,
|
||||
"tools": {
|
||||
"evaisa.netcodepatcher.cli": {
|
||||
"version": "4.3.0",
|
||||
"version": "4.4.2",
|
||||
"commands": [
|
||||
"netcode-patch"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "MuzikaGromche",
|
||||
"version_number": "1337.420.9004",
|
||||
"version_number": "1337.9001.0",
|
||||
"author": "Ratijas",
|
||||
"description": "Add some content to your inverse teleporter experience on Titan!",
|
||||
"website_url": "https://git.vilunov.me/ratijas/muzika-gromche",
|
||||
|
|
|
|||
Loading…
Reference in New Issue