Refactors most constants out of Abilities.h.

This commit is contained in:
2023-04-25 12:21:45 -07:00
parent 79541c8f84
commit 6b1efb0f0f
5 changed files with 194 additions and 169 deletions

View File

@@ -8,6 +8,111 @@ using std::ostream;
using std::string; using std::string;
using std::vector; using std::vector;
const int kAbilitiesCount = 3;
const std::string kAbilityUnknownLabel = "";
const std::string kAbilityTalentsSingular = "Talent";
const std::string kAbilityTalentsPlural = "Talents";
const std::string kAbilitySkillsSingular = "Skill";
const std::string kAbilitySkillsPlural = "Skills";
const std::string kAbilityKnowledgesSingular = "Knowledge";
const std::string kAbilityKnowledgesPlural = "Knowledges";
const AbilityType kAbilityGroupUnknown = {0, "", ""};
const AbilityType kAbilityGroupTalents = {
kAbilityTalentsId,
kAbilityTalentsSingular,
kAbilityTalentsPlural,
};
const AbilityType kAbilityGroupSkills = {
kAbilitySkillsId,
kAbilitySkillsSingular,
kAbilitySkillsPlural,
};
const AbilityType kAbilityGroupKnowledges = {
kAbilityKnowledgesId,
kAbilityKnowledgesSingular,
kAbilityKnowledgesPlural,
};
const AbilityType kAbilities[]{
kAbilityGroupUnknown,
kAbilityGroupTalents,
kAbilityGroupSkills,
kAbilityGroupKnowledges,
};
const std::string kTalentActingLabel = "Acting";
const std::string kTalentAlertnessLabel = "Alertness";
const std::string kTalentAthleticsLabel = "Athletics";
const std::string kTalentBrawlLabel = "Brawl";
const std::string kTalentDodgeLabel = "Dodge";
const std::string kTalentEmpathyLabel = "Empathy";
const std::string kTalentIntimidationLabel = "Intimidation";
const std::string kTalentLeadershipLabel = "Leadership";
const std::string kTalentStreetwiseLabel = "Streetwise";
const std::string kTalentSubterfugeLabel = "Subterfuge";
const std::string kSkillAnimalKenLabel = "Animal Ken";
const std::string kSkillDriveLabel = "Drive";
const std::string kSkillEtiquetteLabel = "Etiquette";
const std::string kSkillFirearmsLabel = "Firearms";
const std::string kSkillMeleeLabel = "Melee";
const std::string kSkillMusicLabel = "Music";
const std::string kSkillRepairLabel = "Repair";
const std::string kSkillSecurityLabel = "Security";
const std::string kSkillStealthLabel = "Stealth";
const std::string kSkillSurvivalLabel = "Survival";
const std::string kKnowledgeBureaucracyLabel = "Bureaucracy";
const std::string kKnowledgeComputerLabel = "Computer";
const std::string kKnowledgeFinanceLabel = "Finance";
const std::string kKnowledgeInvestigationLabel = "Investigation";
const std::string kKnowledgeLawLabel = "Law";
const std::string kKnowledgeLinguisticsLabel = "Linguistics";
const std::string kKnowledgeMedicineLabel = "Medicine";
const std::string kKnowledgeOccultLabel = "Occult";
const std::string kKnowledgePoliticsLabel = "Politics";
const std::string kKnowledgeScienceLabel = "Science";
const int kTalentsCount = 10;
const int kSkillsCount = 10;
const int kKnowledgesCount = 10;
const std::string kSkills[] = {
kAbilityUnknownLabel,
kSkillAnimalKenLabel,
kSkillDriveLabel,
kSkillEtiquetteLabel,
kSkillFirearmsLabel,
kSkillMeleeLabel,
kSkillMusicLabel,
kSkillRepairLabel,
kSkillSecurityLabel,
kSkillStealthLabel,
kSkillSurvivalLabel,
};
const std::string kTalents[] = {
kAbilityUnknownLabel,
kTalentActingLabel,
kTalentAlertnessLabel,
kTalentAthleticsLabel,
kTalentBrawlLabel,
kTalentDodgeLabel,
kTalentEmpathyLabel,
kTalentIntimidationLabel,
kTalentLeadershipLabel,
kTalentStreetwiseLabel,
kTalentSubterfugeLabel,
};
const std::string kKnowledges[] = {
kAbilityUnknownLabel,
kKnowledgeBureaucracyLabel,
kKnowledgeComputerLabel,
kKnowledgeFinanceLabel,
kKnowledgeInvestigationLabel,
kKnowledgeLawLabel,
kKnowledgeLinguisticsLabel,
kKnowledgeMedicineLabel,
kKnowledgeOccultLabel,
kKnowledgePoliticsLabel,
kKnowledgeScienceLabel,
};
ostream& operator<<(ostream& os, const AbilityType& ability) { ostream& operator<<(ostream& os, const AbilityType& ability) {
os << "AbilityGroup: {id: " << ability.id << ", singular: \"" << ability.singular << "\", plural: \"" os << "AbilityGroup: {id: " << ability.id << ", singular: \"" << ability.singular << "\", plural: \""
<< ability.plural << "\"}"; << ability.plural << "\"}";
@@ -168,4 +273,7 @@ const std::string GetTalentLabel(int talent_id) {
return ""; return "";
} }
int GetNumAbilityGroups() {
return kAbilitiesCount;
}
} // End namespace SBF } // End namespace SBF

