Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I can only assume the real issue is JIT in Unity 2021 being very agressive with optimizations for dynamically generated methods (hooks in our case) when accessing static readonly arrays.
From debugging and logging it seems to me that a hook refers to a specific object ptr instead of a field. Adding new color creates new array and the hook still using old array which eventually gets deallocated and the hook returns random data.
Only making a hook, works fine. Only adding new colors to an array works fine. But doing both results in wrong results. A happy accident that it doesn't cause a crash, just because these methods don't use actual array length and instead uses enum value.
Probably propper solution would be making a patcher that would remove readonly modificator from these fields to ensure there is no more JIT shenanigans, but for this case it should be fine the way I did it.