int GameCritterObject::skillBaseValue(unsigned int skill) { if (skill >= _skillsTagged.size()) throw Exception("GameCritterObject::skillBaseValue(num) - num out of range:" + std::to_string(skill)); int value = 0; switch(skill) { case SKILLS_SMALL_GUNS: value += 5 + 4 * statTotal(STATS_AGILITY); if (traitTagged(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_BIG_GUNS: value += 2*statTotal(STATS_AGILITY); if (traitTagged(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_ENERGY_WEAPONS: value += 2*statTotal(STATS_AGILITY); if (traitTagged(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_UNARMED: value += 30 + 2*(statTotal(STATS_AGILITY) + statTotal(STATS_STRENGTH)); if (traitTagged(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_MELEE_WEAPONS: value += 20 + 2*(statTotal(STATS_AGILITY) + statTotal(STATS_STRENGTH)); if (traitTagged(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_THROWING: value += 4*statTotal(STATS_AGILITY); if (traitTagged(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_FIRST_AID: value += 20 + 2*(statTotal(STATS_PERCEPTION) + statTotal(STATS_INTELLIGENCE)); if (traitTagged(TRAITS_GOOD_NATURED)) value += 15; break; case SKILLS_DOCTOR: value += 20 + 5 + (statTotal(STATS_PERCEPTION) + statTotal(STATS_INTELLIGENCE)); if (traitTagged(TRAITS_GOOD_NATURED)) value += 15; break; case SKILLS_SNEAK: value += 20 + 5 + 3*statTotal(STATS_AGILITY); break; case SKILLS_LOCKPICK: value += 20 + 10 + (statTotal(STATS_PERCEPTION) + statTotal(STATS_AGILITY)); break; case SKILLS_STEAL: value += 20 + 3*statTotal(STATS_AGILITY); break; case SKILLS_TRAPS: value += 20 + 10 + (statTotal(STATS_PERCEPTION) + statTotal(STATS_AGILITY)); break; case SKILLS_SCIENCE: value += 20 + 4*statTotal(STATS_INTELLIGENCE); break; case SKILLS_REPAIR: value += 20 + 3*statTotal(STATS_INTELLIGENCE); break; case SKILLS_SPEECH: value += 20 + 5*statTotal(STATS_CHARISMA); if (traitTagged(TRAITS_GOOD_NATURED)) value += 15; break; case SKILLS_BARTER: value += 20 + 4*statTotal(STATS_CHARISMA); if (traitTagged(TRAITS_GOOD_NATURED)) value += 15; break; case SKILLS_GAMBLING: value += 20 + 5*statTotal(STATS_LUCK); break; case SKILLS_OUTDOORSMAN: value += 20 + 2*(statTotal(STATS_ENDURANCE) + statTotal(STATS_INTELLIGENCE)); break; } if (traitTagged(TRAITS_GIFTED)) { value -= 10; } if (skillTagged(skill)) { value += 20; } return value; }
int CritterObject::skillBaseValue(SKILL skill) const { if (skill > SKILL::OUTDOORSMAN) throw Exception("CritterObject::skillBaseValue(num) - num out of range:" + std::to_string((unsigned)skill)); int value = 0; switch(skill) { case SKILL::SMALL_GUNS: value += 5 + 4 * statTotal(STAT::AGILITY); if (traitTagged(TRAIT::GOOD_NATURED)) value -= 10; break; case SKILL::BIG_GUNS: value += 2*statTotal(STAT::AGILITY); if (traitTagged(TRAIT::GOOD_NATURED)) value -= 10; break; case SKILL::ENERGY_WEAPONS: value += 2*statTotal(STAT::AGILITY); if (traitTagged(TRAIT::GOOD_NATURED)) value -= 10; break; case SKILL::UNARMED: value += 30 + 2*(statTotal(STAT::AGILITY) + statTotal(STAT::STRENGTH)); if (traitTagged(TRAIT::GOOD_NATURED)) value -= 10; break; case SKILL::MELEE_WEAPONS: value += 20 + 2*(statTotal(STAT::AGILITY) + statTotal(STAT::STRENGTH)); if (traitTagged(TRAIT::GOOD_NATURED)) value -= 10; break; case SKILL::THROWING: value += 4*statTotal(STAT::AGILITY); if (traitTagged(TRAIT::GOOD_NATURED)) value -= 10; break; case SKILL::FIRST_AID: value += 20 + 2*(statTotal(STAT::PERCEPTION) + statTotal(STAT::INTELLIGENCE)); if (traitTagged(TRAIT::GOOD_NATURED)) value += 15; break; case SKILL::DOCTOR: value += 20 + 5 + (statTotal(STAT::PERCEPTION) + statTotal(STAT::INTELLIGENCE)); if (traitTagged(TRAIT::GOOD_NATURED)) value += 15; break; case SKILL::SNEAK: value += 20 + 5 + 3*statTotal(STAT::AGILITY); break; case SKILL::LOCKPICK: value += 20 + 10 + (statTotal(STAT::PERCEPTION) + statTotal(STAT::AGILITY)); break; case SKILL::STEAL: value += 20 + 3*statTotal(STAT::AGILITY); break; case SKILL::TRAPS: value += 20 + 10 + (statTotal(STAT::PERCEPTION) + statTotal(STAT::AGILITY)); break; case SKILL::SCIENCE: value += 20 + 4*statTotal(STAT::INTELLIGENCE); break; case SKILL::REPAIR: value += 20 + 3*statTotal(STAT::INTELLIGENCE); break; case SKILL::SPEECH: value += 20 + 5*statTotal(STAT::CHARISMA); if (traitTagged(TRAIT::GOOD_NATURED)) value += 15; break; case SKILL::BARTER: value += 20 + 4*statTotal(STAT::CHARISMA); if (traitTagged(TRAIT::GOOD_NATURED)) value += 15; break; case SKILL::GAMBLING: value += 20 + 5*statTotal(STAT::LUCK); break; case SKILL::OUTDOORSMAN: value += 20 + 2*(statTotal(STAT::ENDURANCE) + statTotal(STAT::INTELLIGENCE)); break; default: break; } if (traitTagged(TRAIT::GIFTED)) { value -= 10; } if (skillTagged(skill)) { value += 20; } return value; }