Merge pull request #47 from RPG-Research/Dougs-Master-Branch-Working

Dougs master branch working
This commit is contained in:
MacDugRPG 2022-10-16 13:16:12 -04:00 committed by GitHub
commit b8742dc922
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 314 additions and 81 deletions

View File

@ -0,0 +1,3 @@
source_md5="b918ce36c79140123ba6299230647b74"
dest_md5="4a3acb68f07fc2d17b50af0660f3c0ca"

View File

@ -0,0 +1,3 @@
source_md5="dd2844f8b96c7a7f955098cd2ce51510"
dest_md5="deb4ac7c88acaaec693aea232ca4b9e5"

View File

@ -0,0 +1,3 @@
source_md5="766d733b8edaa28cdf98e68e20ceba59"
dest_md5="e416e3ec46373a873cfc4afbf066c70f"

View File

@ -12,8 +12,8 @@
"Action":"ShowText", "Action":"ShowText",
"A_Params":"", "A_Params":"",
"Text":"The boat rocks gently. You can leave the boat through a hatch. There is also now a test option.", "Text":"The boat rocks gently. You can leave the boat through a hatch. There is also now a test option.",
"Option_Labels":["Examine Ship","Climb out through hatch","Play the fiddle!","Rest","Meditate", "Run die roll test"], "Option_Labels":["Examine Ship","Climb out through hatch","Play the fiddle!","Rest","Meditate", "Run generic die roll test", "Do strength check on percentile die"],
"Option_GoTos":["Boat_002","Shore_001","Misc_001","Misc_002","Misc_003","Test_000"] "Option_GoTos":["Boat_002","Shore_001","Misc_001","Misc_002","Misc_003","Test_000","Test_002"]
}, },
"Node_Boat_002":{ "Node_Boat_002":{
"Id":"Boat_002", "Id":"Boat_002",
@ -67,7 +67,23 @@
"Id":"Test_001", "Id":"Test_001",
"Action":"TestHandleNodeParams", "Action":"TestHandleNodeParams",
"A_Params":"", "A_Params":"",
"Text":"Die were rolled and passed to this node as: ", "Text":"Dice were rolled and passed to this node as: ",
"Option_Labels":["Back to boat"],
"Option_GoTos":["Boat_001"]
},
"Node_Test002":{
"Id":"Test_002",
"Action":"RollDice",
"A_Params":[10,10],
"Text":"Dice were rolled and passed to this node as: ",
"Option_Labels":["NA"],
"Option_GoTos":["Test_003"]
},
"Node_Test003":{
"Id":"Test_003",
"Action":"TestAbstractAbilityCheck",
"A_Params":["ST"],
"Text":"Ability check run on strength resulted in: ",
"Option_Labels":["Back to boat"], "Option_Labels":["Back to boat"],
"Option_GoTos":["Boat_001"] "Option_GoTos":["Boat_001"]
} }

View File

@ -0,0 +1,20 @@
keys,en
Name,Jon
Race,Person
Class,CSV
AG,65
APP,50
CO,55
QU,55
MD,60
ST,60
CH,72
EM,45
IN,50
ME,40
MX,55
PR,55
RE,30
SD,25
Weapon,Mighty Pen
Armor,Sweater vest +1
1 keys en
2 Name Jon
3 Race Person
4 Class CSV
5 AG 65
6 APP 50
7 CO 55
8 QU 55
9 MD 60
10 ST 60
11 CH 72
12 EM 45
13 IN 50
14 ME 40
15 MX 55
16 PR 55
17 RE 30
18 SD 25
19 Weapon Mighty Pen
20 Armor Sweater vest +1

View File

@ -0,0 +1,16 @@
[remap]
importer="csv_translation"
type="Translation"
[deps]
files=[ "res://_userFiles/characterFiles/testingCSVCharFile_bci-rpg_sris_test001.en.translation" ]
source_file="res://_userFiles/characterFiles/testingCSVCharFile_bci-rpg_sris_test001.csv"
dest_files=[ "res://_userFiles/characterFiles/testingCSVCharFile_bci-rpg_sris_test001.en.translation" ]
[params]
compress=true
delimiter=0

View File

@ -0,0 +1,13 @@
keys,en
Name,The Epic Test
Race,Robot
Class,CSV
Str,16
Int,19
Wis,3
Dex,10
Con,11
Chr,8
HP,72
Weapon,Comma + 2
Armor,Obfuscating shield
1 keys en
2 Name The Epic Test
3 Race Robot
4 Class CSV
5 Str 16
6 Int 19
7 Wis 3
8 Dex 10
9 Con 11
10 Chr 8
11 HP 72
12 Weapon Comma + 2
13 Armor Obfuscating shield

