create generic launcher and abstract Weapon