Hey @WrongPixel.
Are you still working on Portvalley ? Its been a long time since last update. Would be a pity if you gave up on this project , it was so promising...
Anyway, Hope you're doing fine.
Thanks for this long and lovely comment. =)
For the color changing in all levels, it's very simple. Every "sprite" is made of one or multiple polygon2D nodes. I have a global script which contains a palette array, so that each polygon2D sets its color when it's instanciated.
For the ground and ceiling spikes, they're also polygon2D to which i added a script. When the ground/ceiling is instanciated, the script adds a rigidbody2D node as a child and a polygonShape2D (a simply copy of the polygon2D coordinates). The advantage is that i'm able to directly modify the shape of the background and then the collision shape is auto generated.