ivan tkachenko
9619a75427
Bump version
2025-10-08 02:30:32 +03:00
ivan tkachenko
aea755361b
Added new track AttentionPls, implement HUD effects as a time series / timeline
2025-09-26 18:07:11 +03:00
ivan tkachenko
e67c72951e
Override DeathScreen / GameOver text, add support for per-track strings
...
Custom message is shown only if the player dies to a Jester.
2025-09-22 03:01:41 +03:00
ivan tkachenko
0fadf50bf4
Bump version
2025-09-22 03:00:16 +03:00
ivan tkachenko
99babe8bdf
Substitute placeholder nulls with per-light initial color for transitions
...
Fade out and first color transitions used to assume white as a default
color, which is not always the case e.g. in Mineshaft tunnel tiles. Use
nullable from/to/color fields, and substitute them with per-light
initial color data in a new virtual method that calculates colors.
2025-08-25 01:29:39 +03:00
ivan tkachenko
bbd9b0204f
Rename PoweredLightsAnimators.cs to PoweredLights.cs
...
For simplicity, but also because it already handles more than animators.
2025-08-24 22:34:33 +03:00
ivan tkachenko
70eabe75dd
Bump version
2025-08-24 22:29:47 +03:00
ivan tkachenko
4cc9713fa7
Fix resetting to wrong initial colors, e.g. in Mineshaft tunnel tiles
...
This does not fix fading out and transitioning to the very first palette
color though, but fixing that would require color events to
be "personalized" per-light, which is currently not supported.
2025-08-23 01:49:12 +03:00
ivan tkachenko
8710df7525
Change config value for Override Spawn Rates to true by default
2025-08-22 16:09:01 +03:00
ivan tkachenko
9d23fd5b95
Downgrade LobbyCompatibility to optional dependency
...
Since it does not prevent unmodded clients from joining, there is no
reason for literally any mod to require it.
2025-08-22 16:05:42 +03:00
ivan tkachenko
4516b853cd
Remove remaining CSync code and references
...
There were issues with clients not being able to join, potentially
caused by linked (even though actually unused) CSync library.
2025-08-22 15:16:24 +03:00
ivan tkachenko
b3767cbbf0
Add "polyfill" for IsExternalInit C# feature
...
Imperium does this as well, and the whole internet would tell you to do
this too, so it should be fine.
2025-08-22 15:16:24 +03:00
ivan tkachenko
327e606deb
Drop required properties syntax
...
Sometimes, seemingly after random unrelated changes, it might stop
compiling with internal compiler error messages about missing features
and attributes. .NET Standard 2.1 is not supposed to support any
features beyond C# 8.0, while `required` attribute was introduced only
in C# 11 or 12, it's hard to tell.
2025-08-22 15:16:24 +03:00
ivan tkachenko
70e45d5ba2
Remove unused class
2025-08-22 15:16:24 +03:00
ivan tkachenko
d4d3e15de3
Clean separation between track data and config overrides
...
In debug builds Config keeps a reference to the last set original track
instance from which it can load original values.
2025-08-22 15:16:23 +03:00
ivan tkachenko
525c0e108f
Refactor CurrentTrack to be less dependent on a global static
2025-08-22 15:16:23 +03:00
ivan tkachenko
73ad702684
Rewrite AudioSource handling from scratch
2025-08-22 15:16:23 +03:00
ivan tkachenko
e67de4556c
Move BeatTimeState from global static to per-Jester-instance Behaviour
2025-08-22 15:16:11 +03:00
ivan tkachenko
0b0383003f
Reset BeatTimeState for good measure
...
Hopefully will fix Mineshaft lights somehow getting stuck in multiplayer.
2025-08-22 15:16:11 +03:00
ivan tkachenko
c6b128270f
Add new track OnePartiyaUdar
2025-08-15 00:52:38 +03:00
ivan tkachenko
852d866073
Bump version
2025-08-15 00:51:53 +03:00
ivan tkachenko
42c6179ba5
Add new track Beha with three variants of intro
2025-08-14 19:13:20 +03:00
ivan tkachenko
5649a18633
Split Track into Selectable and Audio interfaces, add support for groups
2025-08-14 18:48:54 +03:00
ivan tkachenko
47f984cd28
Allow tracks to share common audio clip files
...
Send one request per file name. File names can be explicitly overridden.
2025-08-14 15:38:59 +03:00
ivan tkachenko
fc3a62e511
Rename Start segment to Intro to reduce some confusion
...
Confusingly, "start" may refer to too many things in different places,
while "intro" would unambiguously refer to an audio clip that plays
first before the loop starts.
2025-08-14 15:11:46 +03:00
ivan tkachenko
5f0c890682
Remove unused method
2025-08-14 15:09:31 +03:00
ivan tkachenko
59a069f51b
Bump version
2025-08-14 15:09:27 +03:00
ivan tkachenko
26f9d2cf9f
Print tracks length in debug builds, and remove unnecessary non-null assertion
2025-08-11 22:28:32 +03:00
ivan tkachenko
a950093f8e
Sort tracks by name, so they are easier to find in the config
2025-08-11 22:28:32 +03:00
ivan tkachenko
8842005898
Add new track BeefLiver
2025-08-11 22:28:31 +03:00
ivan tkachenko
b4ae4bad41
Config: More usable range for fading out
2025-08-11 22:28:31 +03:00
ivan tkachenko
69e64397a0
Extrapolate AudioSource playback time to get smoother transitions
...
AudioSource only updates about 25 times per second, meaning that even at
30 fps some adjacent frames would be calculated as having exact same
timestamps and render duplicated colors. At 100+ fps more than 2/3 of
the frames would be duplicates.
As a drive-by change, split complex logic of BeatTimeState into smaller
classes. Most of the time the state needs to maintain some boolean flag
which it flips once and stays that way, like HasStarted, IsLooping.
2025-08-11 22:28:31 +03:00
ivan tkachenko
3d0795f04d
Drop CSync as a dependency from Release builds
...
Since the rewrite of track selection to a custom netcode, CSync is only
needed for debug/development builds now.
2025-08-11 22:28:31 +03:00
ivan tkachenko
4abd0fb612
Fix stale event handlers causing errors in console
2025-08-11 22:28:30 +03:00
ivan tkachenko
dd3c9647e3
Bump version
2025-08-11 22:28:29 +03:00
ivan tkachenko
0dca416958
Rewrite track choosing event to custom netcode
2025-08-07 20:27:57 +03:00
ivan tkachenko
1aa8c1ddfa
Fix Disco Ball hanging around after being disabled
2025-08-07 20:27:57 +03:00
ivan tkachenko
75d0ee2c1d
Bump version
2025-08-07 20:27:57 +03:00
ivan tkachenko
1ffdd5d97e
Add spawn rate patch to make the event more likely
2025-08-05 05:10:21 +03:00
ivan tkachenko
05749ff122
Add Animator and Audio to MineshaftStartTile
2025-08-03 00:31:07 +03:00
ivan tkachenko
f131ad7148
Fix NarrowHallwayTile2x2 mineshaft lights flickering
2025-08-03 00:31:07 +03:00
ivan tkachenko
f50989b5ae
Refactor: Optimize DiscoBallManager to create and cache at start of round
2025-08-03 00:31:06 +03:00
ivan tkachenko
72adb9e713
Refactor: Fix up visibility and static modifiers, and other minor things
2025-08-02 16:25:45 +03:00
ivan tkachenko
76e9ca3595
Refactor: Make State an internal class of JesterPatch class
2025-08-02 16:12:44 +03:00
ivan tkachenko
b6f2ca355b
Refactor: Factor out displaying lyrics as a tip in its own method
2025-08-02 15:54:07 +03:00
ivan tkachenko
78370da460
Fix LEDHangingLight (GarageTile & PoolTile) lights flickering
2025-08-02 15:50:59 +03:00
ivan tkachenko
4d84a2d001
Fix multiple Light components per animator
...
Add them all to the allPoweredLights list,
not just the whatever first one was found.
2025-08-02 15:50:59 +03:00
ivan tkachenko
0eb02698eb
Fix KitchenTile lights flickering
2025-08-02 01:04:12 +03:00
ivan tkachenko
c7b67b9042
Update manifest, README and project files
2025-08-02 01:04:11 +03:00
ivan tkachenko
f53f837e3f
Bundle CHANGELOG.md
2025-08-01 23:10:36 +03:00
ivan tkachenko
86644388f3
Bump version
2025-08-01 23:10:35 +03:00
ivan tkachenko
9062f386de
Fix/add light flickering with animator controllers
2025-08-01 16:48:16 +03:00
ivan tkachenko
3a2eaad493
Add more light flickering to the track Kach
2025-08-01 02:55:27 +03:00
ivan tkachenko
b70e868ac4
Rename DiscoBall asset bundle
...
There is going to be another bundle, so we want some distinctive names.
2025-07-31 21:44:52 +03:00
ivan tkachenko
bacb9f07c7
Use StartOfRound.Instance.audioListener for lyrics events
...
Probably doesn't make a difference, but it's nice to be able to
calculate audio source<->listener distance directly.
2025-07-30 20:09:17 +03:00
ivan tkachenko
2a28a36a69
Config: Remove EnableColorAnimations toggle
...
Turns out, it doesn't really affect anything. AMD on Linux would lag anyway.
2025-07-30 18:56:34 +03:00
ivan tkachenko
841ccc74ed
Fix color transition from a negative beat
2025-07-30 18:56:33 +03:00
ivan tkachenko
8729515537
Fix timings of fade out and lyrics for DeployDestroy
2025-07-30 18:56:33 +03:00
ivan tkachenko
991e2a56b7
Fix color right before wrapping
...
The buggy Split method was erroneously creating a looping span despite
explicitly passing `isLooping: false` parameter because with
`beatToInclusive: LoopBeats` wrapping will occur regardless. This
messed up with Duration calculations, and eventually caused the last
beat default to transition with t=0, when it should really be static.
2025-07-30 18:56:33 +03:00
ivan tkachenko
c689198588
Fix fading out: set pure black at the end
2025-07-30 18:56:33 +03:00
ivan tkachenko
667368d719
Add specialized color transition event to improve debug output
2025-07-30 18:37:59 +03:00
ivan tkachenko
6a0be0d780
Enable nullable reference types
2025-07-30 18:37:58 +03:00
ivan tkachenko
0573091162
Auto formatting
2025-07-30 18:37:58 +03:00
ivan tkachenko
2ef0fc3bd9
Fix up all logs to use nameof() instead of hardcoded string
2025-07-30 18:37:58 +03:00
ivan tkachenko
ce437aa86c
Events: Mark BaseEvent as abstract
...
It's not useful on its own
2025-07-30 18:37:57 +03:00
ivan tkachenko
7ed299ead8
Fix AudioSource distance check for lyrics event
...
It was checking maxDistance of a non-overridden loop clip during windup.
2025-07-30 18:37:56 +03:00
ivan tkachenko
f959a4ebb2
Setup LobbyCompatibility as a dependency
...
This should help to avoid desync issues.
2025-07-30 01:29:07 +03:00
ivan tkachenko
7a5013524d
Prevent Publicizer Warnings from Showing
2025-07-30 00:08:08 +03:00
ivan tkachenko
14a57fcae7
Mark referenced packages with Private attributes
...
Apparently, this is considered a good practice. Although Private="false"
is supposed to not copy the dependency into the output directory, which
didn't happen anyway?
2025-07-30 00:08:08 +03:00
ivan tkachenko
47876b18bf
Fix up csproj XML formatting
2025-07-29 23:45:20 +03:00
ivan tkachenko
5abad0b1ba
Bump version
2025-07-29 23:45:19 +03:00
ivan tkachenko
45a73793fb
Add support for pre-v70 Mansion Main tile.
2025-07-21 19:07:36 +03:00
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
dda00ce228
Bump version
2025-07-21 19:07:35 +03:00
ivan tkachenko
d6a2bf21b1
Bump version
2025-07-21 01:13:40 +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