Is this not where the problem lies:
move_XOffset = (int)shot_XOffset;
move_YOffset = (int)shot_YOffset;
By casting the shot offsets to Integer, are you losing all the decimal precision you just calculated and rounding everything down to zero?
What are the data-types of each of your variables?
Stitchs.