SpriteOffset is the center of mass for any MOSprite (dynamic non-MOPixel objects)
It is offset from the top left corner of the image, and from there, right and down are negative.
JointOffset is where the hand for the trigger goes. It is offset from the SpriteOffset (center of mass). Right and down are positive, left and up are negative.
SupportOffset is where the other hand goes. It is also offset from the SpriteOffset (center of mass). Right and down are positive, left and up are negative.
MuzzleOffset is where the bullet appears; the pixel to the right of the end of the barrel. It is offset from the SpriteOffset (center of mass). Right and down are positive, left and up are negative.
EjectionOffset is where the casing is ejected. It is offset from the SpriteOffset (center of mass). Right and down are positive, left and up are negative.
JointOffset is where the hand for the trigger goes. It is offset from the SpriteOffset (center of mass). Right and down are positive, left and up are negative.
StanceOffset is the offset from the arm's shoulder joint to the position you want the JointOffset of the gun (trigger hand) to be. Right and down are positive, left and up are negative.
SharpStanceOffset is just like StanceOffset, but for sharp aiming.
On the magazine, SpriteOffset is just like on the gun.
On the magazine, JointOffset is the offset from the center of mass of the magazine to the connection point of the magazine and gun. Right and down are positive, left and up are negative.
On the magazine, ParentOffset is the offset from the center of mass of the gun to the connection point of the magazine and gun. Right and down are positive, left and up are negative.
A good way to see the offsets of your guns is to comment out its current gibs, and then place MOPixel gibs that have the GibOffset of the offset you want to test. Then, open the gib editor, zoom in, and you'll see the position of your offsets. For testing the SpriteOffset, just make the gib offset 0,0. This does not work for stance offsets though, since those are offset from the actor.
But there's another good way to test that; best done after all other offsets are perfected.
Code:
AddActor = AHuman
CopyOf = Soldier Light
PresetName = TestSoldier
AddInventory = HDFirearm
CopyOf = [the gun]
Put that at the end of the .ini for the gun, then you can reload the actor and gun with the actor viewer, and see the effects of your changes immediately.