Adds spending virtue points.

This commit is contained in:
2023-03-02 04:04:44 -08:00
parent bf42a25f59
commit 970f78ffe5
2 changed files with 157 additions and 32 deletions

View File

@@ -19,6 +19,7 @@ Const TRUE = Not FALSE
Const DISCIPLINE_POINTS = 3
Const BACKGROUND_POINTS = 5
Const VIRTUE_POINTS = 7
Const INITIAL_GENERATION = 13
' Each set of these index constants "NAME_*" should start at 1 and go up to NAMES_COUNT without leaving any holes.
@@ -104,6 +105,13 @@ Const DISCIPLINE_VICISSITUDE = 24
Const DISCIPLINES_COUNT = 24
Dim Shared Disciplines(1 To DISCIPLINES_COUNT) As String
' Virtues
Const VIRTUE_SELF_CONTROL = 1
Const VIRTUE_COURAGE = 2
Const VIRTUE_CONSCIENCE = 3
Const VIRTUES_COUNT = 3
Dim Shared Virtues(1 To VIRTUES_COUNT) As String
' These should probably be renamed like PHYSICAL_ATTRIBUTE_STRENGTH instead.
Const ATTRIBUTE_STRENGTH = 1
Const ATTRIBUTE_DEXTERITY = 2
@@ -413,6 +421,11 @@ Sub InitializeMemory
Disciplines(DISCIPLINE_THAUMATURGY) = "Thaumaturgy"
Disciplines(DISCIPLINE_VICISSITUDE) = "Vicissitude"
' Virtues
Virtues(VIRTUE_SELF_CONTROL) = "Self-Control"
Virtues(VIRTUE_COURAGE) = "Courage"
Virtues(VIRTUE_CONSCIENCE) = "Conscience"
' Physical Attributes
PhysicalAttributes(ATTRIBUTE_STRENGTH) = "Strength"
PhysicalAttributeAbbreviations(ATTRIBUTE_STRENGTH) = "Str."
@@ -656,7 +669,7 @@ Function MakeFitR$ (text As String, length As Integer, pad As String)
End Function
Function MakeFitB$ (prefix As String, suffix As String, length As Integer, pad As String)
MakeFitB$ = MakeFitL$(MakeFitL$(prefix, length - Len(suffix), pad), length, pad)
MakeFitB$ = MakeFitL$(MakeFitL$(prefix, length - Len(suffix), pad) + suffix, length, pad)
End Function
Function MaxI (val1 As Integer, val2 As Integer)
@@ -667,6 +680,17 @@ Function MaxI (val1 As Integer, val2 As Integer)
End If
End Function
Sub SetVirtue (ch As CharacterType, index As Integer, value As Integer)
Select Case index
Case VIRTUE_SELF_CONTROL
ch.selfControl = value
Case VIRTUE_COURAGE
ch.courage = value
Case VIRTUE_CONSCIENCE
ch.conscience = value
End Select
End Sub
Sub SetDiscipline (ch As CharacterType, index As Integer, value As Integer)
Select Case index
Case DISCIPLINE_ANIMALISM
@@ -720,6 +744,19 @@ Sub SetDiscipline (ch As CharacterType, index As Integer, value As Integer)
End Select
End Sub
Function GetVirtue (ch As CharacterType, index As Integer)
value = 0
Select Case index
Case VIRTUE_SELF_CONTROL
value = ch.selfControl
Case VIRTUE_COURAGE
value = ch.courage
Case VIRTUE_CONSCIENCE
value = ch.conscience
End Select
GetVirtue = value
End Function
Function GetDiscipline (ch As CharacterType, index As Integer)
Select Case index
Case DISCIPLINE_ANIMALISM
@@ -774,11 +811,19 @@ Function GetDiscipline (ch As CharacterType, index As Integer)
End Function
Sub FillDisciplines (ch As CharacterType, disciplines() As Integer)
ReDim disciplines(1 To DISCIPLINES_COUNT) As Integer
For index = 1 To DISCIPLINES_COUNT
disciplines(index) = GetDiscipline(ch, index)
Next
End Sub
Sub FillVirtues (ch As CharacterType, values() As Integer)
ReDim values(1 To VIRTUES_COUNT) As Integer
For index = 1 To VIRTUES_COUNT
values(index) = GetVirtue(ch, index)
Next
End Sub
Sub SetTalent (ch As CharacterType, index As Integer, value As Integer)
Select Case index
Case TALENT_ACTING
@@ -1109,15 +1154,16 @@ Sub NewCharacter (ch As CharacterType)
ch.clan = 0
ch.nature = 0
ch.demeanor = 0
ch.conscience = 0
ch.selfControl = 0
ch.courage = 0
ch.conviction = 0
ch.instinct = 0
ch.generation = 13
ch.roadName = ""
ch.roadValue = 0
ch.willpower = 0
' Virtues
ch.selfControl = 1
ch.courage = 1
ch.conscience = 1
' Arrays/Objects
' Abilities (Talents/Skills/Knowledges)
@@ -1329,7 +1375,6 @@ Sub CGGetBackgrounds (ch As CharacterType)
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())
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)
@@ -1355,14 +1400,23 @@ Sub CGGetRoad (ch As CharacterType)
End Sub
Sub CGSpendVirtuePoints (ch As CharacterType)
' TODO: Spend virtue points
'Conscience 1
'Self-Control 1
'Courage 1
'Which virtue do you wish to add one of your 7 points to?
ch.conscience = 1
ch.selfControl = 4
ch.courage = 5
' Spend virtue points
Dim ms As MenuStyle
Call NewMenuStyle(ms)
virtuePoints = GetVirtuePoints
Dim values(1 To VIRTUES_COUNT) As Integer
While virtuePoints > 0
Call FillVirtues(ch, values())
virtue = ChooseStringIdWithValues(Virtues(), values(), ms, VIRTUES_COUNT, "Which virtue do you want to spend 1 of your " + itos$(virtuePoints) + " points on?")
Call SetVirtue(ch, virtue, GetVirtue(ch, virtue) + 1)
virtuePoints = virtuePoints - 1
Wend
' These are VtDA specific. Conscience/Conviction, Self-Control/Instinct, and Courage are the virtues there.
' TODO: figure out what to do about them.
ch.conviction = 2
ch.instinct = 3
End Sub
' Ignore this warning ch is not used yet because the sub is not implemented yet.
@@ -1382,10 +1436,6 @@ Sub CharacterGenerator ()
Call CGGetRoad(ch)
Call CGSpendVirtuePoints(ch)
' 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
' TODO: figure out how to actually calculate generation; seems like a combination of 13 or 15 depending on clan and your generation background count
' Generation starts at 13 and goes down 1 point per point of the "generation" background.
ch.generation = INITIAL_GENERATION - GetBackground(ch, BACKGROUND_GENERATION)
@@ -1452,9 +1502,9 @@ Sub ShowCharacterSheet (ch As CharacterType)
Print "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹ Player: " + MakeFitL$(ch.player$, 29, " ") + " <20>"
Print "<22> Attributes <20> Chronicle: " + MakeFitL$(ch.chronicle$, 26, " ") + " <20>"
Print "<22> Physical Social Mental <20> Haven: " + MakeFitL$(ch.haven$, 30, " ") + " <20>"
Print "<22> Str. " + MakeFitL$(Str$(ch.attr_strength), 7, " ") + " App. " + MakeFitL$(Str$(ch.attr_appearance), 7, " ") + " Int. " + MakeFitL$(Str$(ch.attr_intelligence), 5, " ") + " <20> Concept: " + MakeFitL$(ch.concept$, 28, " ") + " <20>"
Print "<22> Dex. " + MakeFitL$(Str$(ch.attr_dexterity), 7, " ") + " Cha. " + MakeFitL$(Str$(ch.attr_charisma), 7, " ") + " Per. " + MakeFitL$(Str$(ch.attr_perception), 5, " ") + " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹"
Print "<22> Sta. " + MakeFitL$(Str$(ch.attr_stamina), 7, " ") + " Man. " + MakeFitL$(Str$(ch.attr_manipulation), 7, " ") + " Wit. " + MakeFitL$(Str$(ch.attr_wits), 5, " ") + " <20> Derangements: <20>"
Print "<22> Str. " + MakeFitL$(itos$(ch.attr_strength), 7, " ") + " App. " + MakeFitL$(itos$(ch.attr_appearance), 7, " ") + " Int. " + MakeFitL$(itos$(ch.attr_intelligence), 5, " ") + " <20> Concept: " + MakeFitL$(ch.concept$, 28, " ") + " <20>"
Print "<22> Dex. " + MakeFitL$(itos$(ch.attr_dexterity), 7, " ") + " Cha. " + MakeFitL$(itos$(ch.attr_charisma), 7, " ") + " Per. " + MakeFitL$(itos$(ch.attr_perception), 5, " ") + " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹"
Print "<22> Sta. " + MakeFitL$(itos$(ch.attr_stamina), 7, " ") + " Man. " + MakeFitL$(itos$(ch.attr_manipulation), 7, " ") + " Wit. " + MakeFitL$(itos$(ch.attr_wits), 5, " ") + " <20> Derangements: <20>"
Print "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹ Regression,__________________________ <20>"
Print "<22> Disciplines: <20> _____________________________________ <20>"
Print "<22> " + MakeFitL$(disciplineStrings(0), 36, " ") + " <20> _____________________________________ <20>"
@@ -1475,15 +1525,16 @@ Sub ShowCharacterSheet (ch As CharacterType)
Print "<22> " + MakeFitC$("Abilities", 76, " ") + " <20>"
Print "<22> " + MakeFitC$("Talents", 25, " ") + " " + MakeFitC$("Skills", 25, " ") + " " + MakeFitC$("Knowledges", 24, " ") + " <20>"
For index = 1 To 10
Print "<22> " + MakeFitC(MakeFitL$(Talents(index) + ":", 14, " ") + Str$(GetTalent(ch, index)), 25, " ") + " " + MakeFitC(MakeFitL$(Skills(index) + ":", 14, " ") + Str$(GetSkill(ch, index)), 25, " ") + " " + MakeFitC(MakeFitL$(Knowledges(index) + ":", 14, " ") + Str$(GetKnowledge(ch, index)), 24, " ") + " <20>"
Print "<22> " + MakeFitC(MakeFitL$(Talents(index) + ":", 14, " ") + itos$(GetTalent(ch, index)), 25, " ") + " " + MakeFitC(MakeFitL$(Skills(index) + ":", 14, " ") + itos$(GetSkill(ch, index)), 25, " ") + " " + MakeFitC(MakeFitL$(Knowledges(index) + ":", 14, " ") + itos$(GetKnowledge(ch, index)), 24, " ") + " <20>"
Next
Print "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹"
Print "<22> Backgrounds: <20> Virtues: <20>"
Print "<EFBFBD> " + MakeFitL$(backgroundStrings(0), 36, " ") + " <20> " + MakeFitL$(MakeFitL$("Conscience:", 14, " ") + MakeFitR$(Str$(ch.conscience), 2, " "), 37, " ") + " <20>"
Print "<22> " + MakeFitL$(backgroundStrings(1), 36, " ") + " <20> " + MakeFitL$(MakeFitR$("Conviction:", 14, " ") + MakeFitR$(Str$(ch.conviction), 2, " "), 37, " ") + " <20>"
Print "<22> " + MakeFitL$(backgroundStrings(2), 36, " ") + " <20> " + MakeFitL$(MakeFitR$("Instinct:", 14, " ") + MakeFitR$(Str$(ch.instinct), 2, " "), 37, " ") + " <20>"
Print "<22> " + MakeFitL$(backgroundStrings(3), 36, " ") + " <20> " + MakeFitL$(MakeFitR$("Self-Control:", 14, " ") + MakeFitR$(Str$(ch.selfControl), 2, " "), 37, " ") + " <20>"
Print "<22> " + MakeFitL$(backgroundStrings(4), 36, " ") + " <20> " + MakeFitL$(MakeFitR$("Courage:", 14, " ") + MakeFitR$(Str$(ch.courage), 2, " "), 37, " ") + " <20>"
Print " " + MakeFitB$("Conscience:", itos$(ch.conscience), 37, " ") + " <20>"
Print "<22> " + MakeFitL$(backgroundStrings(0), 36, " ") + " <20> " + MakeFitB$("Conscience:", itos$(ch.conscience), 37, " ") + " <20>"
Print "<22> " + MakeFitL$(backgroundStrings(1), 36, " ") + " <20> " + MakeFitB$("Conviction:", itos$(ch.conviction), 37, " ") + " <20>"
Print "<22> " + MakeFitL$(backgroundStrings(2), 36, " ") + " <20> " + MakeFitB$("Instinct:", itos$(ch.instinct), 37, " ") + " <20>"
Print "<22> " + MakeFitL$(backgroundStrings(3), 36, " ") + " <20> " + MakeFitB$("Self-Control:", itos$(ch.selfControl), 37, " ") + " <20>"
Print "<22> " + MakeFitL$(backgroundStrings(4), 36, " ") + " <20> " + MakeFitB$("Courage:", itos$(ch.courage), 37, " ") + " <20>"
Print "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹"
Print "<22> <<PRESS ANY KEY TO CONTINUE>> <20>"
Print "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ"
@@ -1659,6 +1710,7 @@ Sub FillAttributeAbbreviationsInGroup (group As Integer, abbreviations() As Stri
End Sub
Sub Test
'End
End Sub
Sub AdjustMenuStyle (style As MenuStyle, items() As MenuItem, count As Integer, ignoreValue As Integer)
@@ -1768,3 +1820,8 @@ End Function
Function GetBackgroundPoints ()
GetBackgroundPoints = BACKGROUND_POINTS
End Function
Function GetVirtuePoints ()
GetVirtuePoints = VIRTUE_POINTS
End Function