View File

@ -0,0 +1,16 @@
[remap]
importer="csv_translation"
type="Translation"
[deps]
files=[ "res://_userFiles/characterFiles/testingCSVCharFile_libre.en.translation" ]
source_file="res://_userFiles/characterFiles/testingCSVCharFile_libre.csv"
dest_files=[ "res://_userFiles/characterFiles/testingCSVCharFile_libre.en.translation" ]
[params]
compress=true
delimiter=0

View File

@ -0,0 +1,14 @@
keys,en
Name,Jon
Race,Person
Class,CSV
ST,55
QU,35
PR,50
IN,35
EM,35
CO,65
AG,55
SD,75
ME,25
RE,40
1 keys en
2 Name Jon
3 Race Person
4 Class CSV
5 ST 55
6 QU 35
7 PR 50
8 IN 35
9 EM 35
10 CO 65
11 AG 55
12 SD 75
13 ME 25
14 RE 40

View File

@ -0,0 +1,16 @@
[remap]
importer="csv_translation"
type="Translation"
[deps]
files=[ "res://_userFiles/characterFiles/testingCSVCharFile_rolemaster_test001.en.translation" ]
source_file="res://_userFiles/characterFiles/testingCSVCharFile_rolemaster_test001.csv"
dest_files=[ "res://_userFiles/characterFiles/testingCSVCharFile_rolemaster_test001.en.translation" ]
[params]
compress=true
delimiter=0

View File

