Quick answer: Set Pin Mode to Position & angle (with offset). The default “Position only” mode captures world-space offsets that don’t rotate with the parent.
You pin a sword sprite to the player’s hand. The player rotates to face left. The sword stays oriented to the right and floats next to the player’s old facing direction. The pin maintains the offset but ignores rotation.
Pin Behavior Modes
The Pin behavior’s Pin To action takes a Mode parameter:
- Position only — pinned sprite follows world-space dx/dy. Rotation of the parent has no effect on the pinned sprite’s position or angle.
- Angle only — pinned sprite matches the parent’s angle but stays at its own position.
- Position & angle — pinned sprite follows position and angle, but offset is captured in world space.
- Position & angle (with offset) — pinned sprite follows position and angle, and the offset rotates with the parent.
- Rope style — pinned sprite is “attached” via the closest point at pin time; useful for trailing tails.
For a sword or other accessory attached to a body part, you want Position & angle (with offset).
The Fix
// Event sheet, on weapon spawn
Sword.Pin.PinTo(Player, "Position & angle (with offset)")
The sword’s offset and angle are captured relative to the player’s rotation frame. When the player rotates, the offset and the sword’s angle both follow.
Why “Position only” Is Still Useful
Position only is the right choice for HUD elements pinned to a moving object — the HUD should follow its target but never rotate. A health bar above an enemy uses Position only so it always faces up regardless of how the enemy is rotated.
The rule of thumb: if the pinned sprite should look like part of the parent’s body, use offset rotation. If it should be a screen-aligned overlay, use Position only.
Re-Pinning After Teleport
If the pinned sprite or its parent teleports to a new location, the captured offset is now wrong. The pin will still attempt to maintain the old offset, which results in the pinned sprite snapping back to where it “should” be.
Unpin and re-pin:
// On teleport
Sword.Pin.Unpin()
Sword.SetPosition(Player.X + 12, Player.Y)
Sword.Pin.PinTo(Player, "Position & angle (with offset)")
The new pin captures the new offset cleanly.
Multiple Pinned Children
You can pin many sprites to the same parent. Each child captures its own offset independently. A character with sword, shield, and hat can have all three pinned with appropriate offsets, each following rotation correctly.
When the parent destroys, pinned children become unpinned automatically — but they don’t destroy. If you want them to die with the parent, listen for “On destroyed” on the parent and destroy each child.
Verifying
Rotate the parent 90 degrees at runtime. The pinned sprite should orbit around the parent and rotate by 90 degrees as well. If it stays in its original world position but the parent rotates around it, you’re using Position only. If it rotates around the parent but maintains its world-space angle, you’re using Position & angle without offset.
“Pin mode matters. Position only for HUDs, ‘with offset’ for attached body parts. Pick deliberately.”
Mirror also affects pinned sprites: a pinned sword on a player will mirror with the player by default. Combine with the asymmetric-hitbox advice from the mirror post.