Weapon object refactor

Untested but should work.