1
0
Fork 0
Commit Graph

63 Commits

Author SHA1 Message Date
ivan tkachenko 581d9701bd Remove redundant call to private method FlickerPoweredLights
FlickerPoweredLights is a private coroutine.

FlickerLights is the public method that internally starts and stores the
FlickerPoweredLights coroutine.
2025-07-21 19:07:36 +03:00
ivan tkachenko 730f125d62 Patch Jester destructor to reset the light show
It is needed to despawn Jester via Imperium's Object Explorer.
2025-07-21 01:06:45 +03:00
ivan tkachenko 8e065d3e51 Add config option to skip tracks marked as Explicit Content/Lyrics
Unfortunately it is configurable by host only, and there is no sane way
to make work from clients.
2025-07-21 00:55:40 +03:00
ivan tkachenko 2a33457661 Harmony: Use nameof() instead of hardcoded strings 2025-07-21 00:32:43 +03:00
ivan tkachenko 0fbf0b04f4 Add V70PoweredLights_Fix to the package dependencies
Not strictly required, but makes this mod shine brighter.
2025-07-21 00:32:43 +03:00
ivan tkachenko 0c5d4f7158 Add DiscoBall to Main on all interiors, BirthdayRoom and factory (belt room) 2025-07-21 00:32:43 +03:00
ivan tkachenko 9e066372c5 Add support for lyrics randomization 2025-07-21 00:32:42 +03:00
ivan tkachenko ca977625db Sort imports the way VisualStudio likes it
Apparently, Sublime Text's Sort Lines command ordered them in a weird
way, inconsistent with VS, VS Code and human logic.
2025-07-20 23:04:41 +03:00
ivan tkachenko 7d1cac6e2e Add lyrics, flickering and fade out transitions to many tracks 2025-07-20 23:04:40 +03:00
ivan tkachenko 2229fa3545 Add debug-only config for lyrics time series 2025-07-20 23:04:40 +03:00
ivan tkachenko 118eecbb59 Add support for fading out, and debug-only config for flickering lights 2025-07-20 23:04:40 +03:00
ivan tkachenko b8824dbbfb Config: Most synced options have something in common 2025-07-20 23:04:40 +03:00
ivan tkachenko 3e751c0d8d Config: reduce repetition
It may look complicated, but it reduced references to each individual
entry from almost ten to just 4.
2025-07-20 23:04:39 +03:00
ivan tkachenko 601ecf8887 Reworked state management system, automatic wrapping of timestamps and spans
Add lyrics for MoyaZhittya
2025-07-20 23:04:39 +03:00
ivan tkachenko d13c617895 Apply audio offsets early to simplify math 2025-07-18 02:40:55 +03:00
ivan tkachenko e1f19b3919 Add track Kach with custom palette and timings 2025-07-18 02:40:55 +03:00
ivan tkachenko ba0162b3e1 Add track PWNED with custom palette and timings 2025-07-18 02:40:54 +03:00
ivan tkachenko ed8804b7a7 Add track Chereshnya with custom palette and timings 2025-07-18 02:40:53 +03:00
ivan tkachenko 9be9eaaf80 Extend loop of the track VseVZale
Now includes second phase OOOoooo OOooo
2025-07-18 02:40:53 +03:00
ivan tkachenko 0683a18491 Port track VseVZale to OGG format
No gap now.
2025-07-18 02:40:52 +03:00
ivan tkachenko 6204888453 Port track DeployDestroy to OGG format
No gap now.
2025-07-18 02:40:52 +03:00
ivan tkachenko c15637b347 Port track Durochka to OGG format, add custom transitions
No gap now.
2025-07-18 02:40:51 +03:00
ivan tkachenko 42c1f29a16 Port track Gorgorod to OGG format
No gap now.
2025-07-18 02:40:50 +03:00
ivan tkachenko 8a193fa408 Port track MoyaZhittya to OGG format
No gap now.
2025-07-18 02:40:50 +03:00
ivan tkachenko 4ee20adea7 Port track MuzikaGromche to OGG format
Twice as longer, loops better, no gap.
2025-07-18 02:40:49 +03:00
ivan tkachenko 2df7d28d43 New operators for Palette
With these it would be easier to create more complicated timelines
without repeating yourself over and over again.
2025-07-18 02:40:49 +03:00
ivan tkachenko f5dab20d67 Add track Yalgaar with custom palette and timings 2025-07-18 02:40:48 +03:00
ivan tkachenko 38cfb5f5e7 Add track Peretasovka with custom palette and timings 2025-07-18 02:40:47 +03:00
ivan tkachenko b86c50a848 Add track Song2 with custom palette and timings 2025-07-18 02:40:47 +03:00
ivan tkachenko 694bc61dae Add tracks GodMode and RiseAndShine with custom palette and timings 2025-07-18 02:40:46 +03:00
ivan tkachenko 909efa720f Add track ZmeiGorynich with custom palette and timings 2025-07-18 02:36:43 +03:00
ivan tkachenko a8761bf679 Add support for interpolated color transitions for lights, with debug-only synced overrides 2025-07-17 22:36:52 +03:00
ivan tkachenko ad77530b6d Add support for per-track palettes, and debug-only synced palette override
Palettes are contributed by @REALJUSTNOTHING
2025-07-17 22:35:19 +03:00
ivan tkachenko 34d8da1562 Add configurable global audio offset, useful for Bluetooth headsets 2025-07-17 22:35:19 +03:00
ivan tkachenko b73c7ee3cb Sync playback to the actual beat count rather than relying on BPM 2025-07-17 22:34:38 +03:00
ivan tkachenko 0d4f180a37 Add debug-only ability to change weights of tracks while on a moon
And drop obsoleted debug code. With the new on-the-fly track weights
configuration, hardcoding one in build is not necessary anymore.
2025-07-16 03:06:43 +03:00
ivan tkachenko 829c44e347 Add debug-only synced config option to skip wind-up phase 2025-07-16 03:06:42 +03:00
ivan tkachenko b15e93ac34 Factor out CSync hack into a separate method
We gonna register more synced entries in debug-only builds, but marking
nullable fields with the [SyncedEntryField] attribute is not an option.
2025-07-15 22:47:02 +03:00
ivan tkachenko f158e7728c Fix language section toggle for non-host
There is no point in checking for synchronized value before flipping
local value.
2025-07-15 21:51:38 +03:00
ivan tkachenko 2b42899779 Reorder some statements to make them visually more grouped together
Postfix patch went from 5 if-blocks down to only 3 \o/