View File

@@ -17,15 +17,41 @@
*/ */
namespace SBF { namespace SBF {
const int kAbilityTalentsId = 1; const int kAbilityTalentsId = 1;
const std::string kAbilityTalentsSingular = "Talent";
const std::string kAbilityTalentsPlural = "Talents";
const int kAbilitySkillsId = 2; const int kAbilitySkillsId = 2;
const std::string kAbilitySkillsSingular = "Skill";
const std::string kAbilitySkillsPlural = "Skills";
const int kAbilityKnowledgesId = 3; const int kAbilityKnowledgesId = 3;
const std::string kAbilityKnowledgesSingular = "Knowledge";
const std::string kAbilityKnowledgesPlural = "Knowledges"; const int kTalentActingId = 1;
const int kAbilitiesCount = 3; const int kTalentAlertnessId = 2;
const int kTalentAthleticsId = 3;
const int kTalentBrawlId = 4;
const int kTalentDodgeId = 5;
const int kTalentEmpathyId = 6;
const int kTalentIntimidationId = 7;
const int kTalentLeadershipId = 8;
const int kTalentStreetwiseId = 9;
const int kTalentSubterfugeId = 10;
const int kSkillAnimalKenId = 1;
const int kSkillDriveId = 2;
const int kSkillEtiquetteId = 3;
const int kSkillFirearmsId = 4;
const int kSkillMeleeId = 5;
const int kSkillMusicId = 6;
const int kSkillRepairId = 7;
const int kSkillSecurityId = 8;
const int kSkillStealthId = 9;
const int kSkillSurvivalId = 10;
const int kKnowledgeBureaucracyId = 1;
const int kKnowledgeComputerId = 2;
const int kKnowledgeFinanceId = 3;
const int kKnowledgeInvestigationId = 4;
const int kKnowledgeLawId = 5;
const int kKnowledgeLinguisticsId = 6;
const int kKnowledgeMedicineId = 7;
const int kKnowledgeOccultId = 8;
const int kKnowledgePoliticsId = 9;
const int kKnowledgeScienceId = 10;
/// @brief This type represents an ability group such as Talents, Skills or Knowledges. /// @brief This type represents an ability group such as Talents, Skills or Knowledges.
struct AbilityType { struct AbilityType {
@@ -37,136 +63,6 @@ struct AbilityType {
std::string plural; std::string plural;
}; };
const AbilityType kAbilityGroupUnknown = {0, "", ""};
const AbilityType kAbilityGroupTalents = {
kAbilityTalentsId,
kAbilityTalentsSingular,
kAbilityTalentsPlural,
};
const AbilityType kAbilityGroupSkills = {
kAbilitySkillsId,
kAbilitySkillsSingular,
kAbilitySkillsPlural,
};
const AbilityType kAbilityGroupKnowledges = {
kAbilityKnowledgesId,
kAbilityKnowledgesSingular,
kAbilityKnowledgesPlural,
};
const AbilityType kAbilities[]{
kAbilityGroupUnknown,
kAbilityGroupTalents,
kAbilityGroupSkills,
kAbilityGroupKnowledges,
};
const std::string kAbilityUnknownLabel = "";
const int kTalentActingId = 1;
const std::string kTalentActingLabel = "Acting";
const int kTalentAlertnessId = 2;
const std::string kTalentAlertnessLabel = "Alertness";
const int kTalentAthleticsId = 3;
const std::string kTalentAthleticsLabel = "Athletics";
const int kTalentBrawlId = 4;
const std::string kTalentBrawlLabel = "Brawl";
const int kTalentDodgeId = 5;
const std::string kTalentDodgeLabel = "Dodge";
const int kTalentEmpathyId = 6;
const std::string kTalentEmpathyLabel = "Empathy";
const int kTalentIntimidationId = 7;
const std::string kTalentIntimidationLabel = "Intimidation";
const int kTalentLeadershipId = 8;
const std::string kTalentLeadershipLabel = "Leadership";
const int kTalentStreetwiseId = 9;
const std::string kTalentStreetwiseLabel = "Streetwise";
const int kTalentSubterfugeId = 10;
const std::string kTalentSubterfugeLabel = "Subterfuge";
const int kTalentsCount = 10;
const std::string kTalents[] = {
kAbilityUnknownLabel,
kTalentActingLabel,
kTalentAlertnessLabel,
kTalentAthleticsLabel,
kTalentBrawlLabel,
kTalentDodgeLabel,
kTalentEmpathyLabel,
kTalentIntimidationLabel,
kTalentLeadershipLabel,
kTalentStreetwiseLabel,
kTalentSubterfugeLabel,
};
const int kSkillAnimalKenId = 1;
const std::string kSkillAnimalKenLabel = "Animal Ken";
const int kSkillDriveId = 2;
const std::string kSkillDriveLabel = "Drive";
const int kSkillEtiquetteId = 3;
const std::string kSkillEtiquetteLabel = "Etiquette";
const int kSkillFirearmsId = 4;
const std::string kSkillFirearmsLabel = "Firearms";
const int kSkillMeleeId = 5;
const std::string kSkillMeleeLabel = "Melee";
const int kSkillMusicId = 6;
const std::string kSkillMusicLabel = "Music";
const int kSkillRepairId = 7;
const std::string kSkillRepairLabel = "Repair";
const int kSkillSecurityId = 8;
const std::string kSkillSecurityLabel = "Security";
const int kSkillStealthId = 9;
const std::string kSkillStealthLabel = "Stealth";
const int kSkillSurvivalId = 10;
const std::string kSkillSurvivalLabel = "Survival";
const int kSkillsCount = 10;
const std::string kSkills[] = {
kAbilityUnknownLabel,
kSkillAnimalKenLabel,
kSkillDriveLabel,
kSkillEtiquetteLabel,
kSkillFirearmsLabel,
kSkillMeleeLabel,
kSkillMusicLabel,
kSkillRepairLabel,
kSkillSecurityLabel,
kSkillStealthLabel,
kSkillSurvivalLabel,
};
const int kKnowledgeBureaucracyId = 1;
const std::string kKnowledgeBureaucracyLabel = "Bureaucracy";
const int kKnowledgeComputerId = 2;
const std::string kKnowledgeComputerLabel = "Computer";
const int kKnowledgeFinanceId = 3;
const std::string kKnowledgeFinanceLabel = "Finance";
const int kKnowledgeInvestigationId = 4;
const std::string kKnowledgeInvestigationLabel = "Investigation";
const int kKnowledgeLawId = 5;
const std::string kKnowledgeLawLabel = "Law";
const int kKnowledgeLinguisticsId = 6;
const std::string kKnowledgeLinguisticsLabel = "Linguistics";
const int kKnowledgeMedicineId = 7;
const std::string kKnowledgeMedicineLabel = "Medicine";
const int kKnowledgeOccultId = 8;
const std::string kKnowledgeOccultLabel = "Occult";
const int kKnowledgePoliticsId = 9;
const std::string kKnowledgePoliticsLabel = "Politics";
const int kKnowledgeScienceId = 10;
const std::string kKnowledgeScienceLabel = "Science";
const int kKnowledgesCount = 10;
const std::string kKnowledges[] = {
kAbilityUnknownLabel,
kKnowledgeBureaucracyLabel,
kKnowledgeComputerLabel,
kKnowledgeFinanceLabel,
kKnowledgeInvestigationLabel,
kKnowledgeLawLabel,
kKnowledgeLinguisticsLabel,
kKnowledgeMedicineLabel,
kKnowledgeOccultLabel,
kKnowledgePoliticsLabel,
kKnowledgeScienceLabel,
};
/// @brief This function writes an AbilityType value to an output stream; /// @brief This function writes an AbilityType value to an output stream;
/// @param os The output stream to write to. /// @param os The output stream to write to.
/// @param group The AbilityType to write. /// @param group The AbilityType to write.
@@ -248,6 +144,8 @@ const std::string GetSkillLabel(int id);
/// @param id The id of the ability to return. /// @param id The id of the ability to return.
/// @return The label for the specific ability. /// @return The label for the specific ability.
const std::string GetTalentLabel(int id); const std::string GetTalentLabel(int id);
int GetNumAbilityGroups();
} // End namespace SBF } // End namespace SBF
/** @}*/ /** @}*/

View File

@@ -22,54 +22,60 @@ TestResults test_AbilityType_operator_extract() {
vector<TestTuple<string, AbilityType>>({ vector<TestTuple<string, AbilityType>>({
make_test<string, AbilityType>("should print talents", make_test<string, AbilityType>("should print talents",
"AbilityGroup: {id: 1, singular: \"Talent\", plural: \"Talents\"}", "AbilityGroup: {id: 1, singular: \"Talent\", plural: \"Talents\"}",
make_tuple(kAbilityGroupTalents)), make_tuple(GetAbility(kAbilityTalentsId))),
make_test<string, AbilityType>("should print skills", make_test<string, AbilityType>("should print skills",
"AbilityGroup: {id: 2, singular: \"Skill\", plural: \"Skills\"}", "AbilityGroup: {id: 2, singular: \"Skill\", plural: \"Skills\"}",
make_tuple(kAbilityGroupSkills)), make_tuple(GetAbility(kAbilitySkillsId))),
make_test<string, AbilityType>("should print knowledges", make_test<string, AbilityType>("should print knowledges",
"AbilityGroup: {id: 3, singular: \"Knowledge\", plural: \"Knowledges\"}", "AbilityGroup: {id: 3, singular: \"Knowledge\", plural: \"Knowledges\"}",
make_tuple(kAbilityGroupKnowledges)), make_tuple(GetAbility(kAbilityKnowledgesId))),
make_test<string, AbilityType>("should print an unknown ability group", make_test<string, AbilityType>("should print an unknown ability group",
"AbilityGroup: {id: 0, singular: \"\", plural: \"\"}", "AbilityGroup: {id: 0, singular: \"\", plural: \"\"}",
make_tuple(kAbilityGroupUnknown)), make_tuple(GetAbility(0))),
}))); })));
} }
TestResults test_AbilityType_operator_equal_to() { TestResults test_AbilityType_operator_equal_to() {
AbilityType skills = GetAbility(kAbilitySkillsId);
return execute_suite<bool, AbilityType, AbilityType>(make_test_suite( return execute_suite<bool, AbilityType, AbilityType>(make_test_suite(
"SBF::AbilityType::operator==", "SBF::AbilityType::operator==",
[](const AbilityType& left, const AbilityType& right) { return left == right; }, [](const AbilityType& left, const AbilityType& right) { return left == right; },
vector<TestTuple<bool, AbilityType, AbilityType>>({ vector<TestTuple<bool, AbilityType, AbilityType>>({
make_test<bool, AbilityType, AbilityType>("should return true when comparing an ability group to itself", make_test<bool, AbilityType, AbilityType>(
true, "should return true when comparing an ability group to itself",
make_tuple(kAbilityGroupTalents, kAbilityGroupTalents)), true,
make_tuple(GetAbility(kAbilityTalentsId), GetAbility(kAbilityTalentsId))),
make_test<bool, AbilityType, AbilityType>( make_test<bool, AbilityType, AbilityType>(
"should return true when comparing two different instances created with the same values", "should return true when comparing two different instances created with the same values",
true, true,
make_tuple(kAbilityGroupSkills, make_tuple(GetAbility(kAbilitySkillsId),
AbilityType({kAbilitySkillsId, kAbilitySkillsSingular, kAbilitySkillsPlural}))), AbilityType({kAbilitySkillsId, skills.singular, skills.plural}))),
make_test<bool, AbilityType, AbilityType>("should return false when comparing two different ability gropus", make_test<bool, AbilityType, AbilityType>(
false, "should return false when comparing two different ability gropus",
make_tuple(kAbilityGroupKnowledges, kAbilityGroupSkills)), false,
make_tuple(GetAbility(kAbilityKnowledgesId), GetAbility(kAbilitySkillsId))),
}))); })));
} }
TestResults test_AbilityType_operator_not_equal_to() { TestResults test_AbilityType_operator_not_equal_to() {
AbilityType skills = GetAbility(kAbilitySkillsId);
return execute_suite<bool, AbilityType, AbilityType>(make_test_suite( return execute_suite<bool, AbilityType, AbilityType>(make_test_suite(
"SBF::AbilityType::operator!=", "SBF::AbilityType::operator!=",
[](const AbilityType& left, const AbilityType& right) { return left != right; }, [](const AbilityType& left, const AbilityType& right) { return left != right; },
vector<TestTuple<bool, AbilityType, AbilityType>>({ vector<TestTuple<bool, AbilityType, AbilityType>>({
make_test<bool, AbilityType, AbilityType>("should return false when comparing an ability group to itself", make_test<bool, AbilityType, AbilityType>(
false, "should return false when comparing an ability group to itself",
make_tuple(kAbilityGroupTalents, kAbilityGroupTalents)), false,
make_tuple(GetAbility(kAbilityTalentsId), GetAbility(kAbilityTalentsId))),
make_test<bool, AbilityType, AbilityType>( make_test<bool, AbilityType, AbilityType>(
"should return false when comparing two different instances created with the same values", "should return false when comparing two different instances created with the same values",
false, false,
make_tuple(kAbilityGroupSkills, make_tuple(GetAbility(kAbilitySkillsId),
AbilityType({kAbilitySkillsId, kAbilitySkillsSingular, kAbilitySkillsPlural}))), AbilityType({kAbilitySkillsId, skills.singular, skills.plural}))),
make_test<bool, AbilityType, AbilityType>("should return true when comparing two different ability gropus", make_test<bool, AbilityType, AbilityType>(
true, "should return true when comparing two different ability gropus",
make_tuple(kAbilityGroupKnowledges, kAbilityGroupSkills)), true,
make_tuple(GetAbility(kAbilityKnowledgesId), GetAbility(kAbilitySkillsId))),
}))); })));
} }
@@ -79,7 +85,8 @@ TestResults test_FillAbilities() {
[]() -> string { []() -> string {
ostringstream error_message; ostringstream error_message;
vector<AbilityType> actual = {{-1, "This should be removed.", "This should be removed."}}; vector<AbilityType> actual = {{-1, "This should be removed.", "This should be removed."}};
vector<AbilityType> expected = {kAbilityGroupTalents, kAbilityGroupSkills, kAbilityGroupKnowledges}; vector<AbilityType> expected = {
GetAbility(kAbilityTalentsId), GetAbility(kAbilitySkillsId), GetAbility(kAbilityKnowledgesId)};
FillAbilities(actual); FillAbilities(actual);
compare(error_message, expected, actual); compare(error_message, expected, actual);
string error = error_message.str(); string error = error_message.str();
@@ -104,7 +111,7 @@ TestResults test_FillAbilitiesForAbilityGroup() {
vector<TestTuple<vector<string>, int>>({ vector<TestTuple<vector<string>, int>>({
make_test<vector<string>, int>( make_test<vector<string>, int>(
"should clear the vector for group 0, kAbilityGropuUnknownId", {}, make_tuple(0)), "should clear the vector for group 0, kAbilityGropuUnknownId", {}, make_tuple(0)),
make_test<vector<string>, int>("should fill talents for group 1 kAbilityGroupTalentsId", make_test<vector<string>, int>("should fill talents for group 1 GetAbility(kAbilityTalentsId)Id",
{ {
"Acting", "Acting",
"Alertness", "Alertness",
@@ -133,7 +140,7 @@ TestResults test_FillAbilitiesForAbilityGroup() {
"Survival", "Survival",
}, },
make_tuple(2)), make_tuple(2)),
make_test<vector<string>, int>("should fill knowledges for group 3 kAbilityGroupKnowledgesId", make_test<vector<string>, int>("should fill knowledges for group 3 GetAbility(kAbilityKnowledgesId)Id",
{ {
"Bureaucracy", "Bureaucracy",
"Computer", "Computer",
@@ -162,7 +169,7 @@ TestResults test_FillAbilityLabels() {
vector<TestTuple<vector<string>, int>>({ vector<TestTuple<vector<string>, int>>({
make_test<vector<string>, int>( make_test<vector<string>, int>(
"should clear the vector for group 0, kAbilityGropuUnknownId", {}, make_tuple(0)), "should clear the vector for group 0, kAbilityGropuUnknownId", {}, make_tuple(0)),
make_test<vector<string>, int>("should fill talents for group 1 kAbilityGroupTalentsId", make_test<vector<string>, int>("should fill talents for group 1 GetAbility(kAbilityTalentsId)Id",
{ {
"Acting", "Acting",
"Alertness", "Alertness",
@@ -190,7 +197,7 @@ TestResults test_FillAbilityLabels() {
"Survival", "Survival",
}, },
make_tuple(2)), make_tuple(2)),
make_test<vector<string>, int>("should fill knowledges for group 3 kAbilityGroupKnowledgesId", make_test<vector<string>, int>("should fill knowledges for group 3 GetAbility(kAbilityKnowledgesId)Id",
{ {
"Bureaucracy", "Bureaucracy",
"Computer", "Computer",
@@ -306,12 +313,13 @@ TestResults test_GetAbility() {
"SBF::GetAbility", "SBF::GetAbility",
GetAbility, GetAbility,
vector<TestTuple<AbilityType, int>>({ vector<TestTuple<AbilityType, int>>({
make_test<AbilityType, int>("should get talents", kAbilityGroupTalents, make_tuple(kAbilityTalentsId)),
make_test<AbilityType, int>("should get skills", kAbilityGroupSkills, make_tuple(kAbilitySkillsId)),
make_test<AbilityType, int>( make_test<AbilityType, int>(
"should get knowledges", kAbilityGroupKnowledges, make_tuple(kAbilityKnowledgesId)), "should get talents", GetAbility(kAbilityTalentsId), make_tuple(kAbilityTalentsId)),
make_test<AbilityType, int>("should get unknown for id 0", kAbilityGroupUnknown, make_tuple(0)), make_test<AbilityType, int>("should get skills", GetAbility(kAbilitySkillsId), make_tuple(kAbilitySkillsId)),
make_test<AbilityType, int>("should get unknown for an invalid id", kAbilityGroupUnknown, make_tuple(4)), make_test<AbilityType, int>(
"should get knowledges", GetAbility(kAbilityKnowledgesId), make_tuple(kAbilityKnowledgesId)),
make_test<AbilityType, int>("should get unknown for id 0", GetAbility(0), make_tuple(0)),
make_test<AbilityType, int>("should get unknown for an invalid id", GetAbility(0), make_tuple(4)),
}))); })));
} }
@@ -431,6 +439,14 @@ TestResults test_GetTalentLabel() {
}))); })));
} }
TestResults test_GetNumAbilityGroups() {
return execute_suite<int>(make_test_suite("SBF::Abilities::GetNumAbilityGroups",
GetNumAbilityGroups,
vector<TestTuple<int>>({
make_test<int>("should get 3", 3, make_tuple()),
})));
}
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
TestResults results; TestResults results;
@@ -446,6 +462,7 @@ int main(int argc, char* argv[]) {
results += test_GetAbility(); results += test_GetAbility();
results += test_GetAbilityLabel(); results += test_GetAbilityLabel();
results += test_GetKnowledgeLabel(); results += test_GetKnowledgeLabel();
results += test_GetNumAbilityGroups();
results += test_GetNumItemsForAbilityGroup(); results += test_GetNumItemsForAbilityGroup();
results += test_GetSkillLabel(); results += test_GetSkillLabel();
results += test_GetTalentLabel(); results += test_GetTalentLabel();

View File

@@ -6,6 +6,7 @@
#include <vector> #include <vector>
#include "Attributes.h" #include "Attributes.h"
#include "sbf-cpp/Abilities.h"
#include "sbf-cpp/Disciplines.h" #include "sbf-cpp/Disciplines.h"
namespace SBF { namespace SBF {
@@ -42,7 +43,7 @@ CharacterType::CharacterType() {
// Arrays/Objects // Arrays/Objects
// Abilities (Talents/Skills/Knowledges) // Abilities (Talents/Skills/Knowledges)
for (int group_id = 1; group_id <= kAbilitiesCount; group_id++) { for (int group_id = 1; group_id <= GetNumAbilityGroups(); group_id++) {
const int num_abilities = GetNumItemsForAbilityGroup(group_id); const int num_abilities = GetNumItemsForAbilityGroup(group_id);
for (int id = 1; id <= num_abilities; id++) { for (int id = 1; id <= num_abilities; id++) {
SetAbilityValue(group_id, id, 0); SetAbilityValue(group_id, id, 0);

View File

@@ -11,6 +11,7 @@
#include "Menus.h" #include "Menus.h"
#include "Random.h" #include "Random.h"
#include "Utils.h" #include "Utils.h"
#include "sbf-cpp/Abilities.h"
namespace SBF { namespace SBF {
namespace { namespace {
@@ -270,7 +271,7 @@ void CGSpendAbilityPoint(CharacterType& ch) {
bool done = false; bool done = false;
while (!done) { while (!done) {
MaybeClearScreen(); MaybeClearScreen();
ms.cancel_item_id = kAbilitiesCount; ms.cancel_item_id = GetNumAbilityGroups();
int ability_group_id = int ability_group_id =
ChooseStringId(GetAbilityGroupPluralLabels(), ms, "What kind of ability would you like to add 1 dot to?"); ChooseStringId(GetAbilityGroupPluralLabels(), ms, "What kind of ability would you like to add 1 dot to?");
if (ability_group_id == ms.cancel_item_id) { if (ability_group_id == ms.cancel_item_id) {