metamagic and target type use uint.MaxValue instead of -1 to mean invalid