There is no need to stop the creatureVoice and start it delayed in two
separate condition blocks. Also, the code should only rely on state
transitions, and not on AudioSource.isPlaying property.
2025-07-14 14:44:17 +03:00
ivan tkachenko 3b055e3d91 Split config into sections per track language, add quick toggle per section 2025-07-12 19:33:12 +03:00
ivan tkachenko 13fd51c366 Add LethalConfig with suitable custom options
The custom callback attempts to prevent modifications mid-round. Use
IsHost to check for permissions, as IsClient is always true for
everyone even in local single-player setting.

There is a bug in LethalConfig which makes it possible to modify entries
bypassing the callback once per round, but it is pretty hard to abuse:
https://github.com/AinaVT/LethalConfig/issues/60
2025-07-12 17:32:31 +03:00
ivan tkachenko 34e72da748 Add config synchronization via CSync
It only synchronizes from host to clients.
2025-07-12 17:32:29 +03:00
ivan tkachenko aead762721 Add configuration weights for tracks
Range is [0..100] but it's relative to total/sum. The algorithm guards
against "all set to zero" scenario.

This is not usable without synchronization. This commit provides none.
2025-07-12 02:09:47 +03:00
ivan tkachenko 8dc897feba Move track choosing out of the Jester patch class 2025-07-11 23:58:48 +03:00
ivan tkachenko 9176e35344 Fix double triggering start of music
State transitions are only handled by changes to previousState on
per-frame basis, so only compare before/after of previousState.
2025-07-11 22:39:14 +03:00
ivan tkachenko 2284636576 Rename State member to make it less confusing
JesterAI::previousState updates on the next frame after
currentBehaviourStateIndex changes, while current- & previous-
BehaviourStateIndex only change when SwitchToBehaviourState() is
requested.
2025-07-11 22:39:14 +03:00
ivan tkachenko 38d4ddd7c6 Quick Fix: Object initialization can be simplified (IDE0017) 2025-07-11 22:39:14 +03:00
ivan tkachenko e82f2c5924 Consistently use equality operator for state indexes 2025-07-11 22:39:14 +03:00
ivan tkachenko 45bde29240 Auto format code 2025-07-11 22:39:14 +03:00