You could probably do this with just a variable for each object affected and use custom movements
eg: (semi-pseudocode)
Set .X to .X + ((sin(PlayerAngle) * MovementOffset) * timedelta) * CustomTimeVariable
Set .Y to .Y + ((cos(PlayerAngle) * MovementOffset) * timedelta) * CustomTimeVariable
..or something like that, I haven't actually coded in a long time
CustomTimeVariable would obviously be a value similar to timescale, 1 would be normal speed, 0.5 would be half speed, 2 is double etc
However this is all theoretical and I've never tried it, but if I did, that is where I would start
Or if that doesn't work, maybe:
Set .X to .X + (sin(PlayerAngle) * (MovementOffset * CustomTimeVariable)) * timedelta
That might work better, but I'm actually really crap at maths so I could be wrong with all those brackets :S
The point is, use a custom variable instead of timescale and see the results
Anyway good luck