From 70ce7cf911bb8884c4951082679f6ea993e7ad7a Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Wed, 1 Mar 2023 04:22:08 -0800 Subject: [PATCH] Renames Abilities to AbilityGroups. Removes PrintMenu and PrintMenuWithValues (replaced by calls to pm). Adds ChooseStringIdWithValues to simplify old calls to PrintMenuWithValues. Adds ChooseMenuItemId to simplify the ranking of abilities and attributes. Changes getters to use intermediate variables during calculation and only sets the result once. This is to simplify renaming them later if needed. Abstracts discipline points and background points to constants with getters to be overridden when adding ruleset support. --- TODO.md | 6 +- dos/sbf/sbf.bas | 341 +++++++++++++++++++++++++----------------------- 2 files changed, 182 insertions(+), 165 deletions(-) diff --git a/TODO.md b/TODO.md index b6f1739..076bf07 100644 --- a/TODO.md +++ b/TODO.md @@ -8,12 +8,13 @@ * Calculate roadValue aka humanity in VtM, and something else in WtA. * Calculate willpower. * Input/Print derangements. These are only for Malkavian vampires. + * If the clan is malk then ask to pick a derangement. Maybe more than one? + * Print any derangements on the character on the character sheet. + * This section is the last section with dummy text. * Figure out how to support something like this for various rulesets. * VtDA has malks so it would need this. * WtA doesn't obviously have them, but it may have something else that requires a specific question/addition to CharacterType. * Make this generic if possible. -* Replace all uses of PrintMenu and PrintMenuWithValues use pm and specific MenuStyles - * Rename pm to PrintMenu after this is done. * Spending virtue points # Low Priority @@ -59,6 +60,7 @@ * Probably not next to the type definition. * Look into pulling out these "classes" into separate bas files as appropriate. * I want to get this definition clutter out of the main bas. +* Make empty strings show as "blank lines" on the character sheet so they can be filled in by hand. # Super-Low Priority * Make GetAttributePointsForRank and GetAbilityPointsForRank use a formula maybe. diff --git a/dos/sbf/sbf.bas b/dos/sbf/sbf.bas index c771b43..803a7e7 100644 --- a/dos/sbf/sbf.bas +++ b/dos/sbf/sbf.bas @@ -17,6 +17,9 @@ Randomize Timer Const FALSE = 0 Const TRUE = Not FALSE +Const DISCIPLINE_POINTS = 3 +Const BACKGROUND_POINTS = 5 + ' Each set of these index constants "NAME_*" should start at 1 and go up to NAMES_COUNT without leaving any holes. ' This also goes the same for sub indexes like NAME_GROUP_SUBGROUP_* each NAME_GROUP_* set should have GetNumNamesInGroup(NAME_GROUP) items. Const CLAN_ANARCH = 1 @@ -128,11 +131,11 @@ Const ATTRIBUTE_GROUP_MENTAL = 3 Const ATTRIBUTE_GROUPS_COUNT = 3 Dim Shared AttributeGroups(1 To ATTRIBUTE_GROUPS_COUNT) As String -Const ABILITY_TALENTS = 1 -Const ABILITY_SKILLS = 2 -Const ABILITY_KNOWLEDGES = 3 -Const ABILITIES_COUNT = 3 -Dim Shared Abilities(1 To ABILITIES_COUNT) As String +Const ABILITY_GROUP_TALENTS = 1 +Const ABILITY_GROUP_SKILLS = 2 +Const ABILITY_GROUP_KNOWLEDGES = 3 +Const ABILITY_GROUPS_COUNT = 3 +Dim Shared AbilityGroups(1 To ABILITY_GROUPS_COUNT) As String Const TALENT_ACTING = 1 Const TALENT_ALERTNESS = 2 @@ -439,9 +442,9 @@ Sub InitializeMemory AttributeGroups(ATTRIBUTE_GROUP_MENTAL) = "Mental" ' Abilities - Abilities(ABILITY_TALENTS) = "Talents" - Abilities(ABILITY_SKILLS) = "Skills" - Abilities(ABILITY_KNOWLEDGES) = "Knowledges" + AbilityGroups(ABILITY_GROUP_TALENTS) = "Talents" + AbilityGroups(ABILITY_GROUP_SKILLS) = "Skills" + AbilityGroups(ABILITY_GROUP_KNOWLEDGES) = "Knowledges" ' Talents Talents(TALENT_ACTING) = "Acting" @@ -619,10 +622,7 @@ Function GetRandomInt (min As Integer, max As Integer) GetRandomInt = Int(Rnd * (max - min + 1)) + min End Function -' style is not used yet, but is here in case we want to in the future. -' It's easier to ignore it here than to add it to each call later. -' It's also available any place we would call this from because we're calling pm from there. -Function GetRandomMenuItemId (items() As MenuItem, style As MenuStyle, count As Integer) +Function GetRandomMenuItemId (items() As MenuItem, count As Integer) numVisibleItems = 0 Dim visibleItems(count) As Integer For i = 1 To count @@ -635,34 +635,6 @@ Function GetRandomMenuItemId (items() As MenuItem, style As MenuStyle, count As GetRandomMenuItemId = visibleItems(i) End Function -Sub PrintMenu (items() As String, count As Integer) - ' TODO: allow printing inside of a box บ 1 = item บ. - Dim ms As MenuStyle - Call NewMenuStyle(ms) - Dim menuItems(1 To count) As MenuItem - For i = 1 To count - Dim mi As MenuItem - Call NewMenuItem(mi, items(i), i) - menuItems(i) = mi - Next - Call AdjustMenuStyle(ms, menuItems(), count, TRUE) - Call pm(menuItems(), count, ms) -End Sub - -Sub PrintMenuWithValues (items() As String, values() As Integer, count As Integer) - ' TODO: @see PrintMenu - Dim ms As MenuStyle - Call NewMenuStyle(ms) - Dim menuItems(1 To count) As MenuItem - For i = 1 To count - Dim mi As MenuItem - Call NewMenuItemWithValue(mi, items(i), i, values(i)) - menuItems(i) = mi - Next - Call AdjustMenuStyle(ms, menuItems(), count, FALSE) - Call pm(menuItems(), count, ms) -End Sub - Function MakeFitL$ (text As String, length As Integer, pad As String) MakeFitL = Left$(text + String$(length, pad), length) End Function @@ -1042,11 +1014,11 @@ End Sub Sub SetAbilityValue (ch As CharacterType, groupIndex As Integer, index As Integer, value As Integer) Select Case groupIndex - Case ABILITY_TALENTS + Case ABILITY_GROUP_TALENTS Call SetTalent(ch, index, value) - Case ABILITY_SKILLS + Case ABILITY_GROUP_SKILLS Call SetSkill(ch, index, value) - Case ABILITY_KNOWLEDGES + Case ABILITY_GROUP_KNOWLEDGES Call SetKnowledge(ch, index, value) End Select End Sub @@ -1087,11 +1059,11 @@ End Function Function GetAbilityValue (ch As CharacterType, abilityIndex As Integer, itemIndex As Integer) GetAbilityValue = 0 Select Case abilityIndex - Case ABILITY_TALENTS + Case ABILITY_GROUP_TALENTS GetAbilityValue = GetTalent(ch, itemIndex) - Case ABILITY_SKILLS + Case ABILITY_GROUP_SKILLS GetAbilityValue = GetSkill(ch, itemIndex) - Case ABILITY_KNOWLEDGES + Case ABILITY_GROUP_KNOWLEDGES GetAbilityValue = GetKnowledge(ch, itemIndex) End Select End Function @@ -1195,12 +1167,34 @@ Function ChooseStringId (labels() As String, style As MenuStyle, count As Intege Call BuildMenu(mnuItems(), labels(), count) Call AdjustMenuStyle(style, mnuItems(), count, TRUE) Print prompt - Call pm(mnuItems(), count, style) + Call PrintMenu(mnuItems(), count, style) choice = GetMenuChoice(mnuItems(), style, count) - If choice = style.randomItemId Then choice = GetRandomMenuItemId(mnuItems(), style, count) + If choice = style.randomItemId Then choice = GetRandomMenuItemId(mnuItems(), count) ChooseStringId = choice End Function +Function ChooseStringIdWithValues (labels() As String, values() As Integer, style As MenuStyle, count As Integer, prompt As String) + Cls + Dim mnuItems(1 To count) As MenuItem + Call BuildMenuWithValues(mnuItems(), labels(), values(), count) + Call AdjustMenuStyle(style, mnuItems(), count, FALSE) + Print prompt + Call PrintMenu(mnuItems(), count, style) + choice = GetMenuChoice(mnuItems(), style, count) + If choice = style.randomItemId Then choice = GetRandomMenuItemId(mnuItems(), count) + ChooseStringIdWithValues = choice +End Function + +Function ChooseMenuItemId (items() As MenuItem, style As MenuStyle, count As Integer, prompt As String, ignoreValue As Integer) + Cls + Call AdjustMenuStyle(style, items(), count, ignoreValue) + Print prompt + Call PrintMenu(items(), count, style) + choice = GetMenuChoice(items(), style, count) + If choice = style.randomItemId Then choice = GetRandomMenuItemId(items(), count) + ChooseMenuItemId = choice +End Function + Sub CGGetHeader (ch As CharacterType) Cls Dim ms As MenuStyle @@ -1218,142 +1212,146 @@ Sub CGGetHeader (ch As CharacterType) End Sub Sub CGGetDisciplines (ch As CharacterType) - ' The character starts with 3 discipline points and they can spend them on one or more disciplines - ' TODO: Make this a ruleset defined const - disciplinePoints = 3 - - ' I don't like having to build an empty array for return values here. Ideally PrintMenuWithValues could take the character and a mapping fn(index) that - ' calls GetDiscipline(ch, index) to fetch the value. At least for BASIC this seems like a better solution. PrintMenuWithValues does piss me off though. - ' I don't want it to exist. I want a formatting function there that takes the character and the index then prints "1 = Bullshit: 3" or something like that. - ' But we can't have nice things like nested custom types, arrays in custom types, or function objects/pointers. - ' TODO: Try to find a better way to do this. + ' Spend discipline points. + Dim ms As MenuStyle + Call NewMenuStyle(ms) + disciplinePoints = GetDisciplinePoints Dim disciplineValues(DISCIPLINES_COUNT) As Integer While disciplinePoints > 0 Cls Print "Which discipline do you want to spend 1 of your " + itos$(disciplinePoints) + " discipline points on?" Call FillDisciplines(ch, disciplineValues()) - Call PrintMenuWithValues(Disciplines(), disciplineValues(), DISCIPLINES_COUNT) - discipline = GetChoice(0, DISCIPLINES_COUNT) - If discipline = 0 Then discipline = GetRandomInt(1, DISCIPLINES_COUNT) + discipline = ChooseStringIdWithValues(Disciplines(), disciplineValues(), ms, DISCIPLINES_COUNT, "Which discipline do you want to spend 1 of your " + itos$(disciplinePoints) + " points on?") Call SetDiscipline(ch, discipline, GetDiscipline(ch, discipline) + 1) disciplinePoints = disciplinePoints - 1 Wend End Sub Sub CGGetAttributes (ch As CharacterType) - Dim mi As MenuItem - ' Attributes - Dim attributeGroupsMenuStyle As MenuStyle - Call NewMenuStyle(attributeGroupsMenuStyle) + Dim msWithoutValues As MenuStyle + Call NewMenuStyle(msWithoutValues) + Dim msWithValues As MenuStyle + Call NewMenuStyle(msWithValues) + Dim ranks(1 To ATTRIBUTE_GROUPS_COUNT) As Integer + + ' Attribute groups menu (physical/social/mental) Dim mnuAttributeGroups(1 To ATTRIBUTE_GROUPS_COUNT) As MenuItem + Dim mi As MenuItem For i = 1 To ATTRIBUTE_GROUPS_COUNT Call NewMenuItem(mi, AttributeGroups(i), i) mnuAttributeGroups(i) = mi Next - ' General formula for last choice is - ' Sum(1..AllAttributesCount)-Sum(Choice[1]..Choice[AllAttributesCount-1]) - Dim attributeGroupRanks(1 To ATTRIBUTE_GROUPS_COUNT) As Integer - attrSum = 0 + ' Choose attribute group priorities. + groupSum = 0 rankSum = 1 For i = 1 To ATTRIBUTE_GROUPS_COUNT - 1 - Cls - Call AdjustMenuStyle(attributeGroupsMenuStyle, mnuAttributeGroups(), ATTRIBUTE_GROUPS_COUNT, TRUE) ' TODO: Pull this from an array like ranks or rank_names so "Choose your primary attribute?" instead - Print "Choose your next attribute?" - Call pm(mnuAttributeGroups(), ATTRIBUTE_GROUPS_COUNT, attributeGroupsMenuStyle) - nextAttr = GetMenuChoice(mnuAttributeGroups(), attributeGroupsMenuStyle, ATTRIBUTE_GROUPS_COUNT) - If nextAttr = 0 Then nextAttr = GetRandomMenuItemId(mnuAttributeGroups(), attributeGroupsMenuStyle, ATTRIBUTE_GROUPS_COUNT) - mnuAttributeGroups(i).isVisible = FALSE - attributeGroupRanks(nextAttr) = i + nextGroup = ChooseMenuItemId(mnuAttributeGroups(), msWithoutValues, ATTRIBUTE_GROUPS_COUNT, "Choose your next attribute?", TRUE) + mnuAttributeGroups(nextGroup).isVisible = FALSE + ranks(nextGroup) = i rankSum = rankSum + i + 1 - attrSum = attrSum + nextAttr + groupSum = groupSum + nextGroup + Print "rank: " + itos$(i) + ", nextGroup: " + itos$(nextGroup) + ", rankSum: " + itos$(rankSum) + ", groupSum: " + itos$(groupSum) + Input a Next - lastAttr = rankSum - attrSum - attributeGroupRanks(lastAttr) = ATTRIBUTE_GROUPS_COUNT + ' General formula for last choice given 1 to count based indexing is this + ' (Sum from 1 to count) - (Sum of all previous choice IDs) + ' Sum(1..AllAttributesCount)-Sum(Choice[1]..Choice[AllAttributesCount-1]) + Print "rank: " + itos$(i) + ", nextGroup: " + itos$(nextGroup) + ", rankSum: " + itos$(rankSum) + ", groupSum: " + itos$(groupSum) + ", lastGroup: " + itos$(lastGroup) + lastGroup = rankSum - groupSum + ranks(lastGroup) = ATTRIBUTE_GROUPS_COUNT + For i = 1 To ATTRIBUTE_GROUPS_COUNT + Print "ranks(" + itos$(i) + "): " + itos$(ranks(i)) + Next + + For i = 1 To ATTRIBUTE_GROUPS_COUNT + Print "ranks(" + AttributeGroups(i) + "): " + itos$(ranks(i)) + Next + Input a ' Spend attribute points - For attrGroup = 1 To ATTRIBUTE_GROUPS_COUNT - attrCount = GetNumAttributesInGroup(attrGroup) - ReDim attributes(1 To attrCount) As String - Call FillAttributesInGroup(attrGroup, attributes()) - rank = attributeGroupRanks(attrGroup) + For group = 1 To ATTRIBUTE_GROUPS_COUNT + count = GetNumAttributesInGroup(group) + ReDim attributes(1 To count) As String + Call FillAttributesInGroup(group, attributes()) + rank = ranks(group) + ReDim values(1 To count) As Integer For attrPoints = GetAttributePointsForRank(rank) To 1 Step -1 - Cls - Print "Which attribute would you like to spend 1 of your " + itos$(attrPoints) + " points on?" - ReDim attrValues(1 To attrCount) As Integer - Call FillAttributeValues(ch, attrValues(), attrGroup) - Call PrintMenuWithValues(attributes(), attrValues(), attrCount) - attr = GetChoice(0, attrCount) - If attr = 0 Then attr = GetRandomInt(1, attrCount) - Call SetAttributeValue(ch, attrGroup, attr, GetAttributeValue(ch, attrGroup, attr) + 1) + Call FillAttributeValues(ch, values(), group) + attribute = ChooseStringIdWithValues(attributes(), values(), msWithValues, count, "Which attribute do you want to spend 1 of your " + itos$(attrPoints) + " points on?") + Call SetAttributeValue(ch, group, attribute, GetAttributeValue(ch, group, attribute) + 1) Next Next End Sub Sub CGGetAbilities (ch As CharacterType) + Dim msWithoutValues As MenuStyle + Call NewMenuStyle(msWithoutValues) + Dim msWithValues As MenuStyle + Call NewMenuStyle(msWithValues) + Dim ranks(1 To ABILITY_GROUPS_COUNT) As Integer + + ' Ability groups menu (talents/skills/knowledges) + Dim mnuAbilityGroups(1 To ABILITY_GROUPS_COUNT) As MenuItem Dim mi As MenuItem - ' Abilities - Dim abilityGroupsMenuStyle As MenuStyle - Call NewMenuStyle(abilityGroupsMenuStyle) - Dim mnuAbilityGroups(1 To ABILITIES_COUNT) As MenuItem - For i = 1 To ABILITIES_COUNT - Call NewMenuItem(mi, Abilities(i), i) + For i = 1 To ABILITY_GROUPS_COUNT + Call NewMenuItem(mi, AbilityGroups(i), i) mnuAbilityGroups(i) = mi Next - ' General formula for last choice is - ' Sum(1..AllAttributesCount)-Sum(Choice[1]..Choice[AllAttributesCount-1]) - Dim abilityGroupRanks(1 To ABILITIES_COUNT) As Integer - abilitySum = 0 + ' Choose ability group priorities + groupSum = 0 rankSum = 1 - For i = 1 To ABILITIES_COUNT - 1 - Cls - Call AdjustMenuStyle(abilityGroupsMenuStyle, mnuAbilityGroups(), ABILITIES_COUNT, TRUE) + For i = 1 To ABILITY_GROUPS_COUNT - 1 ' TODO: Pull this from an array like ranks or rank_names so "Choose your primary ability?" instead - Print "Choose your next ability?" - Call pm(mnuAbilityGroups(), ABILITIES_COUNT, abilityGroupsMenuStyle) - nextAbility = GetMenuChoice(mnuAbilityGroups(), abilityGroupsMenuStyle, ABILITIES_COUNT) - If nextAbility = 0 Then nextAbility = GetRandomMenuItemId(mnuAbilityGroups(), abilityGroupsMenuStyle, ABILITIES_COUNT) - mnuAbilityGroups(i).isVisible = FALSE - abilityGroupRanks(nextAbility) = i + nextAbility = ChooseMenuItemId(mnuAbilityGroups(), msWithoutValues, ABILITY_GROUPS_COUNT, "Choose your next ability?", TRUE) + mnuAbilityGroups(nextAbility).isVisible = FALSE + ranks(nextAbility) = i rankSum = rankSum + i + 1 - abilitySum = abilitySum + nextAbility + groupSum = groupSum + nextAbility Next - lastAbility = rankSum - abilitySum - abilityGroupRanks(lastAbility) = ABILITIES_COUNT + ' General formula for last choice given 1 to count based indexing is this + ' (Sum from 1 to count) - (Sum of all previous choice IDs) + ' Sum(1..AllAttributesCount)-Sum(Choice[1]..Choice[AllAttributesCount-1]) + lastGroup = rankSum - groupSum + ranks(lastGroup) = ABILITY_GROUPS_COUNT + For i = 1 To ABILITY_GROUPS_COUNT + Print "ranks(" + itos$(i) + "): " + itos$(ranks(i)) + Next + + For i = 1 To ABILITY_GROUPS_COUNT + Print "ranks(" + AbilityGroups(i) + "): " + itos$(ranks(i)) + Next + Input a ' Spend ability points - For abiityGroup = 1 To ABILITIES_COUNT - abiityCount = GetNumItemsForAbility(abiityGroup) - ReDim items(1 To abiityCount) As String - Call FillItemsForAbility(abiityGroup, items()) - rank = abilityGroupRanks(abiityGroup) - For abiityPoints = GetAbilityPointsForRank(rank) To 1 Step -1 - Cls + For group = 1 To ABILITY_GROUPS_COUNT + count = GetNumItemsForAbilityGroup(group) + ReDim abilities(1 To count) As String + Call FillAbilitiesForAbilityGroup(group, abilities()) + rank = ranks(group) + ReDim values(1 To count) As Integer + For abilityPoints = GetAbilityPointsForRank(rank) To 1 Step -1 + Call FillAbilityValues(ch, values(), group) ' TODO: Pull this from an array like AbilityGroupsSingle so "Which talent would you like to spend 1 of your 5 points on?" - Print "Which ability would you like to spend 1 of your " + itos$(abiityPoints) + " points on?" - ReDim abiityValues(1 To abiityCount) As Integer - Call FillAbilityValues(ch, abiityValues(), abiityGroup) - Call PrintMenuWithValues(items(), abiityValues(), abiityCount) - abiity = GetChoice(0, abiityCount) - If abiity = 0 Then abiity = GetRandomInt(1, abiityCount) - Call SetAbilityValue(ch, abiityGroup, abiity, GetAbilityValue(ch, abiityGroup, abiity) + 1) + ability = ChooseStringIdWithValues(abilities(), values(), msWithValues, count, "Which ability would you like to spend 1 of your " + itos$(abilityPoints) + " points on?") + Call SetAbilityValue(ch, group, ability, GetAbilityValue(ch, group, ability) + 1) Next Next End Sub Sub CGGetBackgrounds (ch As CharacterType) ' Spend background points - backgroundPoints = 5 + Dim ms As MenuStyle + Call NewMenuStyle(ms) + backgroundPoints = GetBackgroundPoints Dim backgroundValues(BACKGROUNDS_COUNT) As Integer While backgroundPoints > 0 Cls Print "Which background do you want to spend 1 of your " + itos$(backgroundPoints) + " background points on?" Call FillBackgrounds(ch, backgroundValues()) - Call PrintMenuWithValues(Backgrounds(), backgroundValues(), BACKGROUNDS_COUNT) - background = GetChoice(0, BACKGROUNDS_COUNT) - If background = 0 Then background = GetRandomInt(1, BACKGROUNDS_COUNT) + background = ChooseStringIdWithValues(Backgrounds(), backgroundValues(), ms, BACKGROUNDS_COUNT, "Which background do you want to spend 1 of your " + itos$(backgroundPoints) + " points on?") Call SetBackground(ch, background, GetBackground(ch, background) + 1) backgroundPoints = backgroundPoints - 1 Wend @@ -1387,6 +1385,7 @@ Sub CGSpendVirtuePoints (ch As CharacterType) ch.courage = 5 End Sub +' Ignore this warning ch is not used yet because the sub is not implemented yet. Sub SaveCharacterSheet (ch As CharacterType) ' Where do you want the file to be saved? (default is C:\Windows\Desktop)? ' What do you want the file to be called? (default is CHAR1)? @@ -1401,7 +1400,8 @@ Sub CharacterGenerator () Call CGGetAbilities(ch) Call CGGetRoad(ch) Call CGSpendVirtuePoints(ch) - ' TODO: Don't know what to call these two. Figure that out and maybe make it a sub. + + ' TODO: We don't know what to call these two. Figure that out and maybe make it a sub. These next few could all be one sub if related. ch.conviction = 2 ch.instinct = 3 @@ -1433,6 +1433,8 @@ Sub ShowCharacterSheet (ch As CharacterType) '230 ๆ็่้๊๋2์ํ๎๏ ' enquote forms s/^([ษบศอฬ].*[ปบผน])$/print "$1"/g + ' TODO: Try to make disciplines and backgrounds support multiple columns for overflow + ' i.e. >3 discipline strings or >5 background strings Dim disciplineStrings(3) As String disciplineStringsIndex = 0 For index = 1 To DISCIPLINES_COUNT @@ -1459,6 +1461,8 @@ Sub ShowCharacterSheet (ch As CharacterType) End If Next + ' TODO: Add derangements to this sheet. + ' TODO: Make the string fields show a full width "_" string for "empty lines" when printed. Cls Print "ษออออออออออออออออออออออออออออออออออออออหอออออออออออออออออออออออออออออออออออออออป" Print "บ Name: " + MakeFitL$(ch.name, 30, " ") + " บ Sex: " + MakeFitL$(Genders(ch.gender), 10, " ") + " Generation: " + MakeFitL$(itos$(ch.generation), 9, " ") + " บ" @@ -1513,7 +1517,7 @@ Sub FillAttributeValues (ch As CharacterType, values() As Integer, groupIndex As End Sub Sub FillAbilityValues (ch As CharacterType, values() As Integer, groupIndex As Integer) - count = GetNumItemsForAbility(groupIndex) + count = GetNumItemsForAbilityGroup(groupIndex) ReDim values(1 To count) As Integer For i = 1 To count values(i) = GetAbilityValue(ch, groupIndex, i) @@ -1547,51 +1551,55 @@ End Sub Function GetNumAttributesInGroup (index As Integer) Select Case index Case ATTRIBUTE_GROUP_PHYSICAL - GetNumAttributesInGroup = PHYSICAL_ATTRIBUTES_COUNT + count = PHYSICAL_ATTRIBUTES_COUNT Case ATTRIBUTE_GROUP_SOCIAL - GetNumAttributesInGroup = SOCIAL_ATTRIBUTES_COUNT + count = SOCIAL_ATTRIBUTES_COUNT Case ATTRIBUTE_GROUP_MENTAL - GetNumAttributesInGroup = MENTAL_ATTRIBUTES_COUNT + count = MENTAL_ATTRIBUTES_COUNT Case Else - GetNumAttributesInGroup = 0 + count = 0 End Select + GetNumAttributesInGroup = count End Function -Function GetNumItemsForAbility (index As Integer) +Function GetNumItemsForAbilityGroup (index As Integer) Select Case index - Case ABILITY_TALENTS - GetNumItemsForAbility = TALENTS_COUNT - Case ABILITY_SKILLS - GetNumItemsForAbility = SKILLS_COUNT - Case ABILITY_KNOWLEDGES - GetNumItemsForAbility = KNOWLEDGES_COUNT + Case ABILITY_GROUP_TALENTS + count = TALENTS_COUNT + Case ABILITY_GROUP_SKILLS + count = SKILLS_COUNT + Case ABILITY_GROUP_KNOWLEDGES + count = KNOWLEDGES_COUNT Case Else - GetNumItemsForAbility = 0 + count = 0 End Select + GetNumItemsForAbilityGroup = count End Function Function GetAttributeName$ (groupIndex As Integer, attributeIndex As Integer) - GetAttributeName = "" + attributeName$ = "" Select Case groupIndex Case ATTRIBUTE_GROUP_PHYSICAL - GetAttributeName = PhysicalAttributes(attributeIndex) + attributeName$ = PhysicalAttributes(attributeIndex) Case ATTRIBUTE_GROUP_SOCIAL - GetAttributeName = SocialAttributes(attributeIndex) + attributeName$ = SocialAttributes(attributeIndex) Case ATTRIBUTE_GROUP_MENTAL - GetAttributeName = MentalAttributes(attributeIndex) + attributeName$ = MentalAttributes(attributeIndex) End Select + GetAttributeName = attributeName$ End Function Function GetAbilityName$ (groupIndex As Integer, abilityIndex As Integer) - GetAbilityName = "" + abilityName$ = "" Select Case groupIndex - Case ABILITY_TALENTS - GetAbilityName = Talents(abilityIndex) - Case ABILITY_SKILLS - GetAbilityName = Skills(abilityIndex) - Case ABILITY_KNOWLEDGES - GetAbilityName = Knowledges(abilityIndex) + Case ABILITY_GROUP_TALENTS + abilityName$ = Talents(abilityIndex) + Case ABILITY_GROUP_SKILLS + abilityName$ = Skills(abilityIndex) + Case ABILITY_GROUP_KNOWLEDGES + abilityName$ = Knowledges(abilityIndex) End Select + GetAbilityName = abilityName$ End Function Sub FillAttributesInGroup (group As Integer, attributes() As String) @@ -1617,8 +1625,8 @@ Sub FillAttributesInGroup (group As Integer, attributes() As String) End Select End Sub -Sub FillItemsForAbility (ability As Integer, items() As String) - count = GetNumItemsForAbility(ability) +Sub FillAbilitiesForAbilityGroup (ability As Integer, items() As String) + count = GetNumItemsForAbilityGroup(ability) ReDim items(1 To count) As String If count > 0 Then ReDim items(1 To count) As String @@ -1626,15 +1634,15 @@ Sub FillItemsForAbility (ability As Integer, items() As String) ReDim items(0) As String End If Select Case ability - Case ABILITY_TALENTS + Case ABILITY_GROUP_TALENTS For i = 1 To count items(i) = Talents(i) Next - Case ABILITY_SKILLS + Case ABILITY_GROUP_SKILLS For i = 1 To count items(i) = Skills(i) Next - Case ABILITY_KNOWLEDGES + Case ABILITY_GROUP_KNOWLEDGES For i = 1 To count items(i) = Knowledges(i) Next @@ -1688,7 +1696,7 @@ Sub AdjustMenuStyle (style As MenuStyle, items() As MenuItem, count As Integer, If Not ignoreValue Then style.valueWidth = maxValueWidth Else style.valueWidth = 0 End Sub -Sub pm (items() As MenuItem, count As Integer, style As MenuStyle) +Sub PrintMenu (items() As MenuItem, count As Integer, style As MenuStyle) Dim randomItem As MenuItem Call NewMenuItem(randomItem, style.randomItemName, style.randomItemId) If count <= 10 Then @@ -1767,3 +1775,10 @@ Sub NewMenuItemWithValue (mi As MenuItem, label As String, id As Integer, value mi.isVisible = TRUE End Sub +Function GetDisciplinePoints () + GetDisciplinePoints = DISCIPLINE_POINTS +End Function + +Function GetBackgroundPoints () + GetBackgroundPoints = BACKGROUND_POINTS +End Function