@ -4,7 +4,7 @@
extends Control extends Control
#Source for module file: to the GU #Source for module file:
#export(String, FILE, "*.json") var module_file_path:String #export(String, FILE, "*.json") var module_file_path:String
#DKM TEMP: #DKM TEMP:
var module_file_path = "res://_userFiles/Module_Demo_001.json" var module_file_path = "res://_userFiles/Module_Demo_001.json"
@ -22,24 +22,20 @@ onready var options_container = $Background/MarginContainer/Rows/InputArea/Scrol
onready var pSingleton = get_node("/root/PlayerCharacter") onready var pSingleton = get_node("/root/PlayerCharacter")
onready var charSheet = $Con_charSheet/MarginContainer/VBoxContainer/CharacterSheet onready var charSheet = $Con_charSheet/MarginContainer/VBoxContainer/CharacterSheet
#DKM TEMP: this is just a temp file solution for grabbing map/module, will be replaced with DB
# or desired load approach
onready var module_map = "res://_userFiles/temp_map.save"
var nodeArray var nodeArray
func _ready() -> void: func _ready() -> void:
save_module()
theme=load(settings.themeFile) theme=load(settings.themeFile)
#Initialize module and display text:
load_new_module()
current_text.show()
#Load character sheet:
charSheet.text = pSingleton.pc.pcText
#DKM TEMP: testing: #Initializes the default module:
var moduleDict = loadJSONToDict(module_file_path) func load_new_module() -> void:
var moduleDict = load_JSON_to_dict(module_file_path)
#DKM TEMP: this needs to be refactored to reposition this initialization
var i = 0 var i = 0
#print("Looking for JSON at: " + module_file_path)
#print("Json returned as: " + str(moduleDict))
var initialNode = Locale.new() var initialNode = Locale.new()
nodeArray = [initialNode] nodeArray = [initialNode]
for moduleNode in moduleDict.values(): for moduleNode in moduleDict.values():
@ -62,14 +58,8 @@ func _ready() -> void:
#print("For #" + str(i) + ": appended go to destination of: " + str(dest)) #print("For #" + str(i) + ": appended go to destination of: " + str(dest))
#print("Node array name for #" + str(i) + ": " + nodeArray[i].locale_name) #print("Node array name for #" + str(i) + ": " + nodeArray[i].locale_name)
i = i+1 i = i+1
current_text.show()
#Load character sheet:
charSheet.text = pSingleton.pc.pcText
create_response(nodeArray[0].locale_description) create_response(nodeArray[0].locale_description)
#DKM TEMP: another that needs to be broken out when ready:
clear_prior_options() clear_prior_options()
i = 0 i = 0
for option in nodeArray[0].options_array: for option in nodeArray[0].options_array:
@ -78,17 +68,28 @@ func _ready() -> void:
i = i+1 i = i+1
options_container.get_child(0).grab_focus() options_container.get_child(0).grab_focus()
#DKM TEMP: convert JSON file to dictionary for module import: #Master method for handling user interaction:
func loadJSONToDict(filepath:String)->Dictionary: func change_node(destinationNode: String, destinationParams: Array = []) -> void:
var file = File.new() var target_Locale = get_node_by_name(destinationNode)
#assert file.file_exists(filepath) #Run provided action:
file.open(filepath,file.READ) if target_Locale.locale_action == "ShowText":
var moduleDict = parse_json(file.get_as_text()) action_show_text(target_Locale)
#assert moduleDict.size() > 0 elif target_Locale.locale_action == "RollDice" && target_Locale.destinations_array.size() == 1:
return moduleDict action_roll_die(target_Locale)
#DKM TEMP: testing passed param handling by node to node
elif target_Locale.locale_action == "TestHandleNodeParams":
action_handle_node_params_testing(target_Locale, destinationParams)
#DKM TEMP: running an ability check test on passed node:
elif target_Locale.locale_action == "TestAbstractAbilityCheck":
action_ability_check_testing(target_Locale, destinationParams)
options_container.get_child(0).grab_focus()
#Handles input text ####################################################
#DISPLAY METHODS:
# Handles output text and options
####################################################
func create_response(response_text: String): func create_response(response_text: String):
var response = TextOutput.instance() var response = TextOutput.instance()
response.text = response_text response.text = response_text
@ -103,11 +104,7 @@ func add_response_to_game(response: Control):
current_text.add_child(response) current_text.add_child(response)
func add_response_to_history(response: Control) -> void: func add_response_to_history(response: Control) -> void:
#DKM TEMP: so here we
#1. var response_history = response.duplicate()
var response_for_history = response.duplicate() var response_for_history = response.duplicate()
#2. get the history array from the singleton,
#3. Add this to the history array
history_source.output_history_array.append(response_for_history) history_source.output_history_array.append(response_for_history)
func clear_prior_options() -> void: func clear_prior_options() -> void:
@ -129,36 +126,15 @@ func add_option_to_game(optionNew: Control) -> void:
#print("New added opt is: " + str(newOptNumber-1)) #print("New added opt is: " + str(newOptNumber-1))
options_container.get_child(newOptNumber-1).connect("option_pressed", self, "_on_option_pressed") options_container.get_child(newOptNumber-1).connect("option_pressed", self, "_on_option_pressed")
#DKM TEMP: these need to be dynamically added with the options themselves
func _on_option_pressed(destinationSelected: String) -> void: func _on_option_pressed(destinationSelected: String) -> void:
#print("Destination node for pressed option is: " + destinationSelected) #print("Destination node for pressed option is: " + destinationSelected)
change_node(destinationSelected) change_node(destinationSelected)
func get_node_by_name(nodeName: String) -> Locale:
for n in nodeArray:
if n.locale_name == nodeName:
return n
return nodeArray[0]
func change_node(destinationNode: String, destinationParams: Array = []) -> void:
var target_Locale = get_node_by_name(destinationNode)
#Run provided action:
if target_Locale.locale_action == "ShowText":
action_show_text(target_Locale)
elif target_Locale.locale_action == "RollDice" && target_Locale.destinations_array.size() == 1:
action_roll_die(target_Locale)
#DKM TEMP: testing passed param handling by node to node
elif target_Locale.locale_action == "TestHandleNodeParams":
create_response(target_Locale.locale_description + str(destinationParams))
clear_prior_options()
var i = 0
for option in target_Locale.options_array:
var destArr = target_Locale.destinations_array
create_option(option, destArr[i])
i = i+1
options_container.get_child(0).grab_focus()
####################################################
#ACTION HANDLERS:
# Process actions from selected nodes
####################################################
func action_show_text(newLocale: Locale) -> void: func action_show_text(newLocale: Locale) -> void:
create_response(newLocale.locale_description) create_response(newLocale.locale_description)
clear_prior_options() clear_prior_options()
@ -181,19 +157,66 @@ func action_roll_die(newLocale: Locale) -> void:
DiceRoller.dieManager.setDieManager(dieParams, 0.5) DiceRoller.dieManager.setDieManager(dieParams, 0.5)
var result = DiceRoller.dieManager.rollDice() var result = DiceRoller.dieManager.rollDice()
print("Rolled values: " + str(result[0])) print("Rolled values: " + str(result[0]))
if(DiceRoller.dieManager.isPercentageRoll):
#DKM TEMP: Andrew's code for ref: var percDie = int(result[1]*100)
#assigning variable names to each of them for better clarity print("DKM TEMP: is percentage roll and perc res is: " + str(percDie))
# var rolledValues = result[0] var perc_result = [percDie]
# var percentRolled = result[1] change_node(newLocale.destinations_array[0], perc_result)
# var passResult = result[2] else:
# var neededPercent = result[3]
# var degreeOfSuccess = result[4]
# var dice = result[5]
change_node(newLocale.destinations_array[0], result[0]) change_node(newLocale.destinations_array[0], result[0])
#DKM TEMP: saves the entire scene in one packed scene file
func save_module(): #TESTING ACTIONS:
var scene = PackedScene.new() #Test version of ability check -- only built our for strength and agility with this output
scene.pack(self) func action_ability_check_testing(t_Locale: Locale, d_Params: Array = []) -> void:
ResourceSaver.save("user://game_01.tscn", scene) var check_result ="NA"
print("Testing: passed stat is :" +t_Locale.locale_action_params[0])
if(t_Locale.locale_action_params[0] in pSingleton.pc.viableCharStats):
match t_Locale.locale_action_params[0]:
"AG":
if(int(d_Params[0])<= pSingleton.pc.agility):
check_result = "PASS"
else:
check_result = "FAIL"
"ST":
if(int(d_Params[0])<= pSingleton.pc.strength):
check_result = "PASS"
else:
check_result = "FAIL"
create_response(t_Locale.locale_description + check_result + " with roll of: " + str(d_Params) + "; on ability of: " + str(pSingleton.pc.strength))
clear_prior_options()
var i = 0
for option in t_Locale.options_array:
var destArr = t_Locale.destinations_array
create_option(option, destArr[i])
i = i+1
func action_handle_node_params_testing(t_Locale: Locale, d_Params: Array = []) -> void:
create_response(t_Locale.locale_description + str(d_Params))
clear_prior_options()
var i = 0
for option in t_Locale.options_array:
var destArr = t_Locale.destinations_array
create_option(option, destArr[i])
i = i+1
####################################################
#HELPER METHODS:
####################################################
func get_node_by_name(nodeName: String) -> Locale:
for n in nodeArray:
if n.locale_name == nodeName:
return n
return nodeArray[0]
#Convert JSON file to dictionary for module import:
# DKM TEMP: JSON only for development work -- will come from alt data source
func load_JSON_to_dict(filepath:String)->Dictionary:
var file = File.new()
#assert file.file_exists(filepath)
file.open(filepath,file.READ)
var moduleDict = parse_json(file.get_as_text())
#assert moduleDict.size() > 0
return moduleDict

