worked more on character creator

This commit is contained in:
Adam Burns 2026-02-19 21:47:23 -05:00
parent 9cd1f5c460
commit 2f925561c1
3 changed files with 201 additions and 17 deletions

View File

@ -17,11 +17,10 @@ enum CharacterClass {
var class_info: Dictionary[CharacterClass, Dictionary] = {
CharacterClass.BARBARIAN: {
"description": "Rage",
"known_for": "Rage",
"primary_abilities": [
Abilities.Ability.STRENGTH
],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [
Skills.Skill.ANIMAL_HANDLING,
Skills.Skill.ATHLETICS,
@ -30,7 +29,7 @@ var class_info: Dictionary[CharacterClass, Dictionary] = {
Skills.Skill.PERCEPTION,
Skills.Skill.SURVIVAL,
],
"skill_proficiency_number_to_choose": 2,
"skill_proficiencies_number_to_choose": 2,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 15,
Abilities.Ability.DEXTERITY: 13,
@ -41,11 +40,10 @@ var class_info: Dictionary[CharacterClass, Dictionary] = {
}
},
CharacterClass.BARD: {
"description": "Razzle-dazzle",
"known_for": "Razzle-dazzle",
"primary_abilities": [
Abilities.Ability.CHARISMA
],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [
Skills.Skill.ACROBATICS,
Skills.Skill.ANIMAL_HANDLING,
@ -66,7 +64,7 @@ var class_info: Dictionary[CharacterClass, Dictionary] = {
Skills.Skill.STEALTH,
Skills.Skill.SURVIVAL,
],
"skill_proficiency_number_to_choose": 3,
"skill_proficiencies_number_to_choose": 3,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 8,
Abilities.Ability.DEXTERITY: 14,
@ -75,5 +73,172 @@ var class_info: Dictionary[CharacterClass, Dictionary] = {
Abilities.Ability.WISDOM: 10,
Abilities.Ability.CHARISMA: 15
}
},
CharacterClass.CLERIC: {
"known_for": "Devotion",
"primary_abilities": [
Abilities.Ability.WISDOM
],
"skill_proficiencies": [
Skills.Skill.HISTORY,
Skills.Skill.INSIGHT,
Skills.Skill.MEDICINE,
Skills.Skill.PERSUASION,
Skills.Skill.RELIGION,
],
"skill_proficiencies_number_to_choose": 2,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 14,
Abilities.Ability.DEXTERITY: 8,
Abilities.Ability.CONSTITUTION: 13,
Abilities.Ability.INTELLIGENCE: 10,
Abilities.Ability.WISDOM: 15,
Abilities.Ability.CHARISMA: 12,
}
},
CharacterClass.DRUID: {
"known_for": "Vibes",
"primary_abilities": [
Abilities.Ability.WISDOM
],
"skill_proficiencies": [
Skills.Skill.ANIMAL_HANDLING,
Skills.Skill.ARCANA,
Skills.Skill.INSIGHT,
Skills.Skill.MEDICINE,
Skills.Skill.NATURE,
Skills.Skill.PERCEPTION,
Skills.Skill.RELIGION,
Skills.Skill.SURVIVAL,
],
"skill_proficiencies_number_to_choose": 1,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 8,
Abilities.Ability.DEXTERITY: 12,
Abilities.Ability.CONSTITUTION: 14,
Abilities.Ability.INTELLIGENCE: 13,
Abilities.Ability.WISDOM: 15,
Abilities.Ability.CHARISMA: 10,
},
},
CharacterClass.FIGHTER: {
"known_for": "...fighting?",
"primary_abilities": [],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [],
"skill_proficiencies_number_to_choose": 1,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 1,
Abilities.Ability.DEXTERITY: 1,
Abilities.Ability.CONSTITUTION: 1,
Abilities.Ability.INTELLIGENCE: 1,
Abilities.Ability.WISDOM: 1,
Abilities.Ability.CHARISMA: 1,
},
},
CharacterClass.MONK: {
"known_for": "",
"primary_abilities": [],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [],
"skill_proficiencies_number_to_choose": 1,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 1,
Abilities.Ability.DEXTERITY: 1,
Abilities.Ability.CONSTITUTION: 1,
Abilities.Ability.INTELLIGENCE: 1,
Abilities.Ability.WISDOM: 1,
Abilities.Ability.CHARISMA: 1,
},
},
CharacterClass.PALADIN: {
"known_for": "",
"primary_abilities": [],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [],
"skill_proficiencies_number_to_choose": 1,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 1,
Abilities.Ability.DEXTERITY: 1,
Abilities.Ability.CONSTITUTION: 1,
Abilities.Ability.INTELLIGENCE: 1,
Abilities.Ability.WISDOM: 1,
Abilities.Ability.CHARISMA: 1,
},
},
CharacterClass.RANGER: {
"known_for": "",
"primary_abilities": [],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [],
"skill_proficiencies_number_to_choose": 1,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 1,
Abilities.Ability.DEXTERITY: 1,
Abilities.Ability.CONSTITUTION: 1,
Abilities.Ability.INTELLIGENCE: 1,
Abilities.Ability.WISDOM: 1,
Abilities.Ability.CHARISMA: 1,
},
},
CharacterClass.ROGUE: {
"known_for": "",
"primary_abilities": [],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [],
"skill_proficiencies_number_to_choose": 1,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 1,
Abilities.Ability.DEXTERITY: 1,
Abilities.Ability.CONSTITUTION: 1,
Abilities.Ability.INTELLIGENCE: 1,
Abilities.Ability.WISDOM: 1,
Abilities.Ability.CHARISMA: 1,
},
},
CharacterClass.SORCERER: {
"known_for": "",
"primary_abilities": [],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [],
"skill_proficiencies_number_to_choose": 1,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 1,
Abilities.Ability.DEXTERITY: 1,
Abilities.Ability.CONSTITUTION: 1,
Abilities.Ability.INTELLIGENCE: 1,
Abilities.Ability.WISDOM: 1,
Abilities.Ability.CHARISMA: 1,
},
},
CharacterClass.WARLOCK: {
"known_for": "",
"primary_abilities": [],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [],
"skill_proficiencies_number_to_choose": 1,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 1,
Abilities.Ability.DEXTERITY: 1,
Abilities.Ability.CONSTITUTION: 1,
Abilities.Ability.INTELLIGENCE: 1,
Abilities.Ability.WISDOM: 1,
Abilities.Ability.CHARISMA: 1,
},
},
CharacterClass.WIZARD: {
"known_for": "",
"primary_abilities": [],
"primary_abilities_number_to_choose": 1,
"skill_proficiencies": [],
"skill_proficiencies_number_to_choose": 1,
"default_ability_scores": {
Abilities.Ability.STRENGTH: 1,
Abilities.Ability.DEXTERITY: 1,
Abilities.Ability.CONSTITUTION: 1,
Abilities.Ability.INTELLIGENCE: 1,
Abilities.Ability.WISDOM: 1,
Abilities.Ability.CHARISMA: 1,
},
}
}

