In writing this and creating a demonstration I figured out how to solve it:
On start, set pos to:
Self.X * (LayerParallaxX(Self.LayerName) / 100) + (OriginalWindowWidth/2) * (1-LayerParallaxX(Self.LayerName) / 100)
Self.Y * (LayerParallaxY(Self.LayerName) / 100) + (OriginalWindowHeight/2) * (1-LayerParallaxY(Self.LayerName) / 100)
You can just set the paralax in the editor, and place the objects on the layers.
I've been searching for a solution to this for hours, so I'm going to leave this here for anyone who searches for it in future.
Here's a capx with the solution:
https://drive.google.com/file/d/1iOv4QzyftMgIXO-TJhbnKBWEJs23Ji0K/view?usp=sharing
Here's the original problem:
So, I have a serious problem and I'm considering just giving up and ignoring it.
I am going to have a pretty large map in my game, with paralax layers. Those paralax layers each have objects on them that, when scrolled to, should all be in exactly the same position as if they had 100% paralax like the rest of the game world. Picture a stack of boxes and a fake 3d effect. Those stacks should only be skewed relative to the stack, not relative to 0,0.
So, I figured I had no choice but to place objects where they are meant to be (in the editor) and then move them relative to how much paralax the layer has once I start the layout.
At first I thought I could just multiply by the paralax (e.g. 0.9 for 90% paralax) but that didn't work. I then found CanvasToLayer, and since I'm converting from a canvas position already surely I didn't need to convert to canvas first right? Well neither worked. In fact, the latter does nothing at all. [...]