View File

@ -96,8 +96,6 @@ func rollDice():
if isPercentageRoll: if isPercentageRoll:
sumOfPercentages += (returnDiePercentage(diceUsed[0]) / 10.0) + (returnDiePercentage(diceUsed[1]) / 100.0) sumOfPercentages += (returnDiePercentage(diceUsed[0]) / 10.0) + (returnDiePercentage(diceUsed[1]) / 100.0)
else: else:
#DKM TEMP: not percentage roll:
print("TEMP: not percentage roll")
for die in diceUsed: for die in diceUsed:
sumOfPercentages += returnDiePercentage(die) sumOfPercentages += returnDiePercentage(die)
denominator += 1 denominator += 1

View File

@ -6,3 +6,52 @@ extends Resource
class_name playerCharacterTemplate class_name playerCharacterTemplate
var pcText = "" var pcText = ""
#BCO-RPG SRIS system (percentile):
var viableCharStats = ["AG",
"APP",
"CO",
"QU",
"MD",
"ST",
"CH",
"EM",
"IN",
"ME",
"MX",
"PR",
"RE",
"SD"]
var agility = 0
var appearance = 0
var constitution = 0
var quickness = 0
var manual_dexterity = 0
var strength = 0
var chutzpah = 0
var empathy = 0
var intuition = 0
var memory = 0
var moxie = 0
var presence = 0
var reasoning = 0
var self_discipline = 0
func toString() -> String:
return("pcText: " + str(pcText) +
"; Agility: " + str(agility) +
"; Appearance: " + str(appearance) +
"; Constitution: " + str(constitution) +
"; Quickness: " + str(quickness) +
"; Manual_dexterity: " + str(manual_dexterity) +
"; Strength: " + str(strength) +
"; Chutzpah: " + str(chutzpah) +
"; Empathy: " + str(empathy) +
"; Intuition: " + str(intuition) +
"; Memory: " + str(memory) +
"; Moxie: " + str(moxie) +
"; Presence: " + str(presence) +
"; Reasoning: " + str(reasoning) +
"; Self_discipline: " + str(self_discipline)
)

