public virtual string WarningMessage(Creature c)
    {
        PenaltySet p = new PenaltySet(this, c);
        if (p.TotalPenalty() < PenaltyWarningThreshold)
            return "";
        switch(p.LimitingStat())
        {
            case PenaltySet.Stat.Str:
                return "Low STR";
            case PenaltySet.Stat.Dex:
                return "Low DEX";
            case PenaltySet.Stat.Aff:
                return "Low AFF";
        }

        Utils.Log("Error in PrimaryWeapon: Warning Message");
        return "";
    }
 public int Accuracy(Creature c)
 {
     PenaltySet p = new PenaltySet(this, c);
     return Math.Max(1, 99 - p.TotalPenalty());
 }