1
0
Fork 0

Compare commits

..

16 Commits

Author SHA1 Message Date
ivan tkachenko cbf1c14e01 Release v1337.9001.68 2026-01-23 05:29:16 +02:00
ivan tkachenko 5258b806d4 Add a new track Arcane 2026-01-23 05:23:53 +02:00
ivan tkachenko 4cc187b525 Split audio tracks metadata into a separate file 2026-01-23 01:52:23 +02:00
ivan tkachenko ecee2a25e2 Reorder [General] config section alphabetically
As a side-effect, this conveniently places the most important option
OverrideSpawnRates at the top.
2026-01-23 00:13:02 +02:00
ivan tkachenko af38056d11 Merge Config.DisplayLyrics and ReduceVFXIntensity
Both are responsible for some sort of VFX. Make the number of options
less overwhelming by merging the two into one.
2026-01-23 00:08:17 +02:00
ivan tkachenko 567597e353 Remove Config.ExtrapolateTime even from Debug build
Just always do it, there is no reason not to.

And maybe try dspTime to replace the whole extrapolation technique.
2026-01-22 23:47:00 +02:00
ivan tkachenko ee2b1574d0 Hide AudioOffset from Lethal Config
It is a niche option, and having two sliders next to each other might be
overwhelming for players.
2026-01-22 23:43:02 +02:00
ivan tkachenko 02903ba537 Adapt to WaterGun-V70PoweredLights_Fix-1.1.0
Don't replace the rest of the patches, because animators and audio would
be broken for reasons yet unknown.
2026-01-22 23:38:57 +02:00
ivan tkachenko b0d5922c3c Replace hotfix in code with a properly rebuilt asset bundle 2026-01-22 23:38:56 +02:00
ivan tkachenko 4e9ba0928f Disable track Yalgaar in release builds
Still will be available in a web player.
2026-01-22 23:38:56 +02:00
ivan tkachenko 6a5cc637ac Rewrite client-side vanilla-compat mode
Amends b8ef4d7937

Networking and playback are fixed, but client-side vanilla-compat mode
can never work as intended, because timers are actually client-side and
not synchronized at all. No matter what your local timer is set to, the
host gets to decide when to pop Jester at a completely random for your
client moment. There can be no meaningful prediction whatsoever.
2026-01-22 23:38:56 +02:00
ivan tkachenko a2cf66476c Deduplicate logs to avoid spamming console with errors each frame 2026-01-20 01:48:39 +02:00
ivan tkachenko a254188f0c Stop farAudio (popGoesTheWeaselTheme) in the only place where it matters 2026-01-17 19:40:42 +02:00
ivan tkachenko 3041d9f73c Merge EnemyAI.OnDestroy patch with cleanups into existing Behaviour
That Harmony patch predated MuzikaGromcheJesterNetworkBehaviour, but
there is no need to have as a separate class, especially not with the
subclass check hack.
2026-01-16 19:38:43 +02:00
ivan tkachenko 908ddeb862 editorconfig: do not suggest null propagation for Unity code 2026-01-16 18:04:07 +02:00
ivan tkachenko 3835e84450 Bump version 2026-01-16 18:04:06 +02:00
13 changed files with 1405 additions and 1217 deletions

View File

@ -6,3 +6,10 @@ csharp_style_prefer_primary_constructors = false
# IDE0305: Simplify collection initialization
dotnet_style_prefer_collection_expression = never
# IDE0031: Use null propagation
# Unity overrides equality operator, so gameObject == null also accounts for internal state of the backing C++ object
# Read more:
# - https://blog.lslabs.dev/posts/null_check_equality_unity
# - https://blog.lslabs.dev/posts/unity_script_duality
dotnet_style_null_propagation = false

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

Binary file not shown.

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

Binary file not shown.

View File

@ -1,5 +1,13 @@
# Changelog
## MuzikaGromche 1337.9001.68 - LocalHost hotfix
- Fixed occasionally broken playback of v1337.9001.67, sorry about that.
- Turns out, client-side vanilla-compat mode can never be perfectly timed, so don't expect much without a modded host.
- Removed an existing track Yalgaar.
- Merged two config options into one: Reduce Visual Effects & Display Lyrics.
- Added a new track Arcane.
## MuzikaGromche 1337.9001.67 - LocalHost Edition
- Added a new track TwoFastTuFurious (from the same artist as PickUpSticks), thematic to the upcoming Valentine's Day.

View File