View File

@ -1,16 +1,21 @@
class_name AbilityContainer
extends HBoxContainer
var ability_name : String = "SomeAbility": set = set_ability_name
var ability_name: String = "SomeAbility": set = set_ability_name
var ability_score: int: set = set_ability_score
@onready var ability_label: Label = $AbilityLabel
@onready var ability_score: OptionButton = $AbilityScore
@onready var ability_score_button: OptionButton = $AbilityScore
func _ready() -> void:
for score in 20:
ability_score.add_item(str(score + 1))
ability_score_button.add_item(str(score + 1))
func set_ability_name(a_n: String) -> void:
print_debug("Creating an Ability Container for %s" % a_n)
ability_name = a_n
ability_label.text = ability_name
func set_ability_score(a_s: int) -> void:
ability_score = a_s
ability_score_button.select(a_s - 1)

View File

@ -2,18 +2,32 @@ extends Control
const ABILITY_CONTAINER = preload("uid://cj2817cl63cf")
var ability_containers: Array[Node]
@onready var character_class_options: OptionButton = %CharacterClassOptions
@onready var abilities_grid: GridContainer = %AbilitiesGrid
func _ready() -> void:
var ability_containers = abilities_grid.get_children()
_connect_signals()
for character_class in Classes.CharacterClass:
character_class_options.add_item(str(character_class).to_pascal_case())
var character_class_info: Dictionary = Classes.class_info[Classes.CharacterClass[character_class]]
if character_class_info.get("known_for"):
character_class_options.set_item_tooltip(Classes.CharacterClass[character_class], character_class_info.get("known_for"))
ability_containers = abilities_grid.get_children()
for ability in Abilities.Ability:
var ability_container: AbilityContainer = ability_containers[Abilities.Ability[ability]]
ability_container.ability_name = str(ability).to_pascal_case()
#var new_container: AbilityContainer = ABILITY_CONTAINER.instantiate()
#new_container.ability_name = str(ability).to_pascal_case()
#abilities_grid.add_child(new_container)
for character_class in Classes.CharacterClass:
print_debug(character_class)
character_class_options.add_item(str(character_class).to_pascal_case())
func on_class_selected(index_of_class_selected: int) -> void:
print_debug("You chose %s" % index_of_class_selected)
var selected_class_info: Dictionary = Classes.class_info[index_of_class_selected]
var selected_class_ability_scores = selected_class_info.get("default_ability_scores")
print_debug("Here's the stats: %s" % selected_class_ability_scores)
for index_of_default_ability_score in selected_class_ability_scores:
var ability_container = ability_containers[index_of_default_ability_score] as AbilityContainer
ability_container.ability_score = selected_class_ability_scores[index_of_default_ability_score]
func _connect_signals() -> void:
character_class_options.connect("item_selected", on_class_selected)