Sync playback to the actual beat count rather than relying on BPM #5

Open
ratijas wants to merge 43 commits from ratijas/muzika-gromche:work/r/beats into master
49 changed files with 1768 additions and 151 deletions

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

Binary file not shown.

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

Binary file not shown.

BIN
Assets/DeployDestroyLoop.mp3 (Stored with Git LFS)

Binary file not shown.

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

Binary file not shown.

BIN
Assets/DeployDestroyStart.mp3 (Stored with Git LFS)

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

BIN
Assets/DurochkaStart.mp3 (Stored with Git LFS)

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

BIN
Assets/GorgorodStart.mp3 (Stored with Git LFS)

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

BIN
Assets/MoyaZhittyaStart.mp3 (Stored with Git LFS)

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

BIN
Assets/MuzikaGromcheStart.mp3 (Stored with Git LFS)

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

BIN
Assets/VseVZaleStart.mp3 (Stored with Git LFS)

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

View File

@ -2,9 +2,13 @@
<Project>
<PropertyGroup>
<!-- Copy this file to MuzikaGromche.props.user and uncomment one of two paths below: -->
<!-- On Linux: -->
<!-- <LethalCompanyDir>$(HOME)/.local/share/Steam/steamapps/common/Lethal Company/</LethalCompanyDir> -->
<!-- <WavExportDir>\home\ratijas\Music\SFX\Export</WavExportDir> -->
<!-- On Windows: -->
<!-- <LethalCompanyDir>C:/Program Files (x86)/Steam/steamapps/common/Lethal Company/</LethalCompanyDir> -->
<!-- <WavExportDir>D:\Code\MuzikaGromcheAudio\Export</WavExportDir> -->
</PropertyGroup>
</Project>

View File

@ -0,0 +1,90 @@
using DunGen;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using UnityEngine;
namespace MuzikaGromche
{
public class DiscoBallManager : MonoBehaviour
{
// A struct holding a disco ball container object and the name of a tile for which it was designed.
public readonly record struct Data(string TileName, GameObject DiscoBallContainer)
{
// We are specifically looking for cloned tiles, not the original prototypes.
public readonly string TileCloneName = $"{TileName}(Clone)";
}
public static readonly List<Data> Containers = [];
private static readonly List<GameObject> InstantiatedContainers = [];
public static void Initialize()
{
string assetdir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "muzikagromche");
var bundle = AssetBundle.LoadFromFile(assetdir);
foreach ((string prefabPath, string tileName) in new[] {
("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerManor.prefab", "ManorStartRoomSmall"),
("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerFactory.prefab", "StartRoom"),
("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerMineShaft.prefab", "MineshaftStartTile"),
("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerLargeForkTileB.prefab", "LargeForkTileB"),
("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerBirthdayRoomTile.prefab", "BirthdayRoomTile"),
})
{
var container = bundle.LoadAsset<GameObject>(prefabPath);
Containers.Add(new(tileName, container));
}
}
public static void Enable()
{
// Just in case
Disable();
var query = from tile in Resources.FindObjectsOfTypeAll<Tile>()
join container in Containers
on tile.gameObject.name equals container.TileCloneName
select (tile, container);
foreach (var (tile, container) in query)
{
Enable(tile, container);
}
}
private static readonly string[] animatorNames = [
"DiscoBallProp/AnimContainer",
"DiscoBallProp1/AnimContainer",
"DiscoBallProp2/AnimContainer",
"DiscoBallProp3/AnimContainer",
"DiscoBallProp4/AnimContainer",
"DiscoBallProp5/AnimContainer",
];
private static void Enable(Tile tile, Data container)
{
Debug.Log($"{nameof(MuzikaGromche)} {nameof(DiscoBallManager)} Enabling at '{tile.gameObject.name}'");
var discoBall = Instantiate(container.DiscoBallContainer, tile.transform);
InstantiatedContainers.Add(discoBall);
foreach (var animatorName in animatorNames)
{
if (discoBall.transform.Find(animatorName)?.gameObject is GameObject animator)
{
animator.GetComponent<Animator>().SetBool("on", true);
}
}
}
public static void Disable()
{
foreach (var discoBall in InstantiatedContainers)
{
Debug.Log($"{nameof(MuzikaGromche)} {nameof(DiscoBallManager)}: Disabling {discoBall.name}");
Destroy(discoBall);
}
InstantiatedContainers.Clear();
}
}
}

View File

@ -4,7 +4,7 @@
<TargetFramework>netstandard2.1</TargetFramework>
<AssemblyName>MuzikaGromche</AssemblyName>
<Description>Opa che tut u nas</Description>
<Version>13.37.6</Version>
<Version>13.37.420</Version>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>latest</LangVersion>
</PropertyGroup>
@ -49,6 +49,7 @@
<PackagedResources Include="$(SolutionDir)README.md" />
<PackagedResources Include="$(SolutionDir)icon.png" />
<PackagedResources Include="$(SolutionDir)manifest.json" />
<PackagedResources Include="$(ProjectDir)UnityAssets\muzikagromche" />
<PackagedResources Include="$(TargetDir)MuzikaGromche.dll" />
</ItemGroup>
@ -73,4 +74,18 @@
DestinationFolder="$(SolutionDir)dist\"
/>
</Target>
<!--
Usage:
Set WavExportDir in props.user file.
Run
> dotnet msbuild /t:wav2ogg /p:TrackName=GodMode
-->
<Target Name="wav2ogg">
<ItemGroup>
<TrackNames Include="$(TrackName)Start" />
<TrackNames Include="$(TrackName)Loop" />
</ItemGroup>
<Exec Command="ffmpeg -bitexact -y -i $(WavExportDir)%(TrackNames.Identity).wav $(SolutionDir)Assets\%(TrackNames.Identity).ogg"/>
</Target>
</Project>

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1 +1,23 @@
Adds some content to your reverse teleports on Titan
# Muzika Gromche!
Add some content to your reverse teleport experience on Titan!
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.
## Configuration
Configuration integrates with [LethalConfig](https://thunderstore.io/c/lethal-company/p/AinaVT/LethalConfig/) mod.
Track selection options are only configurable by host player and only while orbiting.
Any player can change their personal preferences locally.
- If you experience severe lags, try disabling color animations in config.
- 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.
- [@REALJUSTNOTHING](https://t.me/REALJUSTNOTHING): Graphics designer; contributed palettes, timings and animation curves.
- [WaterGun](https://www.youtube.com/channel/UCCxCFfmrnqkFZ8i9FsXBJVA): Created [V70PoweredLights_Fix](https://thunderstore.io/c/lethal-company/p/WaterGun/V70PoweredLights_Fix/) mod, patched certain tiles with amazing lightshow.

View File

@ -1,12 +1,13 @@
{
"name": "MuzikaGromche",
"version_number": "13.37.6",
"version_number": "13.37.420",
"author": "Oflor",
"description": "Glaza zakryvaj",
"website_url": "https://git.vilunov.me/nikita/muzika-gromche",
"dependencies": [
"BepInEx-BepInExPack-5.4.2100",
"Sigurd-CSync-5.0.1",
"ainavt.lc.lethalconfig-1.4.6"
"AinaVT-LethalConfig-1.4.6",
"WaterGun-V70PoweredLights_Fix-1.0.0"
]
}