@ -0,0 +1,70 @@
using BepInEx.Logging;
namespace MuzikaGromche;
#if DEBUG
// A logger with an API similar to ManualLogSource.
// This logger caches last posted messagee and uses it to deduplicate subsequent messages.
// Use Clear() to forget deduplicated message.
internal class DedupManualLogSource
{
public ManualLogSource Source;
object? lastData = null;
public DedupManualLogSource(ManualLogSource source)
{
Source = source;
}
public void Log(LogLevel level, object data)
{
if (lastData != data)
{
lastData = data;
Source.Log(level, data);
}
}
public void LogFatal(object data)
{
Log(LogLevel.Fatal, data);
}
public void LogError(object data)
{
Log(LogLevel.Error, data);
}
public void LogWarning(object data)
{
Log(LogLevel.Warning, data);
}
public void LogMessage(object data)
{
Log(LogLevel.Message, data);
}
public void LogInfo(object data)
{
Log(LogLevel.Info, data);
}
public void LogDebug(object data)
{
Log(LogLevel.Debug, data);
}
public void Clear()
{
lastData = null;
}
public void Dispose()
{
}
}
#endif

View File

@ -50,37 +50,10 @@ namespace MuzikaGromche
];
Patches = [.. patchDescriptors.Select(d =>
new TilePatch(d.TileName, HotFixPrefab(d.PrefabPath, assetBundle.LoadAsset<GameObject>(d.PrefabPath)))
new TilePatch(d.TileName, assetBundle.LoadAsset<GameObject>(d.PrefabPath))
)];
}
static GameObject HotFixPrefab(string PrefabPath, GameObject gameObject)
{
// beacause I can't be bothered to reassemble the asset bundle
if (PrefabPath == "Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerFactory.prefab")
{
void RemoveGameObject(string gameObjectPath)
{
var transform = gameObject.transform.Find(gameObjectPath);
if (transform != null)
{
UnityEngine.Object.Destroy(transform.gameObject);
}
}
RemoveGameObject("DiscoBallProp1");
RemoveGameObject("DiscoBallProp2");
var discoBall = gameObject.transform.Find("DiscoBallProp3");
if (discoBall != null)
{
var position = discoBall.position;
position.y -= 5f;
discoBall.position = position;
}
}
return gameObject;
}
internal static void Patch(Tile tile)
{
var query = from patch in Patches

1065
MuzikaGromche/Library.cs Normal file

File diff suppressed because it is too large Load Diff

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.67</Version>
<Version>1337.9001.68</Version>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>

File diff suppressed because it is too large Load Diff

View File

@ -115,9 +115,10 @@ namespace MuzikaGromche
]),
new("GarageTile", [
new("HangingLEDBarLight (3)", LEDHangingLight),
new("HangingLEDBarLight (4)", LEDHangingLight,
new("HangingLEDBarLight (4)", LEDHangingLight),
// This HangingLEDBarLight's IndirectLight is wrongly named, so animator couldn't find it
ManualPatch: RenameGameObjectPatch("IndirectLight (1)", "IndirectLight")),
// renamed by WaterGun-V70PoweredLights_Fix-1.1.0
// ManualPatch: RenameGameObjectPatch("IndirectLight (1)", "IndirectLight")),
]),
new("PoolTile", [
new("PoolLights/HangingLEDBarLight", LEDHangingLight),

View File

@ -19,7 +19,7 @@ All tracks are available on the web player: [ratijas.me/muzika-gromche](https://
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.*
- **Modded host is compatible** with vanilla clients, but if a selected track's wind-up timer differs significantly from the vanilla value, vanilla clients may observe Jester pop early or hear its theme restart from the beginning.
- **Modded client is compatible** with vanilla host: the client will locally select the track whose wind-up timer most closely matches vanilla value, but it will never play tracks whose timer fall far outside of vanilla range.
- **Modded client is compatible** with vanilla host: the client will locally select the track whose wind-up timer most closely matches vanilla value, but it will never play tracks whose timer fall far outside of vanilla range. It is impossible to time the drop perfectly, because clients don't know timer values of host.
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.
@ -32,7 +32,7 @@ English playlist features artists such as **Imagine Dragons, Fall Out Boy, Bon J
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.**
There are also a K-pop track by **aespa**, and an anime opening from **One Punch Man.**
Seasonal New Year's songs:
@ -46,7 +46,7 @@ Configuration integrates with [`LethalConfig`] mod.
Consider leaving the **Override Spawn Rates** config entry ON: it makes Jester progressively more likely to spawn afternoon.
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.
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 Japanese tracks OFF if you don't speak those languages.
Track selection options are only configurable by the host player.

View File

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