View File

@ -16,6 +16,41 @@ func _ready() -> void:
func _on_Button_pressed(): func _on_Button_pressed():
$FileDialog.popup() $FileDialog.popup()
#Import character file
func _charSetStat(statname: String, statvalue: int) -> void:
if statname in pSingleton.viableCharStats:
match statname:
"AG":
pSingleton.agility = statvalue
"APP":
pSingleton.appearance = statvalue
"CO":
pSingleton.constitution = statvalue
"QU":
pSingleton.quickness = statvalue
"MD":
pSingleton.manual_dexterity = statvalue
"ST":
pSingleton.strength = statvalue
"CH":
pSingleton.chutzpah = statvalue
"EM":
pSingleton.empathy = statvalue
"IN":
pSingleton.intuition = statvalue
"ME":
pSingleton.memory = statvalue
"MX":
pSingleton.moxie = statvalue
"PR":
pSingleton.presence = statvalue
"RE":
pSingleton.reasoning = statvalue
"SD":
pSingleton.self_discipline = statvalue
else:
return
#this is going to take information from the file the player chose and put the individul parts into textboxes so it can be edited and then saved #this is going to take information from the file the player chose and put the individul parts into textboxes so it can be edited and then saved
func _on_FileDialog_file_selected(path): func _on_FileDialog_file_selected(path):
var file = File.new() var file = File.new()
@ -27,6 +62,8 @@ func _on_FileDialog_file_selected(path):
var csvStrArray = file.get_csv_line() var csvStrArray = file.get_csv_line()
var i = 0 var i = 0
var isLabel = true var isLabel = true
var row_label = ""
var row_value = ""
while i < csvStrArray.size(): while i < csvStrArray.size():
var csvStr = csvStrArray[i] var csvStr = csvStrArray[i]
if(isLabel): if(isLabel):
@ -34,10 +71,14 @@ func _on_FileDialog_file_selected(path):
var textLine = Label.new() var textLine = Label.new()
$ScrollContainer/VBoxContainer.add_child(textLine) $ScrollContainer/VBoxContainer.add_child(textLine)
textLine.text = csvStr.to_upper() textLine.text = csvStr.to_upper()
row_label = csvStr.to_upper()
isLabel = false isLabel = false
#DKM TEMP: save this unformatted to the singleton text string #DKM TEMP: save this unformatted to the singleton text string
pSingleton.pcText += csvStr.to_upper() + ": " pSingleton.pcText += csvStr.to_upper() + ": "
else: else:
row_value = csvStr
if(typeof(int(row_value)) == TYPE_INT):
_charSetStat(row_label, int(row_value))
isLabel = true isLabel = true
var textBox = LineEdit.new() var textBox = LineEdit.new()
$ScrollContainer/VBoxContainer.add_child(textBox) $ScrollContainer/VBoxContainer.add_child(textBox)
@ -46,3 +87,6 @@ func _on_FileDialog_file_selected(path):
pSingleton.pcText += csvStr + "\n" pSingleton.pcText += csvStr + "\n"
i += 1 i += 1
file.close() file.close()
#DKM TEMP:
print("PRINTING set char tostring: ")
print(pSingleton.toString())

View File

@ -37,9 +37,8 @@ margin_bottom = 480.0
window_title = "Open a File" window_title = "Open a File"
mode = 0 mode = 0
access = 2 access = 2
current_dir = "/ProgramData/CS_Working/RPGR/Godot_projects/bcirpg_mergedDemo_20220911A" current_dir = "/ProgramData/CS_Working/RPGR/Godot_projects/bcirpg_mergedMaster_20220918A"
current_file = "_userData/characterFiles" current_path = "/ProgramData/CS_Working/RPGR/Godot_projects/bcirpg_mergedMaster_20220918A/"
current_path = "/ProgramData/CS_Working/RPGR/Godot_projects/bcirpg_mergedDemo_20220911A/_userData/characterFiles"
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }